layer-counter-style-override.html (3255B)
1 <!DOCTYPE html> 2 <title>Resolving @counter-style name conflicts with cascade layers</title> 3 <link rel="help" href="https://drafts.csswg.org/css-cascade-5/#layering"> 4 <link rel="author" href="mailto:xiaochengh@chromium.org"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <style> 8 #target, #reference { 9 font-family: monospace; 10 width: min-content; 11 } 12 13 #reference::before { 14 content: '0000'; 15 } 16 17 @counter-style three { 18 system: cyclic; 19 symbols: '000'; 20 } 21 22 @counter-style four { 23 system: cyclic; 24 symbols: '0000'; 25 } 26 </style> 27 28 <ul> 29 <li id="target"></li> 30 <li id="reference"></li> 31 </ul> 32 33 <script> 34 // In all tests, #target::before should have 4 characters, same as #reference. 35 36 const testCases = [ 37 { 38 title: '@counter-style unlayered overrides layered', 39 style: ` 40 #target::before { 41 content: counter(dont-care, custom-counter-style); 42 } 43 44 @counter-style custom-counter-style { 45 system: extends four; 46 } 47 48 @layer { 49 @counter-style custom-counter-style { 50 system: extends three; 51 } 52 } 53 ` 54 }, 55 56 { 57 title: '@counter-style override between layers', 58 style: ` 59 @layer base, override; 60 61 #target::before { 62 content: counter(dont-care, custom-counter-style); 63 } 64 65 @layer override { 66 @counter-style custom-counter-style { 67 system: extends four; 68 } 69 } 70 71 @layer base { 72 @counter-style custom-counter-style { 73 system: extends three; 74 } 75 } 76 ` 77 }, 78 79 { 80 title: '@counter-style override update with appended sheet 1', 81 style: ` 82 @layer base, override; 83 84 #target::before { 85 content: counter(dont-care, custom-counter-style); 86 } 87 88 @layer override { 89 @counter-style custom-counter-style { 90 system: extends four; 91 } 92 } 93 `, 94 append: ` 95 @layer base { 96 @counter-style custom-counter-style { 97 system: extends three; 98 } 99 } 100 ` 101 }, 102 103 { 104 title: '@counter-style override update with appended sheet 2', 105 style: ` 106 @layer base, override; 107 108 #target::before { 109 content: counter(dont-care, custom-counter-style); 110 } 111 112 @layer base { 113 @counter-style custom-counter-style { 114 system: extends three; 115 } 116 } 117 `, 118 append: ` 119 @layer override { 120 @counter-style custom-counter-style { 121 system: extends four; 122 } 123 } 124 ` 125 }, 126 ]; 127 128 for (let testCase of testCases) { 129 var documentStyle = document.createElement('style'); 130 documentStyle.appendChild(document.createTextNode(testCase['style'])); 131 document.head.appendChild(documentStyle); 132 133 var appendedStyle; 134 if (testCase['append']) { 135 document.body.offsetLeft; // Force style update 136 appendedStyle = document.createElement('style'); 137 appendedStyle.appendChild(document.createTextNode(testCase['append'])); 138 document.head.appendChild(appendedStyle); 139 } 140 141 test(function () { 142 assert_equals(getComputedStyle(target).width, 143 getComputedStyle(reference).width); 144 }, testCase['title']); 145 146 if (appendedStyle) 147 appendedStyle.remove(); 148 documentStyle.remove(); 149 } 150 </script>