ARIA Attributes Reference

Every aria-* attribute with value type, allowed roles and state vs property flag

Searchable reference for all WAI-ARIA 1.2 state and property attributes — with value type, default, global flag, and whether each is a dynamic state or a static property. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

What is the difference between an ARIA state and a property?

A state is expected to change as the user interacts — aria-checked, aria-expanded, aria-pressed flip values in response to clicks. A property is generally set once and rarely changes, such as aria-label or aria-haspopup. Both are written the same way; the distinction is about lifecycle, and assistive technology may treat dynamic state changes as live updates.

WAI-ARIA splits its aria-* attributes into two groups: states, which change as the user interacts, and properties, which are usually set once. Both carry a defined value type, and some are global — valid on any element. This is a searchable offline reference for every standard attribute from WAI-ARIA 1.2.

How it works

Each attribute is listed with four facts that decide whether your markup is valid:

  • Value typetrue/false, a tristate (true/false/mixed), an enumerated token, an integer or number, an id reference / id reference list, or a free string. Out-of-range values are ignored by assistive technology.
  • State vs property — states (aria-checked, aria-expanded) are expected to change during use; properties (aria-label, aria-haspopup) generally do not.
  • Global — global attributes apply to every element regardless of role (aria-label, aria-hidden, aria-live); non-global ones are only valid on roles that support them.
  • Default — the implicit value when the attribute is absent or empty.

Value types explained

Getting the value type right prevents attributes from being silently ignored by screen readers:

TypeExample attributesAllowed values
true/falsearia-disabled, aria-readonlyThe strings "true" or "false" only
tristatearia-checked, aria-pressed"true", "false", or "mixed"
tokenaria-live, aria-haspopup, aria-orientationA fixed enumerated list per attribute
integeraria-level, aria-rowspan, aria-colindexA whole number within a defined range
numberaria-valuenow, aria-valuemin, aria-valuemaxAny numeric value
ID referencearia-activedescendant, aria-errormessageA single element ID
ID reference listaria-labelledby, aria-describedby, aria-controlsSpace-separated element IDs
stringaria-label, aria-placeholder, aria-roledescriptionAny text

Detailed examples

aria-checked (tristate state): on a role="checkbox" it must be present and set to true, false, or mixed. The mixed value is for checkboxes that control a group where some but not all children are checked. By contrast, aria-pressed on a role="button" also takes tristate — use mixed only if the button has genuinely indeterminate state, such as a formatting button that applies to text with mixed bold/non-bold spans.

aria-labelledby vs aria-label: aria-labelledby points to existing visible text by ID and is preferred because it reuses content already on the page. aria-label provides an invisible label string and is the fallback when no visible text can serve as the name. Both are global properties, so they work on any element regardless of role.

aria-live (token property): takes one of three tokens — off (default, no announcements), polite (announces after user finishes current interaction), or assertive (interrupts immediately). Overuse of assertive creates a noisy, frustrating experience for screen-reader users.

Common mistakes

  • Using aria-hidden="true" on a focusable element — keyboard users can still reach it, but screen readers will not announce it, causing a confusing mismatch.
  • Writing aria-disabled without also preventing the action — the attribute tells AT the element is disabled but does not prevent clicks or keyboard events the way the HTML disabled attribute does.
  • Setting aria-expanded without toggling it — the attribute is a state and must be updated in JavaScript each time the panel opens or closes.
  • Applying non-global attributes to roles that don’t support them — aria-checked on a role="link" is meaningless and ignored.

Notes

  • Boolean ARIA attributes take the strings "true"/"false", not the presence/absence pattern of HTML boolean attributes like disabled.
  • aria-hidden="true" removes an element and its subtree from the accessibility tree — never put it on a focusable element.
  • This reference lists the standard attributes; per-role required and supported sets are covered in the ARIA Role Reference.