JS Wei (Jack) Sun

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 associationlist died 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-labelledby pattern 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 associationlist roles 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.

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

  1. Adrian Roselli — Updated Brief Note on Description List Support (Jan 2025)https://adrianroselli.com/2025/01/updated-brief-note-on-description-list-support.html

    Support 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.

    2 3
  2. Adrian Roselli on failed ARIA 1.3 roleshttps://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.

  3. WHATWG HTML issue #1937https://github.com/whatwg/html/issues/1937?timeline_page=1

    Alternatives proposed included

  4. , a new or tag…
    was ultimately selected because it is semantically neutral and already supported by browser parsers.

  5. Hacker News commenter on Ben Myers posthttps://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.

  6. Hacker News thread on dl semanticshttps://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.

  7. Scott O’Hara — Redundantly Redundanthttps://www.scottohara.me/blog/2021/10/04/redundantly-redundant.html

    First 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.

    2
Jack Sun

Jack Sun, writing.

Engineer · Bay Area

Hands-on with agentic AI all day — building frameworks, reading what industry ships, occasionally writing them down.

Digest
All · AI Tech · AI Research · AI News
Writing
Essays
Elsewhere
Subscribe
All · AI Tech · AI Research · AI News · Essays

© 2026 Wei (Jack) Sun · jacksunwei.me Built on Astro · hosted on Cloudflare