| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring-1/"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <style> | |
| #scroller { | |
| overflow: scroll; | |
| width: 300px; | |
| height: 300px; | |
| } | |
| #before { height: 50px; } | |
| #content { margin-top: 100px; margin-bottom: 600px; } | |
| .no { overflow-anchor: none; } | |
| </style> | |
| <div id="scroller"> | |
| <div id="before"></div> | |
| <div id="content">content</div> | |
| </div> | |
| <script> | |
| // Tests that dynamic styling 'overflow-anchor' on an anchor node has the | |
| // same effect as initial styling | |
| test(() => { | |
| let scroller = document.querySelector("#scroller"); | |
| let before = document.querySelector("#before"); | |
| let content = document.querySelector("#content"); | |
| // Scroll down so that #content is the first element in the viewport | |
| scroller.scrollTop = 100; | |
| // Change the height of #before to trigger a scroll adjustment. This ensures | |
| // that #content was selected as a scroll anchor | |
| before.style.height = "100px"; | |
| assert_equals(scroller.scrollTop, 150); | |
| // Now set 'overflow-anchor: none' on #content. This should invalidate the | |
| // scroll anchor, and #scroller should recalculate its anchor. There are no | |
| // other valid anchors in the viewport, so there should be no anchor. | |
| content.className = 'no'; | |
| // Change the height of #before and make sure we don't adjust. This ensures | |
| // that #content was not selected as a scroll anchor | |
| before.style.height = "150px"; | |
| assert_equals(scroller.scrollTop, 150); | |
| }, "Dynamically styling 'overflow-anchor: none' on the anchor node should prevent scroll anchoring"); | |
| </script> |