| <!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> |