| <!DOCTYPE html> |
| <meta charset="UTF-8"> |
| <title>content animation</title> |
| <link rel="help" href="https://drafts.csswg.org/css-content/#content-property"> |
| <meta name="test" content="box-shadow supports animation"> |
| <link rel="author" href="mailto:graouts@apple.com" title="Antoine Quint"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| |
| .target::after { |
| content: "default"; |
| } |
| |
| @keyframes content-animation { |
| from { content: "from" } |
| to { content: "to" } |
| } |
| |
| .target.animated::after { |
| animation: content-animation 1s paused linear forwards; |
| } |
| |
| </style> |
| <body> |
| <div class="target"></div> |
| <script> |
| |
| test(function() { |
| const target = document.querySelector(".target"); |
| const style = getComputedStyle(target, "::after"); |
| |
| assert_equals(style.content, '"default"', "Before the animation is applied."); |
| |
| target.classList.add("animated"); |
| const animation = target.getAnimations({ subtree: true })[0]; |
| |
| const testContentAtTime = (time, expected) => { |
| animation.currentTime = time; |
| assert_equals(style.content, `"${expected}"`, `Check the animated value at time = ${time}ms`); |
| }; |
| |
| testContentAtTime(0, 'from'); |
| testContentAtTime(499, 'from'); |
| testContentAtTime(500, 'to'); |
| testContentAtTime(999, 'to'); |
| testContentAtTime(1000, 'to'); |
| }, "The content property can be animated with a discrete animation type."); |
| |
| </script> |
| </body> |