| <!DOCTYPE html> |
| <title>Custom Functions: ShadowDOM (animations)</title> |
| <link rel="help" href="https://drafts.csswg.org/css-mixins-1/#using-custom-functions"> |
| <link rel="help" href="https://drafts.csswg.org/css-scoping-1/#css-tree-scoped-reference"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/utils.js"></script> |
| |
| <style> |
| @property --length { |
| syntax: "<length>"; |
| inherits: false; |
| initial-value: 0px; |
| } |
| |
| @function --from() { result: 1000px; } |
| @function --to() { result: 2000px; } |
| </style> |
| |
| <div id=can_animate_standard_property_in_shadow> |
| <template shadowrootmode=open> |
| <style> |
| @keyframes --anim { |
| from { width: --from(); } |
| to { width: --to(); } |
| } |
| @function --from() { result: 0px; } |
| @function --to() { result: 100px; } |
| div { |
| animation: --anim 1000s linear paused forwards; |
| } |
| #t00 { animation-delay: 0s; } |
| #t04 { animation-delay: -400s; } |
| #t05 { animation-delay: -500s; } |
| #t06 { animation-delay: -600s; } |
| #t10 { animation-delay: -1000s; } |
| </style> |
| <div id=t00></div> |
| <div id=t04></div> |
| <div id=t05></div> |
| <div id=t06></div> |
| <div id=t10></div> |
| </template> |
| </div> |
| <script> |
| test(() => { |
| let sr = can_animate_standard_property_in_shadow.shadowRoot; |
| let gCS = (id) => getComputedStyle(sr.querySelector(id)) |
| assert_equals(gCS('#t00').width, '0px'); |
| assert_equals(gCS('#t04').width, '40px'); |
| assert_equals(gCS('#t05').width, '50px'); |
| assert_equals(gCS('#t06').width, '60px'); |
| assert_equals(gCS('#t10').width, '100px'); |
| }, 'Can animate standard property in shadow'); |
| </script> |
| |
| <div id=can_animate_typed_custom_property_in_shadow> |
| <template shadowrootmode=open> |
| <style> |
| @keyframes --anim { |
| from { --length: --from(); } |
| to { --length: --to(); } |
| } |
| @function --from() { result: 0px; } |
| @function --to() { result: 100px; } |
| div { |
| animation: --anim 1000s linear paused forwards; |
| } |
| #t00 { animation-delay: 0s; } |
| #t04 { animation-delay: -400s; } |
| #t05 { animation-delay: -500s; } |
| #t06 { animation-delay: -600s; } |
| #t10 { animation-delay: -1000s; } |
| </style> |
| <div id=t00></div> |
| <div id=t04></div> |
| <div id=t05></div> |
| <div id=t06></div> |
| <div id=t10></div> |
| </template> |
| </div> |
| <script> |
| test(() => { |
| let sr = can_animate_typed_custom_property_in_shadow.shadowRoot; |
| let gCS = (id) => getComputedStyle(sr.querySelector(id)) |
| assert_equals(gCS('#t00').getPropertyValue('--length'), '0px'); |
| assert_equals(gCS('#t04').getPropertyValue('--length'), '40px'); |
| assert_equals(gCS('#t05').getPropertyValue('--length'), '50px'); |
| assert_equals(gCS('#t06').getPropertyValue('--length'), '60px'); |
| assert_equals(gCS('#t10').getPropertyValue('--length'), '100px'); |
| }, 'Can animate typed custom property in shadow'); |
| </script> |
| |
| <div id=can_animate_untyped_custom_property_in_shadow> |
| <template shadowrootmode=open> |
| <style> |
| @keyframes --anim { |
| from { --untyped: --from(); } |
| to { --untyped: --to(); } |
| } |
| @function --from() { result: 0px; } |
| @function --to() { result: 100px; } |
| div { |
| animation: --anim 1000s linear paused forwards; |
| } |
| #t00 { animation-delay: 0s; } |
| #t04 { animation-delay: -400s; } |
| #t05 { animation-delay: -500s; } |
| #t06 { animation-delay: -600s; } |
| #t10 { animation-delay: -1000s; } |
| </style> |
| <div id=t00></div> |
| <div id=t04></div> |
| <div id=t05></div> |
| <div id=t06></div> |
| <div id=t10></div> |
| </template> |
| </div> |
| <script> |
| test(() => { |
| let sr = can_animate_untyped_custom_property_in_shadow.shadowRoot; |
| let gCS = (id) => getComputedStyle(sr.querySelector(id)) |
| assert_equals(gCS('#t00').getPropertyValue('--untyped'), '0px'); |
| assert_equals(gCS('#t04').getPropertyValue('--untyped'), '0px'); |
| assert_equals(gCS('#t05').getPropertyValue('--untyped'), '100px'); |
| assert_equals(gCS('#t06').getPropertyValue('--untyped'), '100px'); |
| assert_equals(gCS('#t10').getPropertyValue('--untyped'), '100px'); |
| }, 'Can animate untyped custom property in shadow'); |
| </script> |