ARIA 1.3's definition-list roles die in draft, leaving `<dl>` where it started
ARIA 1.3's associationlist roles died in draft, and the workarounds developers reach for instead still trip screen readers.
ARIA 1.3’s definition-list roles die in draft, leaving <dl> where it started
TL;DR
- ARIA 1.3’s
associationlistdied in draft and actively breaks screen readers if shipped. - Native
<dl>support rates only a ‘Sure’ from Roselli, missing item counts and hotkeys. - WHATWG’s
<div>-in-<dl>paved a cowpath after a decade of rejecting<di>proposals. - Willison’s
aria-labelledbypattern trips ARIA’s first rule, double-reading heading text.
Today’s tech read is a single worked example of how web accessibility standards actually fail: not in dramatic deprecations but in the quiet gap between what a spec drafts, what browsers ship, and what screen readers do with the result. Adrian Roselli’s audit of the definition list (<dl>) walks through that gap end-to-end — the ARIA 1.3 associationlist roles that were supposed to fix it died in draft, the WHATWG <div>-inside-<dl> allowance is a cowpath paved after ten years of rejecting cleaner proposals, and the aria-labelledby workaround in Simon Willison’s own example trips the First Rule of ARIA. The takeaway isn’t that any one of these is broken — it’s that after a decade of motion, a heading plus a paragraph is still the most reliably accessible way to render a term and its definition.
The element’s ARIA 1.3 roles died in draft
Source: simon-willison · published 2026-05-23
TL;DR
- ARIA 1.3’s
associationlistroles died in draft and can actively break screen readers if shipped. - Adrian Roselli rates native
<dl>support a “Sure,” not a “Yup” — no reliable item counts or list-navigation hotkeys. - The
<div>-inside-<dl>allowance was WHATWG paving a cowpath after a decade of rejecting<di>and<dli>proposals. - Willison’s
aria-labelledby="credits"example trips the First Rule of ARIA — screen readers read the heading text twice.
The link blog version vs. the practitioner version
Simon Willison’s link post on Ben Myers’ “On the <dl>” is a tidy enumeration: multiple <dd> per <dt> is legal, <div> wrappers are allowed for styling, aria-labelledby ties the list to a heading, and the element has been a “description list” since the 2008 HTML5 draft. All true. All also a much rosier picture than the sources Willison links to actually paint.
Adrian Roselli’s January 2025 update — the one Willison cites as “a useful note” — is the tell. Native <dl>/<dt>/<dd> support across NVDA, JAWS and VoiceOver is “generally good,” but Roselli explicitly grades it a “Sure” rather than a “Yup,” with no consistent item counts and no list-navigation commands across platforms 1. VoiceOver is bad enough that he filed a fresh macOS bug (#286267) in the same post 1.
ARIA tried to fix it and failed
The fix was supposed to come from ARIA 1.3: three new roles — associationlist, associationlistitemkey, associationlistitemvalue — designed to give description lists the same semantic clarity tables get. They never made it out of draft. Roselli’s blunt warning: support is all over the map, and using them in production “can actively break the accessible experience” 2. So the modern advice for a 2026 <dl> is the same as the 2016 advice: use native elements, accept the inconsistent screen reader behavior, don’t reach for ARIA.
The <div> wrapper is a grudging compromise
WHATWG issue #1937 makes the backstory explicit. Before settling on <div>, the working group considered <li>, a new <di>, and <dli> — all rejected over the years on the grounds that grouping was a CSS problem, not a semantic one. <div> won purely because it was semantically neutral and already parsed correctly 3. That’s not a clean design choice; that’s a cowpath being paved after a decade of developer frustration.
The Hacker News thread on Myers’ post is sharper still. One commenter:
If 99% of usage routes around your API by using div soup, the fault lies with the API design rather than the developers. 4
Others poke at the mental model itself — in “Author: Tolkien,” does Tolkien actually define Author? The term/description framing fits dictionaries and not much else 5.
The aria-labelledby flourish is the wrong example
Willison reproduces Myers’ snippet approvingly:
<h2 id="credits">Credits</h2>
<dl aria-labelledby="credits">
Scott O’Hara’s “Redundantly Redundant” is the standard rebuttal: the First Rule of ARIA is to use the native solution if one exists, and labelling a list with the id of the heading immediately preceding it causes screen readers to announce “Credits” twice 6. Support for accessible names on static <dl> is also inconsistent unless a landmark role is added 16.
The takeaway isn’t “don’t use <dl>.” It’s that the element’s quiet rehabilitation comes with rougher edges than a four-bullet link post can carry — and the accessibility flourish at the top of Myers’ example is the part you should drop first.
Footnotes
-
Adrian Roselli — Updated Brief Note on Description List Support (Jan 2025) — https://adrianroselli.com/2025/01/updated-brief-note-on-description-list-support.html
↩ ↩2 ↩3Support is generally good… but it lands on a ‘Sure’ rather than a ‘Yup’. Don’t expect consistent list item counts or specialized list navigation commands across all platforms.
-
Adrian Roselli on failed ARIA 1.3 roles — https://adrianroselli.com/2025/01/updated-brief-note-on-description-list-support.html
↩The proposed ARIA 1.3 roles — associationlist, associationlistitemkey, and associationlistitemvalue — failed to move out of the draft stage; support is all over the map and using them in production can actively break the accessible experience.
-
WHATWG HTML issue #1937 — https://github.com/whatwg/html/issues/1937?timeline_page=1
↩Alternatives proposed included
- , a new
or tag… was ultimately selected because it is semantically neutral and already supported by browser parsers. - , a new
-
Hacker News commenter on Ben Myers post — https://news.ycombinator.com/item?id=48249010
↩If 99% of usage routes around your API by using div soup, the fault lies with the API design rather than the developers.
-
Hacker News thread on dl semantics — https://news.ycombinator.com/item?id=44297215
↩In a simple ‘Author: Tolkien’ pair, does ‘Tolkien’ truly ‘define’ the ‘term’ ‘Author’? The labels Description List, Term, and Details often fail to fit common data models.
-
Scott O’Hara — Redundantly Redundant — https://www.scottohara.me/blog/2021/10/04/redundantly-redundant.html
↩ ↩2First Rule of ARIA: if a native HTML solution exists, use it instead of ARIA. Labeling a list with the same text as a preceding heading causes the name to be read twice.