| <!DOCTYPE html> |
| <!-- |
| | Test case which ensures that when an element's ancestor has its display set |
| | to none, all running transitions on it are immediately ended. |
| | While the specification doesn't seem to say anything about this, it is |
| | how Chrome and Firefox both work, and it is also intuitively in line with |
| | the following behavior specified for CSS Animations: |
| | From https://www.w3.org/TR/2013/WD-css3-animations-20130219/#animations, |
| | "Setting the display property to ‘none’ will terminate any running animation |
| | applied to the element and its descendants. If an element has a display of |
| | ‘none’, updating display to a value other than ‘none’ will start all |
| | animations applied to the element by the ‘animation-name’ property, as well |
| | as all animations applied to descendants with display other than ‘none’." |
| --> |
| <html> |
| <head> |
| <style> |
| #block { |
| width: 100px; |
| height: 100px; |
| background-color: red; |
| font-size: 30px; |
| transition: background-color 1s, transform 2s linear; |
| } |
| </style> |
| </head> |
| <body> |
| <div id="outer-container"> |
| <div id="inner-container"> |
| <div id="block"></div> |
| </div> |
| </div> |
| |
| <script> |
| if (window.testRunner) { |
| window.testRunner.waitUntilDone(); |
| } |
| |
| var blockDiv = document.getElementById('block'); |
| var containerDiv = document.getElementById('outer-container'); |
| |
| window.addEventListener('load', function() { |
| if (window.testRunner) { |
| // Do a layout upon the load event so that we setup our source styles |
| // that we will be transitioning from. |
| window.testRunner.DoNonMeasuredLayout(); |
| } |
| |
| blockDiv.style.backgroundColor = 'blue'; |
| blockDiv.style.transform = "translate(100px, 0)"; |
| |
| if (window.testRunner) { |
| // Run the transition a bit so that it is started but not completed. |
| window.testRunner.DoNonMeasuredLayout(); |
| window.testRunner.AdvanceClockByMs(500); |
| window.testRunner.DoNonMeasuredLayout(); |
| |
| containerDiv.style.display = "none"; |
| |
| window.testRunner.DoNonMeasuredLayout(); |
| |
| containerDiv.style.display = "block"; |
| |
| // Measure that the transition should now appear to be fully completed. |
| window.testRunner.notifyDone(); |
| } |
| }); |
| </script> |
| |
| </body> |
| </html> |