consolelog.tools

ARIA Roles Reference

A working, searchable map of every WAI-ARIA role — what it does, the native HTML element that already gives you it for free, the states it requires, its keyboard pattern, and the parent/child roles it expects. Pick a role to see the full spec-accurate card, copy it as Markdown, and share the exact view. Built to push semantic HTML first: the first rule of ARIA is don’t use ARIA.

About this ToolHow it works, benefits & use cases

This ARIA Roles Reference is a working, searchable map of the WAI-ARIA roles developers actually reach for — across landmarks (banner, navigation, main, complementary, contentinfo, search, region, form), widgets (button, link, checkbox, radio, switch, slider, spinbutton, tab, tabpanel, menuitem, option, progressbar, tooltip), composite widgets that manage their own focus (tablist, listbox, combobox, menu, menubar, radiogroup, grid, tree), document-structure roles (heading, list, img, figure, article, table, separator, presentation), live regions (alert, status, log, timer, marquee), and window roles (dialog, alertdialog). Pick a role and the sticky detail card shows the native HTML element you should prefer instead, the states it requires versus the ones it merely supports, the parent and child roles it expects, the keyboard pattern users will assume, a copy-paste accessible example, and the WCAG criteria in play. Abstract roles are flagged so you never put them in markup, and the whole role can be copied as Markdown for a PR or doc. Search matches role names, descriptions, ARIA states, and HTML equivalents; the selected role lives in the URL so you can share an exact view.

How to Use

  1. 1Type a role name, ARIA state (like aria-checked), or HTML tag into the search box to filter the list — it matches names, descriptions, states, and native equivalents.
  2. 2Narrow with the category chips: Landmark, Widget, Composite widget, Document structure, Live region, or Window.
  3. 3Click any role in the list to load its full spec-accurate card in the sticky left column.
  4. 4Read the green “use this native element instead” callout first — if an element is listed, prefer it over the ARIA role.
  5. 5Check the required vs supported states, the required parent/child roles, and the keyboard pattern before hand-rolling the widget.
  6. 6Copy the role as Markdown (or the share link) to drop the reference into a PR, doc, or ticket.

Key Benefits

  • Roles grouped into the six ARIA categories, including composite widgets that manage focus
  • Surfaces the native HTML equivalent for every role so you can avoid ARIA when a real element exists
  • Separates required states from supported states, so you know the minimum to ship a valid role
  • Shows required parent and owned child roles (tab needs a tablist; listbox owns options)
  • Lists the expected keyboard interaction pattern per the ARIA Authoring Practices Guide
  • Flags abstract roles that must never appear in markup
  • Copy any role as full Markdown, and share the exact selected role via URL

Common Use Cases

  • Looking up the required states and keyboard pattern before building a custom tab, combobox, slider, or dialog
  • Confirming a native element exists (e.g. <button>, <nav>, <progress>) so you can drop a redundant role
  • Checking which parent a role needs — e.g. that an option must live inside a listbox
  • Pasting a spec-accurate role reference into a code review as Markdown
  • Teaching a team which landmark roles map to which semantic HTML5 elements
role="button"

Widget

A control that performs an action when activated.

Use this native element instead

<button><input type="button"><input type="submit">

Required states

accessible name

Supported states

aria-pressedaria-expandedaria-disabledaria-haspopup

Keyboard interaction

  • Enter — activate
  • Space — activate

Example

<button type="button" onclick="save()">Save</button>
Relevant WCAG4.1.2 Name, Role, Value

Common mistakes

  • role="button" on a <div> without tabindex="0" and key handlers
  • Icon-only button with no accessible name

Full role="button" reference — paste into docs or a PR

# role="button"

**Category:** Widget

A control that performs an action when activated.

## Native HTML equivalent
- `<button>`
- `<input type="button">`
- `<input type="submit">`

## Required states & properties
- accessible name

## Supported states & properties
- aria-pressed
- aria-expanded
- aria-disabled
- aria-haspopup

## Required context (parent roles)
- (none)

## Owned / allowed children
- (none)

## Keyboard interaction
- Enter — activate
- Space — activate

## Example
```html
<button type="button" onclick="save()">Save</button>
```

## Relevant WCAG
- 4.1.2 Name, Role, Value

## Common mistakes
- role="button" on a <div> without tabindex="0" and key handlers
- Icon-only button with no accessible name

First rule of ARIA: if a native HTML element or attribute gives you the role and behaviour you need, use it instead of an ARIA role. Native elements ship with keyboard support, focus, and states for free.

49 roles

A role is a promise to assistive tech

When you put role="tab" on an element you’re promising a screen reader it behaves like a tab — that it lives inside a tablist, exposes aria-selected, and moves with arrow keys. ARIA changes semantics, never behaviour: it won’t add keyboard handling, focus management, or state for you. This reference shows, for each role, exactly which states are required, which parent and child roles it expects, and the keyboard pattern users will assume.

The five rules of ARIA, in short

  • Prefer a native element over a role — a <button> beats role="button".
  • Don’t change native semantics (no role="tab" on an <h2>).
  • Every interactive ARIA control must be keyboard operable.
  • Don’t hide a focusable element with aria-hidden or role="presentation".
  • Every interactive element needs an accessible name.

Was this tool helpful?

Share Your Experience

Help others discover this tool!

Related tools