Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
            
- /css/selectors/invalidation/is.html - WPT Dashboard Interop Dashboard
 
 
<!DOCTYPE html>
<html>
  <head>
    <title>CSS Selectors Invalidation: :is()</title>
    <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com">
    <meta name="assert" content="This tests that the :is() selector is effective">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <style>
      .b {
        color: yellow;
      }
      /*Simple selector arguments */
      .a :is(.b, .c) {
        color: red;
      }
      /*Compound selector arguments */
      .a :is(.c#d, .e) {
        color: green;
      }
      /* Complex selector arguments */
      .a .g>.b {
        color: black;
      }
      .a :is(.e+.f, .g>.b, .h) {
        color: blue;
      }
      .g>.b {
        color: black;
      }
      .a .h {
        color: black;
      }
      /* Nested */
      .a+.c>.e {
        color: black;
      }
      .c>.a+.e {
        color: black;
      }
      .a+:is(.b+.f, :is(.c>.e, .g)) {
        color: red;
      }
      .c>.e {
        color: black;
      }
      /* Non-Subject Compound */
      .a:is(.b *) .c{
        color: blue;
      }
    </style>
  </head>
  <body>
    <div id="a1">
      <div class="b" id="b1">
        Red
      </div>
      <div class="c" id="c1">
        Red
      </div>
      <div class="c" id="d">
        Green
      </div>
      <div class="e" id="e1">
        Green
      </div>
      <div class="f" id="f1">
        Blue
      </div>
      <div class="g">
        <div class="b" id="b2">
          Blue
          <div class="b" id="b3">
            Red
          </div>
        </div>
      </div>
      <div class="h" id="h1">
        Blue
      </div>
    </div>
    <div class="c" id="c2">
      <div id="a2"></div>
      <div class="e" id="e2">
        Red
      </div>
    </div>
    <div id=b4>
      <div>
        <div class=a>
          <div class=c id="c3">
            Blue
          </div>
        </div>
      </div>
    </div>
    <script>
      document.body.offsetTop;
      var black = "rgb(0, 0, 0)";
      var blue = "rgb(0, 0, 255)";
      var green = "rgb(0, 128, 0)";
      var red = "rgb(255, 0, 0)";
      var yellow = "rgb(255, 255, 0)";
      test(() => {
        assert_equals(getComputedStyle(b1).color, yellow);
        assert_equals(getComputedStyle(b2).color, black);
        assert_equals(getComputedStyle(b3).color, yellow);
        assert_equals(getComputedStyle(c1).color, black);
        assert_equals(getComputedStyle(d).color, black);
        assert_equals(getComputedStyle(e1).color, black);
        assert_equals(getComputedStyle(e2).color, black);
        assert_equals(getComputedStyle(f1).color, black);
        assert_equals(getComputedStyle(h1).color, black);
      }, "Preconditions.");
      test(() => {
        a1.className = "a";
        assert_equals(getComputedStyle(b1).color, red);
        assert_equals(getComputedStyle(b3).color, red);
        assert_equals(getComputedStyle(c1).color, red);
      }, "Invalidate :is() for simple selector arguments.");
      test(() => {
        a1.className = "a";
        assert_equals(getComputedStyle(d).color, green);
      }, "Invalidate :is() for compound selector arguments.");
      test(() => {
        a1.className = "a";
        assert_equals(getComputedStyle(b2).color, blue);
        assert_equals(getComputedStyle(b3).color, red);
        assert_equals(getComputedStyle(f1).color, blue);
      }, "Invalidate :is() for complex selector arguments.");
      test(() => {
        a1.className = "a";
        assert_equals(getComputedStyle(e2).color, black);
        a2.className = "a";
        assert_equals(getComputedStyle(e2).color, red);
      }, "Invalidate nested :is().");
      test(() => {
        a1.className = "a";
        assert_equals(getComputedStyle(b2).color, blue);
        assert_equals(getComputedStyle(h1).color, blue);
      }, "Test specificity of :is().");
      test(() => {
        b4.className = "b";
        assert_equals(getComputedStyle(c3).color, blue);
        b4.className = "";
        assert_equals(getComputedStyle(c3).color, red);
        b4.className = "b";
        assert_equals(getComputedStyle(c3).color, blue);
      }, "Invalidate :is() in non-subject compound");
    </script>
  </body>
</html>