| <!DOCTYPE html> | |
| <title>Layout Instability: no layout shift if transform change counters location change</title> | |
| <link rel="help" href="https://wicg.github.io/layout-instability/" /> | |
| <style> | |
| body { margin: 0; } | |
| #transformed { position: relative; transform: translateX(20px); width: 100px; height: 100px; background: blue; } | |
| #child { width: 400px; height: 400px; } | |
| </style> | |
| <div id="transformed"> | |
| <div id="child"></div> | |
| </div> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="resources/util.js"></script> | |
| <script> | |
| promise_test(async () => { | |
| const watcher = new ScoreWatcher; | |
| // Wait for the initial render to complete. | |
| await waitForAnimationFrames(2); | |
| // Modify the transform and the location at the same time, and the values | |
| // cancel each other visually, for which no shift should be reported. | |
| transformed.style.transform = 'translateY(100px)'; | |
| transformed.style.top = '-100px'; | |
| transformed.style.left = '20px'; | |
| // Change size of child, for which no shift should be reported, either. | |
| child.style.width = '300px'; | |
| await waitForAnimationFrames(2); | |
| // No shift should be reported. | |
| assert_equals(watcher.score, 0); | |
| }, 'no layout shift if transform change counters location change'); | |
| </script> |