WPT
wpt / css / css-pseudo / parsing / tree-abiding-pseudo-elements.html
Spec: CSS Pseudo-Elements ↗
Runs: Chrome 155.0.8043.0 (wpt@d317428a6, 2026-09-05) | Firefox 157.0a1 (wpt@c9b235301, 2026-09-05) | Safari 251 preview (wpt@c29bd2aee, 2026-09-05) | Ladybird 1.0-62d2b (wpt@6f9e382f6, 2026-09-05) | Servo Servo 0.6 (wpt@2c385f65e, 2026-09-04) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 41/41 | 41/41 | 39/41 | 36/41 | 35/41 | 0/41 |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| "::before" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "*::before" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "foo.bar[baz]::before" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::before *" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::after" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "*::after" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "foo.bar[baz]::after" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::after *" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::marker" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "*::marker" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "foo.bar[baz]::marker" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::marker *" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::placeholder" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "*::placeholder" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "foo.bar[baz]::placeholder" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::placeholder *" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::file-selector-button" should be a valid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::file-selector-button:hover" should be a valid selector | PASS | PASS | PASS | PASS | FAIL | FAIL |
| "::file-selector-button:focus" should be a valid selector | PASS | PASS | PASS | PASS | FAIL | FAIL |
| "::file-selector-button:active" should be a valid selector | PASS | PASS | PASS | PASS | FAIL | FAIL |
| "::file-selector-button:is(:hover)" should be a valid selector | PASS | PASS | PASS | PASS | FAIL | FAIL |
| "::file-selector-button::before" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::file-selector-button#id" should be an invalid selector | PASS | PASS | PASS | FAIL | PASS | FAIL |
| "::file-selector-button#class" should be an invalid selector | PASS | PASS | PASS | FAIL | PASS | FAIL |
| "::file-selector-button:host" should be an invalid selector | PASS | PASS | PASS | FAIL | PASS | FAIL |
| "::before::before" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::after::before" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::marker::before" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::placeholder::before" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::before::after" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::after::after" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::marker::after" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::placeholder::after" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::before::marker" should be a valid selector | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
| "::after::marker" should be a valid selector | PASS | PASS | FAIL | FAIL | FAIL | FAIL |
| "::marker::marker" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::placeholder::marker" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::before::placeholder" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::after::placeholder" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::marker::placeholder" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |
| "::placeholder::placeholder" should be an invalid selector | PASS | PASS | PASS | PASS | PASS | FAIL |