| <!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> |
| <html> |
| <head> |
| <style type="text/css"> |
| #scroller { |
| overflow: scroll; |
| height: 500px; |
| height: 500px; |
| } |
| #before { |
| height: 200px; |
| } |
| #anchor { |
| position: relative; |
| width: 200px; |
| height: 200px; |
| margin-bottom: 500px; |
| background-color: blue; |
| /* |
| * To trigger the Gecko bug that's being regression-tested here, we |
| * need 'top' to start out at a non-'auto' value, so that the |
| * dynamic change can trigger Gecko's "RecomputePosition" fast path |
| */ |
| top: 0px; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="scroller"> |
| <div id="before"> |
| </div> |
| <div id="anchor"> |
| </div> |
| </div> |
| |
| <script type="text/javascript"> |
| test(() => { |
| let scroller = document.querySelector('#scroller'); |
| let before = document.querySelector('#before'); |
| let anchor = document.querySelector('#anchor'); |
| |
| // Scroll down to select #anchor as a scroll anchor |
| scroller.scrollTop = 200; |
| |
| // Adjust the 'top' of #anchor, which should trigger a suppression |
| anchor.style.top = '10px'; |
| |
| // Expand #before and make sure we don't apply an adjustment |
| before.style.height = '300px'; |
| assert_equals(scroller.scrollTop, 200); |
| }, 'Positioned ancestors with dynamic changes to offsets trigger scroll suppressions.'); |
| </script> |
| </body> |
| </html> |