|  | <!DOCTYPE html> | 
|  | <title>CSS Transitions Test: @starting-style inside size @container</title> | 
|  | <link rel="help" href="https://drafts.csswg.org/css-transitions-2/#defining-before-change-style-the-starting-style-rule"> | 
|  | <link rel="help" href="https://drafts.csswg.org/css-conditional-5/#animated-containers"> | 
|  | <script src="/resources/testharness.js"></script> | 
|  | <script src="/resources/testharnessreport.js"></script> | 
|  | <script src="/css/css-transitions/support/helper.js"></script> | 
|  | <body> | 
|  | </body> | 
|  | <style> | 
|  | #container { | 
|  | container-type: inline-size; | 
|  | width: 100px; | 
|  | } | 
|  | #target { | 
|  | transition-property: background-color; | 
|  | transition-duration: 100s; | 
|  | transition-timing-function: steps(2, start); | 
|  | background-color: lime; | 
|  | display: none; | 
|  | } | 
|  | @container (width > 300px) { | 
|  | @starting-style { | 
|  | #target { background-color: white; } | 
|  | } | 
|  | } | 
|  | @container ((width > 200px) and (width < 300px)) { | 
|  | #target { | 
|  | display: block; | 
|  | } | 
|  | @starting-style { | 
|  | #target { background-color: white; } | 
|  | } | 
|  | } | 
|  | @container (width < 200px) { | 
|  | @starting-style { | 
|  | #target { background-color: red; } | 
|  | } | 
|  | } | 
|  | </style> | 
|  | <script> | 
|  | function setup(test) { | 
|  | let container = document.createElement("div"); | 
|  | container.id = "container"; | 
|  | document.body.appendChild(container); | 
|  |  | 
|  | let target = document.createElement("div"); | 
|  | target.id = "target"; | 
|  | container.appendChild(target); | 
|  |  | 
|  | test.add_cleanup(() => { | 
|  | target.remove(); | 
|  | container.remove(); | 
|  | }); | 
|  | return [container, target]; | 
|  | } | 
|  |  | 
|  | promise_test(async t => { | 
|  | let [container, target] = setup(t); | 
|  | await waitForAnimationFrames(2); | 
|  | assert_equals(getComputedStyle(target).backgroundColor, "rgb(0, 255, 0)", | 
|  | "No transition while display:none"); | 
|  | container.style.width = "400px"; | 
|  | target.style.display = "block"; | 
|  | await waitForAnimationFrames(2); | 
|  | assert_equals(getComputedStyle(target).backgroundColor, "rgb(128, 255, 128)", | 
|  | "@starting-style based on the size query evaluation from " + | 
|  | "the same frame"); | 
|  | }, "Triggered transition from first style update based on up-to-date " + | 
|  | "container query"); | 
|  |  | 
|  | promise_test(async t => { | 
|  | let [container, target] = setup(t); | 
|  | await waitForAnimationFrames(2); | 
|  | assert_equals(getComputedStyle(target).backgroundColor, "rgb(0, 255, 0)", | 
|  | "No transition while display:none"); | 
|  | container.style.width = "250px"; | 
|  | await waitForAnimationFrames(2); | 
|  | assert_equals(getComputedStyle(target).backgroundColor, "rgb(128, 255, 128)", | 
|  | "@starting-style based on the size query evaluation from " + | 
|  | "the same frame"); | 
|  | }, "Triggered transition from the display change inside the up-to-date " + | 
|  | "container query"); | 
|  | </script> |