ARIA Role Reference
Web ToolsComplete reference for WAI-ARIA roles, states, and properties with usage examples, screen reader behavior, and accessibility guidance.. Free, private — all processing in your browser.
Continue
The server has received the request headers and the client should proceed to send the request body.
1xx InformationalSwitching Protocols
The server is switching to a different protocol as requested by the client (e.g., upgrading to WebSocket).
1xx InformationalEarly Hints
Used to return some response headers before the final HTTP message, allowing preloading of resources.
1xx InformationalOK
The request succeeded. The meaning depends on the HTTP method: GET returns the resource, POST returns the result of the action.
2xx SuccessCreated
The request succeeded and a new resource was created. Typically returned after POST requests.
2xx SuccessAccepted
The request has been accepted for processing, but the processing has not been completed yet.
2xx SuccessNo Content
The request succeeded but there is no content to return. Common for DELETE requests.
2xx SuccessPartial Content
The server is returning only part of the resource due to a Range header sent by the client.
2xx SuccessMoved Permanently
The resource has permanently moved to a new URL. Search engines will update their index. Passes link equity.
3xx RedirectionFound
The resource is temporarily at a different URL. The client should continue using the original URL.
3xx RedirectionNot Modified
The resource has not been modified since the last request. The client should use its cached version.
3xx RedirectionTemporary Redirect
Like 302, but guarantees the HTTP method won't change. POST stays POST.
3xx RedirectionPermanent Redirect
Like 301, but guarantees the HTTP method won't change. The permanent version of 307.
3xx RedirectionBad Request
The server cannot process the request due to malformed syntax, invalid parameters, or missing required fields.
4xx Client ErrorUnauthorized
Authentication is required. The client must provide valid credentials. Despite the name, this means 'unauthenticated'.
4xx Client ErrorForbidden
The server understood the request but refuses to authorize it. The client does not have permission.
4xx Client ErrorNot Found
The server cannot find the requested resource. The most well-known HTTP error.
4xx Client ErrorMethod Not Allowed
The HTTP method is not supported for this endpoint. The response includes an Allow header listing valid methods.
4xx Client ErrorRequest Timeout
The server timed out waiting for the request. The client may retry.
4xx Client ErrorConflict
The request conflicts with the current state of the server. Common for duplicate entries.
4xx Client ErrorGone
The resource is permanently gone and will not be available again. Unlike 404, this is intentional.
4xx Client ErrorPayload Too Large
The request body is larger than the server is willing to accept.
4xx Client ErrorUnsupported Media Type
The server does not support the media type of the request body (e.g., wrong Content-Type).
4xx Client ErrorUnprocessable Entity
The request is well-formed but contains semantic errors. Common for validation failures.
4xx Client ErrorToo Many Requests
Rate limiting — the client has sent too many requests in a given time period.
4xx Client ErrorInternal Server Error
A generic server error. Something went wrong on the server side.
5xx Server ErrorBad Gateway
The server, acting as a gateway, received an invalid response from an upstream server.
5xx Server ErrorService Unavailable
The server is temporarily unable to handle the request due to maintenance or overload.
5xx Server ErrorGateway Timeout
The server, acting as a gateway, didn't receive a timely response from the upstream server.
5xx Server ErrorThe ARIA Roles Reference is a comprehensive guide to WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) roles, states, and properties. ARIA attributes help screen readers and assistive technology understand web page structure and UI component behavior beyond what HTML alone conveys. Web developers building accessible applications use ARIA to label custom controls (not using native buttons), announce dynamic content changes, structure complex widgets (comboboxes, tabs, dialogs), and fix accessibility gaps in existing sites.
The reference groups ARIA by category: landmark roles (main, navigation, banner), document structure (article, heading, list), widget roles (button, checkbox, combobox, tab, dialog), window roles (alert, log, status), states (aria-expanded, aria-checked, aria-disabled), and properties (aria-label, aria-labelledby, aria-describedby, aria-live). Each entry shows usage examples, screen reader behavior, common mistakes, and links to WAI-ARIA Authoring Practices. Use for accessibility audits, adding ARIA to custom components, or understanding unfamiliar ARIA attributes in existing code.
ARIA Role Reference — key features
Complete ARIA catalog
All roles, states, and properties from WAI-ARIA 1.2 with explanations.
Categorized browsing
Landmark, widget, document structure, window, state, property categories.
HTML equivalent guidance
For each ARIA role, shows whether an HTML native element exists (and is preferred).
Screen reader behavior
Describes how major screen readers (NVDA, JAWS, VoiceOver) announce each ARIA element.
Usage examples
Code snippets showing correct ARIA usage in context.
Common mistakes
Pitfalls and anti-patterns to avoid for each role/attribute.
WCAG mapping
Which WCAG success criteria each ARIA attribute helps satisfy.
Offline reference
Loads once, works without additional network calls.
How to use the ARIA Role Reference
- 1
Search or browse
Search by role name or browse by category (landmark, widget, state, property).
- 2
Read description
Each ARIA entry has a description, use case, and key details.
- 3
Review examples
See code snippets showing correct usage in realistic contexts.
- 4
Check for HTML equivalent
Each role notes whether an HTML native element should be preferred.
- 5
Apply to your code
Copy example pattern and adapt to your specific component.
Common use cases for the ARIA Role Reference
Accessibility development
- →Building accessible components: Reference correct ARIA for custom comboboxes, dialogs, tabs, and other complex widgets.
- →Fixing accessibility issues: When an audit identifies missing ARIA, look up the exact attributes needed.
- →Screen reader testing: Understand what each ARIA attribute makes screen readers announce, so you can design for that audience.
Code review
- →Verify ARIA correctness: Check ARIA in PR changes against standards to catch misuse.
- →Anti-pattern detection: Identify role=\"button\" on divs, aria-hidden on focusable elements, and other common mistakes.
- →Accessibility pairing: Have an accessibility expert review ARIA usage against this reference during code review.
Learning
- →Onboarding accessible development: New developers learning ARIA can use this as a self-paced reference.
- →Accessibility training: Resource for teams building a11y-first products.
- →Exam prep: Reference for IAAP (International Association of Accessibility Professionals) certifications.
ARIA Role Reference — examples
Labeled button
Accessible name for custom button.
<div role=\"button\" tabindex=\"0\" aria-label=\"Close dialog\">X</div>
Screen reader announces: \"Close dialog, button\" (better: use <button aria-label=\"Close dialog\">X</button>)
Expanded state
Dropdown or accordion.
<button aria-expanded=\"false\" aria-controls=\"menu1\">Menu</button>
announces \"Menu, button, collapsed\" when expanded, aria-expanded flips to true
Live region
Announcing dynamic updates.
<div aria-live=\"polite\">3 items in cart</div>
when text changes, screen reader announces new content at next break in speech
Landmark
Page structure.
<nav aria-label=\"Main navigation\">...</nav>
screen reader users can navigate directly to this landmark announced as \"Main navigation, navigation landmark\"
Hidden decoration
Icon with adjacent text.
<span aria-hidden=\"true\">✓</span> Done
screen reader reads \"Done\" without the icon icon is purely visual decoration
Technical details
WAI-ARIA is a W3C standard (current 1.2) defining ways to make web content accessible to users with disabilities, particularly those using screen readers. It supplements HTML with additional semantic information.
Core ARIA concepts:
Role: what the element is (button, heading, listbox)
State: current state (expanded, checked, disabled) — changes during interaction
Property: feature that doesn\u2019t change (label, level, description)
Landmark roles: structural sections of a page
- banner: site header
- navigation: nav menu
- main: main content
- complementary: sidebar
- contentinfo: footer
- search: search area
- region: generic landmark with aria-label
HTML5 equivalents often preferred: <header>, <nav>, <main>, <aside>, <footer>, <form role=\"search\">.
Widget roles: interactive components
- button: clickable action
- checkbox: toggle
- combobox: dropdown with text entry
- dialog: modal dialog
- listbox: select list
- menu/menuitem: application menus
- progressbar: progress indicator
- slider: range input
- tab/tablist/tabpanel: tabbed interface
- tooltip: hover/focus help
Document structure: article, heading, list, table, definition, group, region.
Window-like roles: alert (urgent message), alertdialog (alert + dialog), log (continuous updates), status (status updates), timer.
States (change during interaction):
- aria-busy: currently loading
- aria-checked: checkbox/radio state (true, false, mixed)
- aria-disabled: disabled (alternative to native disabled attribute)
- aria-expanded: collapsible state (true, false)
- aria-hidden: hidden from assistive tech
- aria-pressed: toggle button state
- aria-selected: selected in a set (true, false)
Properties (static):
- aria-label: accessible name when visible text isn\u2019t enough
- aria-labelledby: reference to labelling element(s) by ID
- aria-describedby: reference to description element
- aria-current: current page/step/etc.
- aria-level: heading level for generic role
- aria-live: announces dynamic changes (off, polite, assertive)
- aria-atomic: announce entire live region or just changes
- aria-haspopup: indicates popup (menu, listbox, dialog, etc.)
- aria-controls: what element is controlled
First rule of ARIA: use HTML native semantics when possible. <button>Submit</button> is better than <div role=\"button\" tabindex=\"0\">Submit</div>.
Second rule of ARIA: don\u2019t change HTML semantics unless necessary. Don\u2019t add role=\"button\" to a heading.
Third rule of ARIA: all interactive ARIA controls must be keyboard accessible.
Fourth rule of ARIA: don\u2019t use role=\"presentation\" or aria-hidden=\"true\" on visible focusable elements — it hides from assistive tech but remains interactive.
Fifth rule: all interactive elements must have an accessible name (from visible text, aria-label, aria-labelledby, or title attribute).
Common problems and solutions
⚠Using ARIA when HTML suffices
<div role=\"button\" tabindex=\"0\"> needs keyboard handling, focus styling, and ARIA. <button> gets all of that natively. Use HTML elements first; add ARIA only when no native equivalent exists.
⚠role=presentation on focusable elements
role=\"presentation\" (or role=\"none\") removes semantics. If the element is still focusable or interactive, screen readers get confused. Only use on purely decorative elements.
⚠aria-hidden on focusable elements
aria-hidden=\"true\" hides from assistive tech but element remains interactive via keyboard. Users can tab to it but the screen reader says nothing. Always remove tabindex or disable interaction when using aria-hidden.
⚠Missing accessible name
Interactive elements must have a name. <button> with just an icon needs aria-label or visible text. <a href> with just an image needs alt text or aria-label.
⚠Misusing aria-live
aria-live=\"assertive\" interrupts whatever the user is doing. Reserve for truly urgent messages (errors). Use \"polite\" for most dynamic updates.
⚠Redundant ARIA
<h1 role=\"heading\"> is redundant — heading is already the role of h1. Adding ARIA to elements with matching native semantics is at best redundant, at worst breaking the native semantics.
⚠Broken references
aria-labelledby, aria-describedby, aria-controls reference elements by ID. If the referenced ID doesn’t exist, the reference is broken silently. Validate references during development.
ARIA Role Reference — comparisons and alternatives
Compared to the official WAI-ARIA specification, this reference is more readable and includes practical examples. The spec is authoritative and more complete; this reference is a friendly entry point.
Compared to WAI-ARIA Authoring Practices Guide, this tool provides quick-reference lookups while APG offers detailed pattern implementations. Use APG for building complex widgets; use this tool for quick lookups.
Compared to accessibility testing tools (axe, WAVE), this tool is for learning and reference. Testing tools find issues; this tool helps you understand how to fix them.
Frequently asked questions about the ARIA Role Reference
▶What is ARIA?
WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) is a set of HTML attributes for improving accessibility of web content, especially for users relying on screen readers and assistive technology. It supplements HTML where HTML alone doesn’t provide enough semantic information.
▶When should I use ARIA?
Only when native HTML doesn’t provide the needed semantics. Use <button> not <div role=\"button\">. Add ARIA for: custom UI components (dropdown, dialog, tab), dynamic updates (aria-live), states not expressible in HTML (aria-expanded), labeling complex relationships (aria-labelledby).
▶What is the first rule of ARIA?
Don’t use ARIA if HTML alone gives you the semantics you need. <button>Click me</button> is better than <div role=\"button\" tabindex=\"0\">Click me</div>. HTML native elements come with correct semantics, keyboard handling, focus behavior, and screen reader support automatically.
▶What is aria-label used for?
To provide an accessible name when visible text isn’t sufficient or doesn’t exist. Example: a close button showing only an \"X\" icon. Add aria-label=\"Close dialog\" so screen readers announce the action clearly.
▶What is the difference between aria-labelledby and aria-describedby?
aria-labelledby provides the NAME of an element by referencing other element IDs containing label text. aria-describedby provides additional DESCRIPTION by referencing other element IDs. Name vs description: name is concise; description is longer context.
▶What is aria-live?
Marks a region whose content updates dynamically. Screen readers announce changes without the user needing to manually navigate there. Values: polite (announce at next break), assertive (interrupt immediately — use sparingly), off (don’t announce).
▶What is a landmark?
A section of a page with structural meaning: navigation, main, banner (header), contentinfo (footer), complementary (sidebar). Screen reader users can navigate between landmarks directly, skipping past repetitive content.
▶Is ARIA validated by browsers?
Browsers don’t validate ARIA — invalid ARIA can silently break accessibility without any visible error. Use accessibility testing tools (axe-core, WAVE) to catch issues automatically. This reference helps you understand correct usage.
Additional resources
- WAI-ARIA 1.2 specification — Authoritative W3C specification for ARIA roles, states, and properties.
- ARIA Authoring Practices — W3C guide to implementing common ARIA patterns with examples.
- MDN ARIA reference — MDN’s comprehensive ARIA guide.
- axe DevTools — Browser extension for automated accessibility testing.
- WebAIM accessibility — Leading web accessibility organization with extensive tutorials.
Related tools
All Web ToolsCharacter Map
Browse and copy any Unicode character including emoji, symbols, arrows, mathematical signs, and non-Latin scripts.
Color Blindness Simulator
Simulate how colors and images appear to users with protanopia, deuteranopia, tritanopia, achromatopsia, and other color vision deficiencies.
Color Contrast Checker
Check color contrast ratios between foreground and background for WCAG 2.1 AA and AAA compliance with live preview.
Heading Structure Checker
Analyze H1-H6 heading structure on any page — detect missing headings, multiple H1s, broken hierarchy, and accessibility problems.
HTML Entity Encoder/Decoder
Encode special characters to HTML entities (&, <, ", ©) or decode entities back to their literal characters.
HTML Formatter
Format, indent, and beautify HTML, XHTML, and HTML5 markup
Learn more
Explore more tools
200+ free tools that run in your browser.
Browse all tools →