position-change-heuristic-display-none-change.html (1968B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> 5 <link rel="author" title="Mozilla" href="https://mozilla.org"> 6 <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1543599"> 7 <link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers"> 8 <style> 9 #hidden { 10 display: none; 11 background: red; 12 } 13 #spacer { 14 height: calc(100vh + 200px); /* At least 200px of scroll range */ 15 } 16 </style> 17 <table> 18 <thead> 19 <tr> 20 <th>1 21 <th>1 22 <th>1 23 <th>1 24 </tr> 25 </thead> 26 <thead id="hidden"> 27 <tr> 28 <th>1 29 <th>1 30 <th>1 31 <th>1 32 </tr> 33 </thead> 34 <tbody> 35 <tr><td>0 <td>0 <td>0 <td>0 </tr> 36 <tr><td>0 <td>0 <td>0 <td>0 </tr> 37 <tr><td>0 <td>0 <td>0 <td>0 </tr> 38 <tr><td>0 <td>0 <td>0 <td>0 </tr> 39 <tr><td>0 <td>0 <td>0 <td>0 </tr> 40 <tr><td>0 <td>0 <td>0 <td>0 </tr> 41 <tr><td>0 <td>0 <td>0 <td>0 </tr> 42 </tbody> 43 </table> 44 <div id="spacer"></div> 45 <script> 46 let firstEvent = true; 47 const targetScrollPosition = 100; 48 const hidden = document.querySelector("#hidden"); 49 const t = async_test("Scroll offset doesn't change when an element goes back and forth to display: none"); 50 window.onscroll = t.step_func(function() { 51 hidden.style.display = "block"; 52 hidden.style.position = "absolute"; 53 hidden.style.visibility = "hidden"; 54 window.unused = hidden.offsetHeight; 55 hidden.style.display = ""; 56 hidden.style.position = ""; 57 hidden.style.visibility = ""; 58 59 if (firstEvent) { 60 firstEvent = false; 61 requestAnimationFrame(t.step_func(function() { 62 requestAnimationFrame(t.step_func_done(function() { 63 assert_equals(document.scrollingElement.scrollTop, targetScrollPosition); 64 })); 65 })); 66 } 67 }); 68 69 window.onload = t.step_func(function() { 70 window.scrollTo(0, targetScrollPosition); 71 }); 72 </script>