WPT
wpt / css / css-display / accessibility / display-contents-role-and-label.html
Spec: CSS Display ↗
Runs: Chrome 155.0.8041.0 (wpt@2c385f65e, 2026-09-04) | Firefox 157.0a1 (wpt@2c385f65e, 2026-09-04) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-a7825 (wpt@2c385f65e, 2026-09-04) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | 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 | 112/112 | 112/112 | 112/112 | 98/112 | 39/112 | 0/112 |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| tr with display: contents, within table with display: flex, has row role | PASS | PASS | PASS | PASS | FAIL | — |
| td as child of tr with display: contents, within table with display: flex, has cell role | PASS | PASS | PASS | PASS | FAIL | — |
| tr with display: contents, within table with role=table with display: flex, has row role | PASS | PASS | PASS | PASS | FAIL | — |
| th as child of tr with display: contents, within table with role=table with display: flex, has columnheader role | PASS | PASS | PASS | PASS | FAIL | — |
| td as child of tr with display: contents, within table with role=table with display: flex, has cell role | PASS | PASS | PASS | PASS | FAIL | — |
| tr with display: contents, within table with role=grid with display: flex, has row role | PASS | PASS | PASS | PASS | FAIL | — |
| th as child of tr with display: contents, within table with role=grid with display: flex, has columnheader role | PASS | PASS | PASS | PASS | FAIL | — |
| td (no explicit role) as child of tr with display: contents, within table with role=grid with display: flex, has gridcell role | PASS | PASS | PASS | PASS | FAIL | — |
| ul with display: contents, as child of div with display: grid, has list role | PASS | PASS | PASS | PASS | FAIL | — |
| listitem within ul with display: contents, as child of div with display: grid, has listitem role | PASS | PASS | PASS | PASS | FAIL | — |
| header with display: contents has banner role | PASS | PASS | PASS | PASS | FAIL | — |
| main with display: contents has main role | PASS | PASS | PASS | PASS | FAIL | — |
| footer with display: contents has contentinfo role | PASS | PASS | PASS | PASS | FAIL | — |
| search with display: contents has search role | PASS | PASS | PASS | PASS | FAIL | — |
| div with role banner and display: contents has banner role | PASS | PASS | PASS | PASS | PASS | — |
| div with role main and display: contents has main role | PASS | PASS | PASS | PASS | PASS | — |
| div with role contentinfo and display: contents has contentinfo role | PASS | PASS | PASS | PASS | PASS | — |
| ul with role list and display: contents (child li has display: contents) has list role | PASS | PASS | PASS | PASS | PASS | — |
| li as child of ul with role list, both with display: contents, has listitem role | PASS | PASS | PASS | PASS | FAIL | — |
| ul with role list and display: contents has list role | PASS | PASS | PASS | PASS | PASS | — |
| li, as child of ul with role list and display: contents, has listitem role | PASS | PASS | PASS | PASS | FAIL | — |
| li with display: contents, as child of ul with role list, has listitem role | PASS | PASS | PASS | PASS | FAIL | — |
| ol with role list and display: contents has list role (child li has display: contents) | PASS | PASS | PASS | PASS | PASS | — |
| li as child of ol with role list, both with display: contents, has listitem role | PASS | PASS | PASS | PASS | FAIL | — |
| ol with role list and display: contents has list role | PASS | PASS | PASS | PASS | PASS | — |
| li, as child of ol with role list and display: contents, has listitem role | PASS | PASS | PASS | PASS | FAIL | — |
| li with display: contents, as child of ol with role list, has listitem role | PASS | PASS | PASS | PASS | FAIL | — |
| div with list role and display: contents has list role | PASS | PASS | PASS | PASS | PASS | — |
| div with listitem role, as child of div with display: contents, has listitem role | PASS | PASS | PASS | PASS | PASS | — |
| div with list role and display: contents has list role (child div with listitem role has display: contents) | PASS | PASS | PASS | PASS | PASS | — |
| div with listitem role (as child of div with list role), both with display: contents, has listitem role | PASS | PASS | PASS | PASS | PASS | — |
| div with listitem role with display: contents, as child of div with list role, has listitem role | PASS | PASS | PASS | PASS | PASS | — |
| table with role table and display: contents has table role | PASS | PASS | PASS | PASS | PASS | — |
| tr in table with role table and display: contents has row role | PASS | PASS | PASS | PASS | FAIL | — |
| td within tr both with display: contents, in table with role table and display: contents, has columnheader role | PASS | PASS | PASS | PASS | FAIL | — |
| td within tr in table with role table, all with display: contents, has cell role | PASS | PASS | PASS | PASS | FAIL | — |
| div with role table with display: contents has table role | PASS | PASS | PASS | PASS | PASS | — |
| div with role rowgroup in div with role table, both with display: contents, has rowgroup role | PASS | PASS | PASS | PASS | PASS | — |
| div with role columnheader with display: contents, in div with role rowgroup within div with table role both with display: contents, has columnheader role | PASS | PASS | PASS | PASS | PASS | — |
| th within table with role grid, both with display: contents, has columnheader role | PASS | PASS | PASS | PASS | FAIL | — |
| td within table with role grid, both with display: contents, has gridcell role | PASS | PASS | PASS | PASS | FAIL | — |
| div with role grid with display: contents has grid role | PASS | PASS | PASS | PASS | PASS | — |
| div with role rowgroup in div with role grid, both with display: contents, has rowgroup role | PASS | PASS | PASS | PASS | PASS | — |
| div with role columnheader with display: contents, in div with role rowgroup within div with grid role both with display: contents, has rowgroup role | PASS | PASS | PASS | PASS | PASS | — |
| div with gridcell role and display: contents, within div with role row contained in a div with role grid both with display: contents, has gridcell role | PASS | PASS | PASS | PASS | PASS | — |
| table with role treegrid and display: contents has treegrid role | PASS | PASS | PASS | PASS | PASS | — |
| div with role treegrid and display: contents has treegrid role | PASS | PASS | PASS | PASS | PASS | — |
| ul with role tree and display: contents has tree role | PASS | PASS | PASS | PASS | PASS | — |
| li with role treeitem and display: contents, within ul with role tree and display: contents, has treeitem role | PASS | PASS | PASS | PASS | PASS | — |
| li with role treeitem and display: contents, within ul with role=group (within ul with role tree and display: contents), has treeitem role | PASS | PASS | PASS | PASS | PASS | — |
| Label: button with display: contents is labelled via referenced hidden span | PASS | PASS | PASS | PASS | FAIL | — |
| Label: link with display: contents is labelled via aria-labelledby | PASS | PASS | PASS | PASS | FAIL | — |
| Label: nav with display: contents is labelled via aria-labelledby | PASS | PASS | PASS | PASS | FAIL | — |
| Label: button with display: contents is labelled via aria-label | PASS | PASS | PASS | PASS | FAIL | — |
| Label: div with role group with display: contents is labelled via aria-label | PASS | PASS | PASS | PASS | FAIL | — |
| Label: button with display: contents is labelled via label for/id association | PASS | PASS | PASS | PASS | FAIL | — |
| Label: g element with display: contents, as child of svg, is labelled via title element | PASS | PASS | PASS | PASS | FAIL | — |
| Label: link with display: contents is labelled via name from contents | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: button with display: contents is labelled via name from contents | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: h3 with display: contents is labelled via name from contents | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: button with display: contents has button role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: button with explicit button role and display: contents has button role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: div with button role and display: contents has button role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: div with button role, tabindex=0 and display: contents has button role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: h3 with display: contents has heading role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: div with heading role, aria-level=3 and display: contents has heading role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: span with heading role, aria-level=1 and display: contents has heading role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: nav with display: contents and aria-label has navigation role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: aside with display: contents and aria-label has complementary role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: form with display: contents has form role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: section with aria-label and display: contents has region role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: div with role navigation, aria-label and display: contents has navigation role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: div with role complementary, aria-label and display: contents has complementary role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: div with role form, aria-label and display: contents has form role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: div with role search and display: contents has search role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: div with role region, aria-label and display: contents has region role | PASS | PASS | PASS | PASS | FAIL | — |
| Label: link with display: contents has link role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: link with explicit link role and display: contents has link role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: div with link role and display: contents has link role | PASS | PASS | PASS | FAIL | FAIL | — |
| Label: div with link role, tabindex=0 and display: contents has link role | PASS | PASS | PASS | FAIL | FAIL | — |
| Role: button with display: contents is labelled via referenced hidden span | PASS | PASS | PASS | PASS | FAIL | — |
| Role: link with display: contents is labelled via aria-labelledby | PASS | PASS | PASS | PASS | FAIL | — |
| Role: nav with display: contents is labelled via aria-labelledby | PASS | PASS | PASS | PASS | FAIL | — |
| Role: button with display: contents is labelled via aria-label | PASS | PASS | PASS | PASS | FAIL | — |
| Role: div with role group with display: contents is labelled via aria-label | PASS | PASS | PASS | PASS | PASS | — |
| Role: button with display: contents is labelled via label for/id association | PASS | PASS | PASS | PASS | FAIL | — |
| Role: g element with display: contents, as child of svg, is labelled via title element | PASS | PASS | PASS | PASS | FAIL | — |
| Role: link with display: contents is labelled via name from contents | PASS | PASS | PASS | PASS | FAIL | — |
| Role: button with display: contents is labelled via name from contents | PASS | PASS | PASS | PASS | FAIL | — |
| Role: h3 with display: contents is labelled via name from contents | PASS | PASS | PASS | PASS | FAIL | — |
| Role: button with display: contents has button role | PASS | PASS | PASS | PASS | FAIL | — |
| Role: button with explicit button role and display: contents has button role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with button role and display: contents has button role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with button role, tabindex=0 and display: contents has button role | PASS | PASS | PASS | PASS | PASS | — |
| Role: h3 with display: contents has heading role | PASS | PASS | PASS | PASS | FAIL | — |
| Role: div with heading role, aria-level=3 and display: contents has heading role | PASS | PASS | PASS | PASS | PASS | — |
| Role: span with heading role, aria-level=1 and display: contents has heading role | PASS | PASS | PASS | PASS | PASS | — |
| Role: nav with display: contents and aria-label has navigation role | PASS | PASS | PASS | PASS | FAIL | — |
| Role: aside with display: contents and aria-label has complementary role | PASS | PASS | PASS | PASS | FAIL | — |
| Role: form with display: contents has form role | PASS | PASS | PASS | PASS | FAIL | — |
| Role: section with aria-label and display: contents has region role | PASS | PASS | PASS | PASS | FAIL | — |
| Role: div with role navigation, aria-label and display: contents has navigation role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with role complementary, aria-label and display: contents has complementary role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with role form, aria-label and display: contents has form role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with role search and display: contents has search role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with role region, aria-label and display: contents has region role | PASS | PASS | PASS | PASS | PASS | — |
| Role: link with display: contents has link role | PASS | PASS | PASS | PASS | FAIL | — |
| Role: link with explicit link role and display: contents has link role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with link role and display: contents has link role | PASS | PASS | PASS | PASS | PASS | — |
| Role: div with link role, tabindex=0 and display: contents has link role | PASS | PASS | PASS | PASS | PASS | — |
| div with display: contents has generic role | PASS | PASS | PASS | PASS | FAIL | — |
| span with display: contents has generic role | PASS | PASS | PASS | PASS | FAIL | — |