| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> |
| <link rel="author" title="Mozilla" href="https://mozilla.org"> |
| <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1543599"> |
| <link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers"> |
| <style> |
| #hidden { |
| display: none; |
| background: red; |
| } |
| #spacer { |
| height: calc(100vh + 200px); /* At least 200px of scroll range */ |
| } |
| </style> |
| <table> |
| <thead> |
| <tr> |
| <th>1 |
| <th>1 |
| <th>1 |
| <th>1 |
| </tr> |
| </thead> |
| <thead id="hidden"> |
| <tr> |
| <th>1 |
| <th>1 |
| <th>1 |
| <th>1 |
| </tr> |
| </thead> |
| <tbody> |
| <tr><td>0 <td>0 <td>0 <td>0 </tr> |
| <tr><td>0 <td>0 <td>0 <td>0 </tr> |
| <tr><td>0 <td>0 <td>0 <td>0 </tr> |
| <tr><td>0 <td>0 <td>0 <td>0 </tr> |
| <tr><td>0 <td>0 <td>0 <td>0 </tr> |
| <tr><td>0 <td>0 <td>0 <td>0 </tr> |
| <tr><td>0 <td>0 <td>0 <td>0 </tr> |
| </tbody> |
| </table> |
| <div id="spacer"></div> |
| <script> |
| let firstEvent = true; |
| const targetScrollPosition = 100; |
| const hidden = document.querySelector("#hidden"); |
| const t = async_test("Scroll offset doesn't change when an element goes back and forth to display: none"); |
| window.onscroll = t.step_func(function() { |
| hidden.style.display = "block"; |
| hidden.style.position = "absolute"; |
| hidden.style.visibility = "hidden"; |
| window.unused = hidden.offsetHeight; |
| hidden.style.display = ""; |
| hidden.style.position = ""; |
| hidden.style.visibility = ""; |
| |
| if (firstEvent) { |
| firstEvent = false; |
| requestAnimationFrame(t.step_func(function() { |
| requestAnimationFrame(t.step_func_done(function() { |
| assert_equals(document.scrollingElement.scrollTop, targetScrollPosition); |
| })); |
| })); |
| } |
| }); |
| |
| window.onload = t.step_func(function() { |
| window.scrollTo(0, targetScrollPosition); |
| }); |
| </script> |