| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>CSS Selectors Invalidation: :defined</title> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#the-defined-pseudo"> |
| <meta name="assert" content="This tests that the :defined selector is effective"> |
| <link rel="help" href="https://html.spec.whatwg.org/multipage/semantics-other.html#selector-defined"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| #container { |
| color: gray; |
| } |
| |
| #a1:defined { |
| color: blue; |
| } |
| :defined + #b1 { |
| color: green; |
| } |
| :defined > #c1 { |
| color: red; |
| } |
| div + :defined + * #d1 { |
| color: yellow; |
| } |
| </style> |
| </head> |
| <body> |
| <section id="container"> |
| <elucidate-late id="a1"></elucidate-late> |
| <div id="b1"></div> |
| <elucidate-late> |
| <div id="c1"></div> |
| </elucidate-late> |
| <div> |
| <div id="d1"></div> |
| </div> |
| </section> |
| |
| <script> |
| const gray = "rgb(128, 128, 128)"; |
| const blue = "rgb(0, 0, 255)"; |
| const green = "rgb(0, 128, 0)"; |
| const red = "rgb(255, 0, 0)"; |
| const yellow = "rgb(255, 255, 0)"; |
| |
| function assertGray(a, b, c, d) { |
| assert_equals(getComputedStyle(a).color, gray); |
| assert_equals(getComputedStyle(b).color, gray); |
| assert_equals(getComputedStyle(c).color, gray); |
| assert_equals(getComputedStyle(d).color, gray); |
| } |
| |
| function assertColorful(a, b, c, d) { |
| assert_equals(getComputedStyle(a).color, blue); |
| assert_equals(getComputedStyle(b).color, green); |
| assert_equals(getComputedStyle(c).color, red); |
| assert_equals(getComputedStyle(d).color, yellow); |
| } |
| |
| class ElucidateLate extends HTMLElement { |
| constructor() { |
| super(); |
| } |
| } |
| |
| test(() => { |
| assertGray(a1, b1, c1, d1); |
| customElements.define('elucidate-late', ElucidateLate); |
| assertColorful(a1, b1, c1, d1); |
| }, ":defined selector is effective"); |
| |
| </script> |
| </body> |
| </html> |