ARIA Roles Reference

All WAI-ARIA roles with required/allowed attributes and accessible name source.

A searchable WAI-ARIA role reference covering landmark, widget, document-structure and live-region roles, each with its required attributes or context and where its accessible name comes from.

What is the first rule of ARIA?

Do not use ARIA if a native HTML element or attribute already gives you the role, state and behaviour you need. A <button> is more robust and accessible than a <div role="button"> that you have to wire up with keyboard handlers and aria-pressed yourself.

This is a searchable reference for WAI-ARIA roles — the role tokens that describe what an element is to assistive technology. It groups them into landmark roles (page regions), document-structure roles (lists, tables, headings), widget roles (buttons, checkboxes, comboboxes, tabs) and live-region roles (alerts and status messages), and for each shows the attributes or context it requires and where its accessible name comes from.

How it works

A role is applied with the role attribute and tells the accessibility tree how to expose an element. Most native HTML elements already carry an implicit role<button> is button, <nav> is navigation — so you rarely need to set role explicitly. When you build a custom widget from generic elements, the role brings obligations: many roles require specific attributes (a checkbox needs aria-checked, a slider needs aria-valuenow/aria-valuemin/aria-valuemax, a heading needs aria-level) and composite roles require a child contract (a tablist must own tab children). The name-from column captures how the element’s accessible name is computed: some roles derive it from their text contents, while others require an explicit aria-label, aria-labelledby or associated <label>.

Tips and notes

Follow the first rule of ARIA: prefer the native element. ARIA changes only how an element is announced — it never adds keyboard behaviour, focus management or pointer handling, all of which you must implement yourself for custom widgets. role="presentation" (or its synonym none) strips an element’s implicit semantics, useful for layout tables. Keep landmark roles unique where the spec expects it (main, banner, contentinfo) and label repeated landmarks (multiple navigation regions) so users can tell them apart.

Example

<!-- Native is better than ARIA -->
<button type="button">Save</button>

<!-- A custom toggle done correctly -->
<span role="switch" tabindex="0" aria-checked="false" aria-label="Dark mode">
</span>

Everything runs in your browser; nothing you search is uploaded.