A contract with optional terms
48 attributes · 94 rolesEvery ARIA state and property, and what any role actually requires of it.
The finding. ARIA 1.2 defines forty-eight states and properties. Six of them are ever required by any role, and eighty-three of the ninety-four roles require nothing at all. Fifteen attributes are global and two of those are deprecated. Where the specification did spend its deprecations, it was to narrow four attributes that had been allowed almost everywhere — aria-invalid, aria-haspopup and aria-errormessage on seventy-seven roles each. A role announces what a thing is; it almost never obliges you to say anything more about it.
Everything ARIA ever insists on
Six attributes, across eleven roles. This is the complete list of cases where the specification says a role must carry a state or property.
-
aria-checked4 checkbox · menuitemcheckbox · radio · switch -
aria-valuenow4 meter · scrollbar · separator · slider -
aria-controls2 combobox · scrollbar -
aria-expanded1 combobox -
aria-level1 heading -
aria-selected1 option
The eleven roles that require anything:
checkbox · combobox · heading · menuitemcheckbox · meter · option · radio · scrollbar · separator · slider · switch
Where 1.2 spent its deprecations
Not on removing attributes — only two are deprecated outright,
aria-dropeffect and aria-grabbed. The effort went into narrowing
four attributes that had been allowed almost everywhere:
-
aria-errormessage77/94 -
aria-haspopup77/94 -
aria-invalid77/94 -
aria-disabled56/94
Deprecated on that many roles apiece — a quiet retraction of scope rather than a removal.
| Attribute | Kind | Value | Required by | Reach |
|---|---|---|---|---|
aria-activedescendant | property | ID reference | — | application combobox composite group textbox |
aria-atomic | property | true/false | — | global |
aria-autocomplete | property | token | — | combobox textbox |
aria-busy | state | true/false | — | global |
aria-checked | state | tristate | 4 | checkbox menuitemcheckbox option radio switch |
aria-colcount | property | integer | — | table |
aria-colindex | property | — | — | — |
aria-colspan | property | integer | — | cell |
aria-controls | property | ID reference list | 2 | global |
aria-current | state | token | — | global |
aria-describedby | property | ID reference list | — | global |
aria-details | property | ID reference | — | global |
aria-disabled | state | true/false | — | application button composite gridcell group input link menuitem scrollbar separator tab |
aria-dropeffect deprecated | property | token list | — | global |
aria-errormessage | property | ID reference | — | application checkbox combobox gridcell listbox radiogroup slider spinbutton textbox tree |
aria-expanded | state | true/false/undefined | 1 | application button checkbox combobox gridcell link listbox menuitem row rowheader tab treeitem |
aria-flowto | property | ID reference list | — | global |
aria-grabbed deprecated | state | true/false/undefined | — | global |
aria-haspopup | property | token | — | application button combobox gridcell link menuitem slider tab textbox treeitem |
aria-hidden | state | true/false/undefined | — | global |
aria-invalid | state | token | — | application checkbox combobox gridcell listbox radiogroup slider spinbutton textbox tree |
aria-keyshortcuts | property | string | — | global |
aria-label | property | string | — | all but 11 roles |
aria-labelledby | property | ID reference list | — | all but 11 roles |
aria-level | property | integer | 1 | heading listitem row |
aria-live | property | token | — | global |
aria-modal | property | true/false | — | window |
aria-multiline | property | true/false | — | textbox |
aria-multiselectable | property | true/false | — | grid listbox tablist tree |
aria-orientation | property | token | — | scrollbar select separator slider tablist toolbar |
aria-owns | property | ID reference list | — | global |
aria-placeholder | property | string | — | textbox |
aria-posinset | property | integer | — | article listitem menuitem option radio row tab |
aria-pressed | state | tristate | — | button |
aria-readonly | property | true/false | — | checkbox combobox grid gridcell listbox radiogroup slider spinbutton textbox |
aria-relevant | property | token list | — | global |
aria-required | property | true/false | — | checkbox combobox gridcell listbox radiogroup spinbutton textbox tree |
aria-roledescription | property | string | — | global |
aria-rowcount | property | integer | — | table |
aria-rowindex | property | — | — | — |
aria-rowspan | property | integer | — | cell |
aria-selected | state | true/false/undefined | 1 | gridcell option row tab |
aria-setsize | property | integer | — | article listitem menuitem option radio row tab |
aria-sort | property | token | — | columnheader rowheader |
aria-valuemax | property | number | — | range scrollbar separator slider spinbutton |
aria-valuemin | property | number | — | range scrollbar separator slider spinbutton |
aria-valuenow | property | number | 4 | meter range scrollbar separator slider spinbutton |
aria-valuetext | property | string | — | range separator spinbutton |
Read from the 1.2 Recommendation. The building’s role taxonomy was built from a 1.3-era draft and lists 8 roles the Recommendation does not define (comment, image, mark, password, sectionfooter, sectionheader, suggestion, text); those are recorded and deliberately not joined against. “Global” is the specification’s literal phrase — aria-label and aria-labelledby are not global in 1.2, both carrying a list of excluded roles.
Source. WAI-ARIA 1.2 Recommendation · W3C Document Licence · retrieved 2026-08-14. This collection is derived · one specification, read both ways.
The documents. WAI-ARIA 1.2 Recommendation