WPT
wpt / css / css-cascade / scope-invalidation.html
Spec: CSS Cascading ↗
Runs: Chrome 155.0.8039.0 (wpt@d0c38285b, 2026-09-03) | Firefox 157.0a1 (wpt@ed1909ed6, 2026-09-03) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-56c61 (wpt@cc4d45aa0, 2026-09-03) | Servo Servo 0.6 (wpt@09159dcb3, 2026-09-02) | Blitz 188486089 (wpt@a95401e4e, 2026-09-02)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 29/29 | 29/29 | 29/29 | 29/29 | 0/29 | 0/29 |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Element becoming scope root | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Element becoming scope root (selector list) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Element becoming scope root, with inner :scope rule | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Parent element becoming scope limit | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Parent element becoming scope limit (selector list) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Subject element becoming scope limit | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Parent element affecting scope limit | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Sibling element affecting scope limit | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Toggling inner/outer scope roots | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Element becoming root, with :scope in subject | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Scope root with :has() | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Scope root with :has(), :scope subject | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Scope root with :has(), :scope both subject and non-subject | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Scope limit with :has() | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Element becoming root, with :scope selected by ~ combinator | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Element becoming root via ~ combinator | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Element becoming root via + combinator | PASS | PASS | PASS | PASS | FAIL | FAIL |
| :not(scope) in subject | PASS | PASS | PASS | PASS | FAIL | FAIL |
| :not(scope) in ancestor | PASS | PASS | PASS | PASS | FAIL | FAIL |
| :not(scope) in limit subject | PASS | PASS | PASS | PASS | FAIL | FAIL |
| :not(scope) in limit ancestor | PASS | PASS | PASS | PASS | FAIL | FAIL |
| :nth-child() in scope root | PASS | PASS | PASS | PASS | FAIL | FAIL |
| :nth-child() in scope limit | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Modifying selectorText invalidates affected elements | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Modifying selectorText invalidates affected elements (>) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Relative selectors set with selectorText are relative to :scope and & | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Ancestor element affecting nested scope root (Through latter selector in list) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Parent element of subject affecting scope limit | PASS | PASS | PASS | PASS | FAIL | FAIL |
| Sandwiched deep implicit scope root, :scope in subject | PASS | PASS | PASS | PASS | FAIL | FAIL |