GeezerVison is showing w3c.github.io — ARIA in HTML
This specification defines the authoring rules (author conformance requirements) for the use
of [[[wai-aria-1.2]]] and [[[dpub-aria-1.1]]] attributes on [[HTML]] elements.
This specification's primary objective is to define requirements for use
with conformance checking tools used by authors (i.e., web developers). These requirements will aid authors
in their development of web content, including custom interfaces and widgets, which make use of ARIA to
complement or extend the features of the host language [[HTML]].
ARIA in HTML is an [[HTML]] specification module. Any HTML features, conformance requirements, or terms that this specification
module makes reference to, but does not explicitly define, are defined by the [[HTML|HTML Standard]].
Author requirements for use of ARIA in HTML
Authors MAY use the ARIA `role` and `aria-*` attributes to change
the exposed meaning (semantics) of
[=HTML elements=], in accordance with the requirements defined by
[[wai-aria-1.2|WAI-ARIA]], except where ARIA features conflict with the
strong native semantics
or are equal to the
implicit ARIA semantics
of a given HTML element. The implicit ARIA semantics for the features
of HTML are defined by the [[html-aam-1.0|HTML Accessibility API Mappings]] specification.
Any constraints for the use of ARIA features in HTML defined by this specification
are intended to prevent authors from making assistive technology products report
nonsensical user interface (UI) information that does not represent the actual UI
of the document.
Authors MUST NOT use the ARIA `role` and `aria-*` attributes in a manner that conflicts
with the semantics described in the [[[#docconformance]]] and [[[#docconformance-attr]]]
tables. It is NOT RECOMMENDED for authors to set the ARIA `role` and `aria-*` attributes
to values that match the implicit ARIA semantics defined in either table.
Doing so is unnecessary and can potentially lead to unintended consequences.
ARIA semantics that extend and diverge from HTML
Through the use of ARIA, authors can specify semantics that go beyond the current
capabilities of native HTML. This can be very useful, as it provides authors the opportunity
to create widgets, or expose specific accessible states and properties to native HTML features
which would not be possible by the use of HTML alone.
For instance, a `button` element has no native HTML feature to expose a "pressed" state.
ARIA allows authors to extend the semantics of the element by specifying the `aria-pressed`
attribute, allowing for an aural UI that will match the visual presentation of the control.
In the following example, a `button` element allows for a user to toggle the state of a
setting within a web application. The `aria-pressed` attribute is used to
augment the `button` element. When in the "pressed" state that information can be
exposed to users of assistive technologies.
<button aria-pressed=true>...</button>
There are also situations where certain `aria-*` attributes are allowed for use on elements
with specific `role`s, while the equivalent native attribute is currently not valid in HTML itself.
For instance, HTML has no direct concept of a disabled hyperlink (`a href` element).
Constructs such as `<a href="..." disabled> ... </a>` are not valid,
and will not be conveyed to assistive technologies.
ARIA diverges from HTML in this regard and does allow for an `aria-disabled`
attribute to be specified on an element with an explicit `role=link`. If an author were
to specify an `aria-disabled=true` on an HTML hyperlink, user agents would not functionally
treat the hyperlink any differently (it would still be clickable/operable), however it
would be exposed to assistive technologies as being in the disabled state.
Similarly, while native HTML `option` elements that are descendants of a `select` can
only be set as being `selected`, elements with an explicit `option` role can not only
allow the equivalent `aria-selected`, but also the `aria-checked` attribute, supporting
widgets/constructs that go beyond the capabilities of a native `select` element.
Unfortunately, in these situations where ARIA and HTML have feature parity, but diverge
in allowances, it can create for a misalignment in support, if not also user experiences.
In situations where ARIA allows a feature not supported by HTML, it will often
be in the author's and ultimately the user's best interest to instead implement as a
fully custom ARIA widget.
In the following example, a hyperlink needs to be communicated as being in the disabled
state. HTML does not allow for the use of the `disabled` attribute on a hyperlink,
and using `aria-disabled=true` would communicate the hyperlink as being disabled to
assistive technologies, but would not actually disable the element. The most effective way
to both communicate and actually disable a hyperlink would be to remove the `href` from
the [^a^] element, creating a placeholder. Then, ARIA can be applied to this
placeholder link to communicate the element's intended role and state.
<a role=link aria-disabled=true>...</a>
Author guidance to avoid incorrect use of ARIA
Avoid overriding interactive elements with non-interactive roles
ARIA is useful for revising or correcting the role of an element when a different role
is necessary to expose to users. However, it is rarely in the user or author's best interest
to try and use ARIA to override an interactive element, for instance a `button`, with a role
generally exposed by a non-interactive element. For instance, a heading.
As an example, the following uses a `role=heading` on a [^button^] element. This is
not allowed, because the `button` element has default functionality that conflicts with user
expectations for the heading role.
<button role="heading">search</button>
An author would need to take additional steps to ensure the default functionality and presentation of
the `button` was removed, and even doing so may still not be enough to fully suppress the element's
implicit features depending on how the user chooses to engage with the web page. E.g., by turning on
Windows high contrast themes, or viewing the web page in a browser's reader mode.
Avoid specifying redundant roles
The following example illustrates a [^button^] element which has also been
provided an explicit `role=button`. Specifying this role is unnecessary, as a "button"
element is already exposed with an implicit `button` role. In practice this particular
instance of redundancy will likely not have unforeseen side effects, other than
unnecessarily making the markup more verbose, and incorrectly signaling to other authors
that this practice is useful. Please review the section [[[#side-effects]]]
for an example of where specifying unnecessary roles can be problematic.
Similarly, the following uses a `role=group` on a [^fieldset^] element, and a `role=main` on a [^main^] element.
This is unnecessary, because the `fieldset` element is implicitly exposed as a `role=group`, as is the `main` element
implicitly exposed as a `role=main`.
The following uses a `role=list` on an [^ul^] element. As the `ul` element has an implicit role of `list`,
explicitly adding the role would generally be considered redundant. However, some user agents suppress a list's
implicit ARIA semantics if the list markers are removed from the visual presentation of the list items.
Generally the redundant declaration of an element's implicit role would not be recommended, but in specific situations
such as this, and where the role is necessary to expose, authors can explicitly add the role.
<!-- Generally avoid doing this! -->
<ul role="list">...</ul>
Be cautious of side effects
The following uses a `role=button` on a [^summary^] element. This is
unnecessary and can result in cross-platform issues. For instance,
preventing the element from correctly exposing its state, and forcing
the role of `button`, when it might otherwise be exposed with a
platform or browser specific role.
[[[wai-aria-1.2]]] defines a number of roles which are not meant to be used
by authors. Many of these roles are categorized as Abstract Roles
which are explicitly stated as not to be used by authors. The following example illustrates the invalid use of an
abstract `select` role, where an author likely meant to use the `combobox` role instead.
<!-- Do not do this! -->
<div role="select" ...>...</div>
ARIA also defines a `generic` role which is meant to provide
feature parity with a number of HTML elements that do not have more specific ARIA semantics of their
own. For instance, HTML's [^div^] and [^span^] elements, among others. ARIA discourages authors from
using the `generic` role as its intended purpose is for use by implementors of user agents.
In the following example, rather than using a `generic` role, authors are advised to use a `div` in
place of the `article` element. If changing the HTML element is not possible, specifying a role of
`presentation` or `none` would be acceptable alternatives to remove the implicit role of the `article`.
Additionally, ARIA specifically mentions in Conflicts with Host Language Semantics
that if authors use both native HTML features for exposing states and properties as well as their ARIA counterparts, then
the host language features take priority over the explicit ARIA attributes that are also used.
For instance, in the following example an author is using HTML's `input type=checkbox` and has specified an `aria-checked=true`. However,
user agents are meant to ignore the `aria-checked` attribute. Instead user agents would expose the state based on the native features
of the form control.
<!-- Do not do this! -->
<input type="checkbox" checked aria-checked="false">
Adhere to the rules of HTML
While ARIA can be used to alter the way HTML features are exposed to users of assistive technologies,
these modifications do not change the underlying parsing and allowed content models of HTML. For instance,
a [^div^] allows an author to specify any role on it. However, this does not mean that the element can then be
used in a way that deviates from the rules HTML has defined for the element.
For instance, in the following example an author has specified a role of `link` on a `div` element. While
HTML allows for a hyperlink (exposed as a `role=link`) to be a descendant of a `p` element, the HTML parser does not
allow a `div` to be a descendant of a `p` element.
<!-- Do not do this! -->
<p>
... <div role=link tabindex=0>...</div> ...
</p>
The HTML parser will modify the above markup to be output as the following:
<!-- The previous example's markup will render as follows -->
<p>...</p>
<div role=link tabindex=0>...</div>
...
<p></p>
<!-- Instead of a div, use a span. Spans are allowed descendants of p elements! -->
<p>
... <span role=link tabindex=0>...</span> ...
</p>
While this specification indicates the allowed ARIA attributes that can be specified on each HTML element,
this example illustrates that even if a role is allowed, the context in which it is used can still result
in potential rendering and accessibility issues.
Document conformance requirements for use of ARIA attributes in HTML
The following table provides normative per-element document conformance requirements for the
use of ARIA markup in HTML documents. Additionally, it identifies the implicit ARIA semantics
that apply to [=HTML elements=]. The implicit ARIA semantics of these elements are defined
in [[html-aam-1.0|HTML AAM]].
Each language feature (element) in a cell in the first column implies the ARIA semantics
(role, states, and properties) given in the cell in the second column of the same row.
The third cell in each row defines the ARIA `role` values and `aria-*` attributes which authors MAY specify
on the element. Where a cell in the third column includes the term Any `role`
it indicates that any `role` value MAY be used on the element. However,
it is NOT RECOMMENDED for authors to specify the implicit role of the element, the `generic` role, or a role
deprecated by ARIA on these elements.
If a cell in the third column includes the term No `role` it indicates
that authors MUST NOT overwrite the implicit ARIA semantics, or native semantics of the HTML element.
[[wai-aria-1.2|WAI-ARIA]] identifies roles which have
prohibited states and properties.
These roles do not allow certain WAI-ARIA attributes to be specified by authors.
HTML elements which expose these implicit WAI-ARIA roles also prohibit authors from
specifying these WAI-ARIA attributes.
Elements which are identified as Naming prohibited are those which authors MUST NOT specify an
`aria-label` or `aria-labelledby` attribute, unless the element allows for its implicit role to be overwritten
by an explicit WAI-ARIA role which allows naming from authors. For more information see [[[#docconformance-naming]]].
While setting an ARIA `role` and/or `aria-*` attribute that matches the implicit ARIA semantics
is NOT RECOMMENDED, in some situations explicitly setting these attributes can be helpful – for instance,
for user agents that do not expose implicit ARIA semantics for certain elements.
While it is conforming to use [[[dpub-aria-1.1]]] `role` values as outlined in the following table, the use of these roles
is not intended for implementation of websites. If using these role for purposes beyond the scope of the digital publishing
industry, further manual testing will be necessary to ensure the intended experience is provided to users.
Rules of ARIA attribute usage by HTML element
HTML element
Implicit ARIA semantics
(explicitly assigning these in markup is NOT RECOMMENDED)
No `role` other than generic, which SHOULD NOT be used.
Naming Prohibited
Otherwise, global `aria-*` attributes
allowed for the `generic` role, with the exception that authors MUST NOT specify `aria-hidden=true` on the `body` element.
If the `figure` has a valid `figcaption` descendant:
No `role` other than figure,
which is NOT RECOMMENDED.
DPub Role:
`doc-example`.
Otherwise, if the `figure` has no `figcaption` descendant:
Any `role`, though figure is NOT RECOMMENDED.
Global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
[^footer^]
If not a descendant of an `article`, `aside`, `main`, `nav`
or `section` element, or an element with `role=article`, `complementary`,
`main`, `navigation` or `region`
then role=contentinfo
Roles:
`group`,
`presentation`
or `none`.
(If not a descendant of an `article`, `aside`, `main`, `nav`
or `section` element, or an element with `role=article`, `complementary`,
`main`, `navigation` or `region`,
then role=contentinfo
is also allowed, but NOT RECOMMENDED.
Otherwise, role=generic
is also allowed, but SHOULD NOT be used.)
DPub Role:
`doc-footnote`
Naming Prohibited if exposed as `generic`.
Otherwise, global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
Global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
[^head^]
No corresponding role
No `role` or `aria-*` attributes
[^header^]
If not a descendant of an `article`, `aside`, `main`,
`nav` or `section` element, or an element with `role=article`,
`complementary`, `main`, `navigation` or `region` then
role=banner
Roles:
`group`,
`none`
or `presentation`.
(If not a descendant of an `article`, `aside`, `main`, `nav`
or `section` element, or an element with `role=article`, `complementary`,
`main`, `navigation` or `region`,
then role=banner
is also allowed, but NOT RECOMMENDED.
Otherwise, role=generic
is also allowed, but SHOULD NOT be used.)
Naming Prohibited if exposed as `generic`.
Otherwise, global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
Global `aria-*` attributes and
any `aria-*` attributes applicable to the allowed roles.
[^img^]
If the `img` has non-empty [^img/alt^] (`alt="some text"`) or an accessible name is provided by another
`img` naming method,
or the `img` has no `alt` and no accessible name: role=img or image
Global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
If the `img` has no `alt` attribute or no accessible name:
No `role` other than the
role=none or presentation roles.
(role=img or image is also allowed, but NOT RECOMMENDED.)
[^img^] with empty `alt` and no accessible name
If the `img` has an empty `alt` ([^img/alt^]`=""`) and lacks any other
`img` naming methods: role=none,
role=presentation
No `role` other than the role=none or
presentation roles, which are NOT RECOMMENDED.
No `aria-*` attributes
except `aria-hidden="true"`.
Otherwise, any Global `aria-*` attributes and
any `aria-*` attributes applicable to the allowed roles.
The HTML [^input/checked^] attribute can be used instead of
the `aria-checked` attribute for `menuitemcheckbox`, `option`
or `switch` roles when used on `type=checkbox`.
`input type=color`
No corresponding role
No `role`
Global `aria-*` attributes and `aria-disabled` attribute.
`input type=date`
No corresponding role
No `role`
Global `aria-*` attributes
and any `aria-*` attributes applicable to the `textbox` role.
`input type=datetime-local`
No corresponding role
No `role`
Global `aria-*` attributes
and any `aria-*` attributes applicable to the `textbox` role.
`input type=email`
with no [^input/list^] attribute
If used as a valid descendant of a `select` element: no `role` or `aria-*` attributes
Otherwise, any `role` if the element is used outside of its intended context as a child of the `button` part of a customizable `select` element,
though generic is NOT RECOMMENDED.
Naming Prohibited
Otherwise, global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
Any `role`, though `subscript` is NOT RECOMMENDED.
Naming Prohibited
Otherwise, global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
[^summary^]
No corresponding role
The exposed role of a `summary` element can vary depending on the user agent and assistive technology.
No `role` if the `summary` element is a
summary for its parent details element.
Global `aria-*` attributes,
`aria-disabled`, and `aria-haspopup` attributes.
Otherwise, if the `summary` element is not a
summary for its parent details
element, authors MAY specify any `role`, and any
Global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
No corresponding role if the ancestor `table` element is not exposed
as a `role=table`, `grid` or `treegrid`
If the ancestor `table` element has `role=table`, `grid`, or `treegrid`,
no `role`
other than the following:
If the ancestor `table` element is exposed as a `role=table`, then
columnheader,
`rowheader` and
`cell`
are allowed, but NOT RECOMMENDED.
If the ancestor `table` element is exposed as a `role=grid` or `treegrid`, then
columnheader,
`rowheader` or
`gridcell`
are allowed, but NOT RECOMMENDED.
Otherwise, if the ancestor `table` element is not exposed
as a `role=table`, `grid` or `treegrid`,
any `role`.
Global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
If the ancestor `table` element has `role=table`, `grid`, or `treegrid`,
no `role` other than row, which is NOT RECOMMENDED;
otherwise
any `role`, though row is NOT RECOMMENDED.
Global `aria-*` attributes
and any `aria-*` attributes applicable to the allowed roles.
Authors MAY specify the `aria-hidden` attribute on the `wbr` element.
Otherwise, no other allowed `aria-*` attributes.
The elements marked with No corresponding role, in the second column of
the table do not have any implicit ARIA semantics, but they do have meaning
and this meaning may be represented in roles, states and properties not provided
by ARIA, and exposed to users of assistive technology via accessibility APIs.
It is therefore recommended that authors add a `role` attribute to a semantically
neutral element such as a [^div^] or [^span^], rather than overriding the semantics
of the listed elements.
Authors are encouraged to make use of the following documents for
guidance on using ARIA in HTML beyond that which is provided here:
[[[using-aria]]] - A practical guide for authors on how to
add accessibility information to HTML elements using the Accessible
Rich Internet Applications specification.
ARIA Authoring Practices Guide - An author's guide to
understanding and implementing Accessible Rich Internet Applications.
Requirements for use of ARIA attributes to name elements
Authors MAY use `aria-label` and `aria-labelledby` attributes to specify accessible names for elements which have an implicit or explicit ARIA role which allows naming from authors. [[[wai-aria-1.2]]] defines roles which allow naming from authors as well as roles where author naming is prohibited.
Authors MUST NOT specify `aria-label` or `aria-labelledby` on elements with implicit WAI-ARIA roles which cannot be named. HTML elements whose implicit WAI-ARIA roles prohibit naming from authors are identified in [[[#docconformance]]].
The following markup example demonstrates a selection of HTML elements with implicit ARIA roles that prohibit naming from authors.
<!-- DO NOT do the following! -->
<p aria-label="...">...</p>
<span aria-label="...">...<span>
<code aria-label="...">...<code>
<div aria-labelledby="...">...</div>
The following markup example demonstrates elements which have explicit WAI-ARIA roles which allow naming from authors. Due to the explicit roles specified on these elements, `aria-label` and `aria-labelledby` attributes are allowed.
Requirements for use of ARIA attributes in place of equivalent HTML attributes
Unless otherwise stated, authors MAY use `aria-*` attributes in place of their HTML equivalents on HTML elements where the `aria-*` semantics would
be expected. For example, authors MAY specify `aria-disabled=true` on a [^button^] element, while also implementing the necessary scripting to functionally
disable the `button`, rather than the use `disabled` attribute.
As stated in WAI-ARIA's Conflicts with Host Language Semantics,
when HTML elements use both `aria-*` attributes and their host language (HTML) equivalents, user agents MUST ignore the WAI-ARIA attributes – the
native HTML attributes with the same implicit ARIA semantics take precedence. For this reason, authors SHOULD NOT specify both the native HTML attribute
and the equivalent `aria-*` attribute on an element. Please review each attribute for any further author specific requirements.
The following table represents HTML elements and their attributes which have `aria-*` attribute parity.
Each language feature (element and attribute) in a cell in the first
column implies the ARIA semantics (states, and properties) given in
the cell in the second column of the same row. The third cell in each
row defines how authors can use the native HTML feature, along with
requirements for using the `aria-*` attributes that supply the same
implicit ARIA semantics.
Rules of ARIA attribute usage by HTML feature
HTML feature
Implicit ARIA semantics
HTML feature and `aria-*` attribute author guidance
Any element where the [^input/checked^] attribute is allowed
`aria-checked="true"`
Use the `checked` attribute on any element that is allowed the `checked` attribute in HTML.
Use the `indeterminate` IDL attribute to indicate the "mixed" state for `input type=checkbox` elements.
Authors MUST NOT use the `aria-checked` attribute on any element where the checkedness, or the
indeterminate checked value of the element can be in opposition to the current value of the `aria-checked` attribute.
Authors MAY use the `aria-checked` attribute on any other element with a WAI-ARIA role which allows the attribute.
Any element where the [^input/disabled^]
attribute is allowed, including
`option` [^option/disabled^] and
`optgroup` [^optgroup/disabled^]
`aria-disabled="true"`
Use the `disabled` attribute on any element that is allowed the `disabled` attribute in HTML.
Authors MAY use the `aria-disabled` attribute on any element that is allowed the `disabled` attribute in HTML,
or any element with a WAI-ARIA role which allows the `aria-disabled` attribute.
Authors SHOULD NOT use `aria-disabled="true"` on any element which also has a `disabled` attribute.
Authors MUST NOT use `aria-disabled="false"` on any element which also has a `disabled` attribute.
Any element with a [^html-global/hidden^] attribute
`aria-hidden="true"`
Authors MAY use the `aria-hidden` attribute on any HTML element that allows
Global `aria-*` attributes to
be specified, with the exception of focusable elements and the `body` element.
It is generally NOT RECOMMENDED for authors to use `aria-hidden="true"` on any element which also has the `hidden` attribute specified. However,
authors MUST NOT use `aria-hidden="true"` on any element which also has the `hidden` attribute specified in the
Hidden Until Found state.
A focusable element is any element which can be focused by use of keyboard or pointer device. Focusable elements are not always elements which
can be tabbed to via a keyboard. For instance, an element with `tabindex="-1"` is focusable but is not a tabbable element.
Using `aria-hidden="true"` on an element that has the `hidden` attribute is at best an unnecessary redundancy. At worst its usage can
prevent access to the content if the `hidden` attribute's default UA style of `display: none` has been purposefully overwritten by an author or user style sheet.
Finally, if the `hidden` attribute is in the Hidden Until Found state, the use of `aria-hidden=true` will prevent this content from being discoverable to users
of assistive technology when it is found via a browser's in-page find feature and visually rendered to users.
Any element where the [^input/placeholder^] attribute is allowed
`aria-placeholder="..."`
Use the `placeholder` attribute on any element that is allowed the
`placeholder` attribute in HTML.
Authors MAY use the `aria-placeholder` attribute on any element that is allowed the `placeholder` attribute in HTML,
or any element with a WAI-ARIA role which allows the `aria-placeholder` attribute.
Authors MUST NOT use the `aria-placeholder` attribute on any element which also has a `placeholder` attribute.
Any element where the `max` attribute is allowed: `meter` [^meter/max^], `progress` [^progress/max^], and `input` [^input/max^]
`aria-valuemax="..."`
Use the `max` attribute on any element that is
allowed the `max` attribute in HTML.
Authors MAY use the `aria-valuemax` attribute on any other element with a WAI-ARIA role which allows the `aria-valuemax` attribute.
Authors SHOULD NOT use `aria-valuemax` on any element which allows the `max` attribute. Use the `max` attribute instead.
Authors MUST NOT use `aria-valuemax` on any element which also has a `max` attribute.
Any element where the `min` attribute is allowed: `meter` [^meter/min^] and `input` [^input/min^]
`aria-valuemin="..."`
Use the `min` attribute on any element that is
allowed the `min` attribute in HTML.
Authors MAY use the `aria-valuemin` attribute on any other element with a WAI-ARIA role which allows the `aria-valuemin` attribute.
Authors SHOULD NOT use `aria-valuemin` on any element which allows the `min` attribute. Use the `min` attribute instead.
Authors MUST NOT use `aria-valuemin` on any element which also has a `min` attribute.
Any element which allows the `readonly` attribute:
`input` [^input/readonly^], `textarea` [^textarea/readonly^] and form-associated custom element which allows [^form-associated custom elements/readonly^]
`aria-readonly="true"`
Use the `readonly` attribute on any element that is
allowed the `readonly` attribute in HTML.
Authors MAY use the `aria-readonly` attribute on any element with a WAI-ARIA role which allows the attribute.
Authors SHOULD NOT use the `aria-readonly="true"` on any element which also has a `readonly` attribute.
Authors MUST NOT use `aria-readonly="false"` on any element which also has a `readonly` attribute.
Element with [^html-global/contenteditable^]`=true`
or
element without `contenteditable` attribute whose closest
ancestor with a `contenteditable` attribute has
`contenteditable="true"`.
This is equivalent to the `isContentEditable`
IDL attribute.
`aria-readonly="false"`
Authors MUST NOT set `aria-readonly="true"` on an element that has `isContentEditable="true"`.
Any element where the `required` attribute is allowed: `input` [^input/required^], `textarea` [^textarea/required^], and `select` [^select/required^]
`aria-required="true"`
Use the `required` attribute on any element
that is allowed the `required` attribute in HTML.
Authors MAY use the `aria-required` attribute on any element that is allowed the `required` attribute in HTML, or any element with a WAI-ARIA role which allows the `aria-required` attribute.
Authors SHOULD NOT use the `aria-required="true"` on any element which also has a `required` attribute.
Authors MUST NOT use `aria-required="false"` on any element which also has a `required` attribute.
Any element where the [^th/colspan^] attribute is allowed: `td` and `th`
`aria-colspan="..."`
Use the `colspan` attribute on any element that is
allowed the `colspan` attribute in HTML.
Authors SHOULD NOT use the `aria-colspan` attribute on any element which also has a `colspan` attribute.
Authors MUST NOT use `aria-colspan` on any element which also has a `colspan` attribute, and the values of each attribute do not match.
Any element where the [^th/rowspan^] attribute is allowed:
`td` and `th`
`aria-rowspan="..."`
Use the `rowspan` attribute on any element that is
allowed the `rowspan` attribute in HTML.
Authors SHOULD NOT use the `aria-rowspan` attribute on any element which also has a `rowspan` attribute.
Authors MUST NOT use `aria-rowspan` on any element which also has a `rowspan` attribute, and the values of each attribute do not match.
Requirements for deprecated ARIA role, state and property attributes
The ARIA Specification's Deprecated Requirements section indicates that if an ARIA feature is marked as deprecated then authors are advised not to use said feature for new content.
The following roles and attributes are deprecated features of ARIA and DPub ARIA. Conformance checkers MUST warn authors about the deprecated status of these features. Whenever possible, authors are advised to use alternatives to deprecated features.
Deprecated ARIA roles
`directory`
The `directory` role is marked for deprecation in [[wai-aria-1.2|WAI-ARIA 1.2]]. In reality, the `directory` role had no functional difference compared to an element with an implicit or explicitly declared `list` role. Authors are advised to use one of HTML's native list elements, or an ARIA `list` role instead.
Deprecated DPub ARIA roles
`doc-biblioentry`
`doc-endnote`
The `doc-biblioentry` and `doc-endnote` roles are marked for deprecation in [[[dpub-aria-1.1]]], as they are not valid children for an element with an implicit or explicit role of `list`. Authors can use standard list and child `li` elements without the need for these roles.
Deprecated ARIA attributes
`aria-dropeffect`
`aria-grabbed`
The `aria-dropeffect` and `aria-grabbed` attributes were deprecated in [[wai-aria-1.1|WAI-ARIA 1.1]]. There is presently no feature in ARIA to replace their proposed functionality.
Case requirements for ARIA role, state and property attributes
Authors SHOULD use [=ASCII lowercase=] for all `role` token values
and any state or property attributes (`aria-*`) whose values are
defined as tokens.
While modern browsers treat the `role` or `aria-*` attribute values as [=ASCII case-insensitive=], not all assistive technologies will correctly parse these values.
To reduce interoperability issues, authors are strongly encouraged to use [=ASCII lowercase=] for `aria-*` and `role` attribute values. Further, authors are encouraged to rigorously test with different browser and assistive technology combinations to ensure that their content will be correctly exposed to their users.
Allowed descendants of ARIA roles
The following table maps (and extends) the Kinds of content and allowed descendant
information (defined in the
[[HTML]] specification) to elements that have an equivalent `role`.
Column 1 links to the normative [[[wai-aria-1.2]]] definitions for each ARIA `role`.
Column 2 identifies the Kinds of content
categories each `role` has when it is used on an HTML element.
Column 3 indicates what kinds of HTML elements can be descendants of
an element with an explicit `role` specified, often matching the HTML element with
the same implicit role.
For example, a [^button^] element has an implicit `role=button`.
In HTML a `button` element allows [=phrasing content=] as descendants, and does not allow [=interactive content=]
or descendants with a `tabindex` attribute. Therefore, any elements specified with a `role=button` would follow
the same descendant restrictions, and not allow any interactive content descendants,
elements with a `tabindex` specified, or any elements with role values
that are in the interactive content category (identified in column 3).
Examples of non-conforming descendants
<!-- conformance checkers will report an error -->
<button>
<div role="button">...</div>
</button>
<div role="button">
<button>...</button>
</div>
<div role="link">
<textarea>...</textarea>
</div>
Additionally, there are certain roles which [[[wai-aria-1.2]]] has specified specific requirements for their allowed descendants. These have been identified in column 3 (Descendant allowances) by indicating to "Refer to the 'Required Owned Elements'" for those particular roles.
Allowed descendants of ARIA roles
Role
Kind of content
Descendant allowances
`alert`
[=Flow content=]
[=Flow content=] but with no main element descendants.
`alertdialog`
[=Flow content=]
[=Flow content=]
`application`
[=Flow content=]
[=Flow content=]
`article`
[=Flow content=]
[=Sectioning content=]
[=Palpable content=]
[=Flow content=] but with no main element descendants.
`banner`
[=Flow content=]
[=Palpable content=]
[=Flow content=] but with no main, header, or footer element descendants.
`blockquote`
[=Flow content=]
[=Palpable content=]
[=Flow content=] but with no main element descendants.
`button`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Palpable content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`caption`
N/A
[=Flow content=] but with no main or table element descendants.
`cell`
N/A
[=Flow content=] but with no main element descendants.
`checkbox`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`code`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`columnheader`
N/A
[=Flow content=] but with no main, header, or footer element descendants.
`combobox`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Palpable content=]
[=Flow content=] but with no main element descendants.
`complementary`
[=Flow content=]
[=Sectioning content=]
[=Palpable content=]
[=Flow content=] but with no main element descendants.
`contentinfo`
[=Flow content=]
[=Palpable content=]
[=Flow content=] but with no main, header, or footer element descendants.
`definition`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`deletion`
[=Flow content=]
[=Phrasing content=]
[=Phrasing content=]
`dialog`
[=Flow content=]
[=Flow content=]
`directory`
[=Flow content=]
[=Flow content=] but with no main element descendants.
`document`
[=Flow content=]
[=Flow content=]
`emphasis`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`feed`
[=Flow content=]
[=Flow content=] but with no main element descendants.
`figure`
[=Flow content=]
[=Palpable content=]
[=Flow content=] but with no main element descendants.
`form`
[=Flow content=]
[=Palpable content=]
[=Flow content=], but with no [^form^] element descendants.
`generic`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Flow content=]
`grid`
[=Flow content=]
[=Interactive content=]
[=Palpable content=]
Refer to the "Required Owned Elements" as defined for the ARIA `grid` role.
`gridcell`
[=Interactive content=]
[=Flow content=] but with no main element descendants.
`group`
[=Flow content=]
[=Palpable content=]
[=Flow content=]
`heading`
[=Flow content=]
[=Heading content=]
[=Palpable content=]
[=Phrasing content=]
`img` or `image`
[=Flow content=]
[=Phrasing content=]
[=Embedded content=]
[=Palpable content=]
[=Phrasing content=], but with no [=interactive content=] descendants.
`insertion`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`link`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Palpable content=]
[=Flow content=], but with no [=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`list`
[=Flow content=]
Refer to the "Required Owned Elements" as defined for the ARIA `list` role.
`listbox`
[=Flow content=]
[=Interactive content=]
[=Palpable content=]
Refer to the "Required Owned Elements" as defined for the ARIA `listbox` role.
`listitem`
N/A
[=Flow content=] but with no main element descendants.
`log`
[=Flow content=]
[=Flow content=], but with no main element descendants.
`main`
[=Flow content=]
[=Flow content=], but with no main element descendants.
`marquee`
[=Flow content=]
[=Flow content=], but with no main element descendants.
`math`
[=Flow content=]
[=Flow content=]
`menu`
[=Flow content=]
[=Interactive content=]
Refer to the "Required Owned Elements" as defined for the ARIA `menu` role.
`menubar`
[=Flow content=]
[=Interactive content=]
Refer to the "Required Owned Elements" as defined for the ARIA `menubar` role.
`menuitem`
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`menuitemcheckbox`
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`menuitemradio`
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`meter`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=], but with no meter element descendants.
`navigation`
[=Flow content=]
[=Sectioning content=]
[=Palpable content=]
[=Flow content=], but with no main element descendants.
`none`
N/A
Transparent
`note`
[=Flow content=]
[=Flow content=], but with no main element descendants.
`option`
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`paragraph`
[=Flow content=]
[=Palpable content=]
[=Phrasing content=]
`presentation`
N/A
Transparent
`progressbar`
[=Flow content=]
[=Phrasing content=]
[=Phrasing content=], but with no progress element descendants.
`radio`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`radiogroup`
[=Flow content=]
[=Palpable content=]
[=Flow content=]
`region`
[=Flow content=]
[=Sectioning content=]
[=Palpable content=]
[=Flow content=], but with no main element descendants.
`row`
N/A
Refer to the "Required Owned Elements" as defined for the ARIA `row` role.
`rowgroup`
N/A
Refer to the "Required Owned Elements" as defined for the ARIA `rowgroup` role.
`rowheader`
N/A
[=Flow content=] but with no main element descendants.
`scrollbar`
[=Interactive content=]
[=Phrasing content=]
`search`
[=Flow content=]
[=Palpable content=]
[=Flow content=] but with no main element descendants.
`searchbox`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Flow content=] but with no main element descendants.
`separator`
[=Interactive content=] (if focusable)
[=Phrasing content=]
`slider`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Phrasing content=]
`spinbutton`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Flow content=] but with no main element descendants.
`status`
[=Flow content=]
[=Flow content=] but with no main element descendants.
`strong`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`subscript`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`superscript`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`switch`
[=Flow content=]
[=Phrasing content=]
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`tab`
[=Interactive content=]
[=Phrasing content=], but with no
[=interactive content=] descendants, and no descendants with a `tabindex` attribute specified.
`table`
[=Flow content=]
[=Palpable content=]
Refer to the "Required Owned Elements" as defined for the ARIA `table` role.
`tablist`
[=Flow content=]
[=Palpable content=]
Refer to the "Required Owned Elements" as defined for the ARIA `tablist` role.
`tabpanel`
[=Flow content=]
[=Flow content=]
`term`
[=Phrasing content=]
[=Phrasing content=]
`textbox`
[=Interactive content=]
[=Flow content=] but with no main element descendants.
`time`
[=Flow content=]
[=Phrasing content=]
[=Palpable content=]
[=Phrasing content=]
`timer`
[=Flow content=]
[=Flow content=] but with no main element descendants.
`toolbar`
[=Flow content=]
[=Flow content=] but with no main element descendants.
`tooltip`
[=Flow content=]
[=Phrasing content=]
`tree`
[=Flow content=]
Refer to the "Required Owned Elements" as defined for the ARIA tree role.
`treegrid`
[=Flow content=]
Refer to the "Required Owned Elements" as defined for the ARIA treegrid role.
`treeitem`
[=Interactive content=]
[=Phrasing content=]
Conformance checking requirements
Conformance checkers that claim support for checking ARIA in HTML documents
MUST implement checks for the conformance requirements for use of the ARIA `role`
and `aria-*` attributes on [=HTML elements=] as defined in this specification.
A conforming document MUST NOT contain any elements with author defined `role`
or `aria-*` attributes with values other than those which, per this specification,
authors MAY use on each [=HTML element=] in [[[#docconformance]]].
Conformance checkers SHOULD flag instances where authors are explicitly providing
an element with a `role` which matches its
implicit ARIA semantics as failures,
as it is NOT RECOMMENDED for authors to explicitly set these roles.
A conformance checker MAY define their own terminology, and level or levels of
severity, when surfacing document failures to conform to this specification.
Privacy and security considerations
This specification does not define the features of [[wai-aria-1.2]],
[[dpub-aria-1.1]] or [[HTML]]. Rather it provides rules and guidance for conformance
checkers that claim support for checking ARIA in HTML, as well as providing guidance to authors.
Therefore, there are no known privacy or security impacts of this specification,
as it defines no new features to introduce potential concern.
You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.