Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 5 subtest issues.
 - This WPT test may be referenced by the following Test IDs:
            
- /css/css-display/focus/display-contents-focus.html - WPT Dashboard Interop Dashboard
 
 
<!doctype html>
<html>
<head>
  <title>Testing focus for display: contents</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/resources/testdriver.js"></script>
  <script src="/resources/testdriver-vendor.js"></script>
  <script src="/resources/testdriver-actions.js"></script>
</head>
<body>
  <!-- Dec 2023 notes for "display: contents" testing:
  - Per CSS spec, setting "display: contents" must not alter an element's semantics (https://www.w3.org/TR/css-display-3/#valdef-display-contents):
  "As only the box tree is affected, any semantics based on the document tree, such as selector-matching, event handling, and
  property inheritance, are not affected."
  -->
  <h1>Testing focusability of display: contents</h1>
  <button style="display: contents;" class="ex-focusable" data-testname="button with display: contents is focusable">x</button>
  <div role="button" tabindex="0" style="display: contents;" class="ex-focusable" data-testname="div with role button, tabindex=0 and display: contents is focusable"></div>
  <div role="button" tabindex="-1" style="display: contents;" class="ex-focusable" data-testname="div with role button, tabindex=-1 and display: contents is focusable"></div>
  <a href="#" style="display: contents;" class="ex-focusable" data-testname="link with display: contents is focusable">x</a>
  <span role="link" tabindex="0" style="display: contents;" class="ex-focusable" data-testname="span with role link, tabindex=0 and display: contents is focusable"></span>
<script>
  verifyElementsAreFocusable();
  function verifyElementsAreFocusable() {
    const els = document.querySelectorAll(".ex-focusable");
    if (!els.length) {
      throw `Selector passed in verifyElementsAreFocusable should match at least one element.`;
    }
    for (const el of els) {
      let testName = el.getAttribute("data-testname");
      test(() => {
        el.focus();
        assert_equals(document.activeElement, el, "Element is focusable with element.focus()");
      }, `${testName}`);
    }
  };
</script>
</body>
</html>