| <!DOCTYPE html> |
| <title>CSS Transitions Test: trigger transitions on inherited after-change styles for anchored element using fallback</title> |
| <link rel="help" href="https://drafts.csswg.org/css-transitions-1/#after-change-style"> |
| <link rel="help" href="https://drafts.csswg.org/css-anchor-position/"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| body { margin: 0; } |
| #outer, #inner { |
| transition: 2s steps(2, start); |
| transition-property: color, width; |
| } |
| #outer { |
| anchor-name: --anchor; |
| width: 100px; |
| height: 100px; |
| background-color: orange; |
| } |
| #inner.wide { |
| width: 300px !important; |
| } |
| #inner { |
| width: 100px; |
| height: 100px; |
| position: absolute; |
| position-anchor: --anchor; |
| position-area: left center; |
| position-try-fallbacks: --fallback; |
| background-color: teal; |
| } |
| @position-try --fallback { |
| position-area: right center; |
| width: 200px; |
| } |
| |
| #outer { color: red; } |
| #inner { color: black; } |
| #outer.green { color: lime; } |
| #outer.green #inner { color: unset; } |
| </style> |
| <div id="outer"> |
| <div> |
| <div id="inner" class="wide"></div> |
| </div> |
| </div> |
| <script> |
| test(() => { |
| outer.offsetTop; |
| assert_equals(inner.offsetLeft, 100, "Initially using fallback position"); |
| assert_equals(inner.offsetWidth, 300, "Initially using important #inner.wide"); |
| assert_equals(getComputedStyle(inner).color, "rgb(0, 0, 0)", "#inner initially black"); |
| outer.className = "green"; |
| inner.className = ""; |
| assert_equals(inner.offsetLeft, 100, "Still using fallback position"); |
| assert_equals(inner.offsetWidth, 250, "Transitioning from !important width to fallback width"); |
| assert_equals(getComputedStyle(inner).color, "rgb(0, 128, 0)", "#inner halfway between black and lime"); |
| }, "Position fallback correctly applied to after-change style"); |
| </script> |