| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Selectors Level 4: focus-within</title> |
| <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#focus-within-pseudo"> |
| <link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule-one"> |
| <meta name="assert" content="Checks ':focus-within' pseudo-class after 'display: none'."> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="wrapper"> |
| <input id="input"> |
| </div> |
| <script> |
| "use strict"; |
| |
| const wrapper = document.getElementById("wrapper"); |
| const input = document.getElementById("input"); |
| |
| async_test((t) => { |
| input.focus(); |
| window.requestAnimationFrame(() => { |
| t.step(() => assert_true(input.matches(":focus-within"), |
| "Check input matches ':focus-within' after being focused")); |
| t.step(() => assert_true(wrapper.matches(":focus-within"), |
| "Check wrapper matches ':focus-within' after child was focused")); |
| |
| input.style.display = "none"; |
| window.requestAnimationFrame(() => { |
| t.step(() => assert_false(input.matches(":focus-within"), |
| "Check input doesn't match ':focus-within' after getting 'display: none'")); |
| t.step(() => assert_false(wrapper.matches(":focus-within"), |
| "Check wrapper doesn't match ':focus-within' after child got 'display: none'")); |
| input.style.display = "inline"; |
| t.done(); |
| }); |
| }); |
| }, "Test ':focus-within' after 'display:none' on input"); |
| |
| async_test((t) => { |
| input.focus(); |
| window.requestAnimationFrame(() => { |
| t.step(() => assert_true(input.matches(":focus-within"), |
| "Check input matches ':focus-within' after being focused")); |
| t.step(() => assert_true(wrapper.matches(":focus-within"), |
| "Check wrapper matches ':focus-within' after child was focused")); |
| |
| wrapper.style.display = "none"; |
| window.requestAnimationFrame(() => { |
| t.step(() => assert_false(input.matches(":focus-within"), |
| "Check input doesn't match ':focus-within' after parent got 'display: none'")); |
| t.step(() => assert_false(wrapper.matches(":focus-within"), |
| "Check wrapper doesn't match ':focus-within' after getting 'display: none'")); |
| wrapper.style.display = "block"; |
| t.done(); |
| }); |
| }); |
| }, "Test ':focus-within' after 'display:none' on input's parent"); |
| </script> |