Copyright © 2015-2022 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
HTML Accessibility API Mappings (HTML-AAM) defines how user agents map HTML [HTML] elements and attributes to platform accessibility application programming interfaces (APIs). It leverages and extends the Core Accessibility API Mappings 1.2 and the Accessible Name and Description Computation 1.1 for use with the HTML host language. Documenting these mappings promotes interoperable exposure of roles, states, properties, and events implemented by accessibility APIs and helps to ensure that this information appears in a manner consistent with author intent.
The HTML-AAM is part of the WAI-ARIA suite described in the WAI-ARIA Overview.
This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.
This document is subject to change without notice.
This document was initially developed by and with the approval of the HTML Accessibility Taskforce, a joint task force of the Protocols and Formats Working Group and the HTML Working Group. Work continued with the successor groups Accessible Rich Internet Applications Working Group and the Web Applications Working Group. This document is now maintained solely by the Accessible Rich Internet Applications Working Group.
This document was published by the Accessible Rich Internet Applications Working Group as a Working Draft using the Recommendation track.
Publication as a Working Draft does not imply endorsement by W3C and its Members.
This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
This document is governed by the 2 November 2021 W3C Process Document.
This section is non-normative.
This specification defines how HTML user agents respond to and expose role, state and property information provided for Web content. Unless indicated otherwise, an HTML element or attribute with default Accessible Rich Internet Applications (WAI-ARIA) 1.0 semantics must be exposed to the platform accessibility APIs according to the relevant WAI-ARIA mappings defined in the Core Accessibility API Mappings 1.2 ([core-aam-1.2]) specification.
In some cases, often due to features of the HTML host language or the accessibility API in question, an element or attribute's mapping differs from the corresponding ARIA mappings specified in the [core-aam-1.2]. Where an HTML element or attribute does not have any default WAI-ARIA semantics, the applicable mapping for each platform accessibility API is defined by this specification.
This document also adapts the Accessible Name and Description Computation 1.1 ([accname-1.1]) for deriving the accessible names and accessible descriptions of [HTML] elements, and provides accessible implementation examples for specific HTML elements and features.
Users often access HTML content using assistive technologies that rely on platform accessibility API to obtain and interact with information from the page. This document is part of the following suite of accessibility API mapping specifications for content rendered by user agents:
Accessibility APIs covered by this document are:
If user agent developers need to expose information using other accessibility APIs, it is recommended that they work closely with the developer of the platform where the API runs, and assistive technology developers on that platform.
For more information regarding accessibility APIs, refer to section 1.1 Accessibility APIs of the Core Accessibility API Mappings 1.2.
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY, MUST, and MUST NOT in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
The classification of a section as normative or non-normative applies to the entire section and all sub-sections of that section.
Normative sections provide requirements that authors, user agents, and assistive technologies MUST follow for an implementation to conform to this specification.
Non-normative sections provide information useful to understanding the specification. Such sections may contain examples of recommended practice, but it is not required to follow such recommendations in order to conform to this specification.
There are currently no deprecated requirements.
WAI-ARIA support was first introduced to HTML in [HTML5].
Where an HTML element or attribute has default WAI-ARIA semantics, it MUST be exposed to the platform accessibility APIs in a way that conforms to General rules for exposing WAI-ARIA semantics in the Core Accessibility API Mappings 1.2.
Where the host language is [HTML], user agents MUST conform to Conflicts between native markup semantics and WAI-ARIA in the Core Accessibility API Mappings 1.2.
HTML can include features that are not supported by accessibility APIs at the time of publication. There is not a one to one relationship between all features and platform accessibility APIs. When HTML roles, states and properties do not directly map to an accessibility API, and there is a method in the API to expose a text string, user agents MUST expose the undefined role, states and properties via that method.
For HTML elements or attributes with default WAI-ARIA semantics, user agents MUST conform to Exposing attributes that do not directly map to accessibility API properties in the [core-aam-1.2].
generic role, user agents MUST NOT expose the aria-roledescription property value in the accessibility tree unless the element has an explicit, conforming role attribute value which [WAI-ARIA-1.2] does not prohibit the use of aria-roledescription.label element's for attribute, or a descendant of a label element, the labelable element's UIA LabeledBy property points to the UIA element for the label element.Text Control Type are not generally represented as accessible objects in the accessibility tree, but are just part of the Text Control Pattern implemented for the whole HTML document. However, if they have any aria- attributes or an explicit tabindex specified, elements mapped to the Text Control Type will be represented as accessible objects in the accessibility tree.The terms accessible name and accessible description are properties provided in all accessibility APIs. The name of the properties may differ across APIs but they serve the same function: as a container for a short (name) or longer (description) string of text.
The text alternative computation is used to generate both the accessible name and accessible description. There are different rules provided for several different types of elements, nodes, and combinations of markup.
input type="text", input type="password", input type="search", input type="tel", input type="url" and textarea Elementinput type="text", input type="password", input type="search", input type="tel", input type="email", input type="url" and textarea Element Accessible Name Computationaria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
label element(s) accessible name(s) - if more than one label is associated; concatenate by DOM order, delimited by spaces.
title attribute.placeholder attribute.input type="text", input type="password", input type="search", input type="tel", input type="email", input type="url" and textarea Element Accessible Description Computationaria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
alt attribute.title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
fieldset element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
fieldset element has a child that is a legend element, then use the subtree of the first such element.
fieldset element has a title attribute, then use that attribute.
fieldset element has an aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
output element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
output element subtree.title attribute.aria-describedby.title attribute if it wasn't used as the accessible name.
aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
label element.title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
summary element, which is a direct child of the details element, has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
summary element subtree.title attribute.summary element as a direct child of the details element, the user agent should provide one with a subtree containing a localized string of the word "details".
summary element as a direct child of the details element, but none of the above yield a usable text string, there is no accessible name.
aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
summary element subtree if not used as the accessible name.
title attribute if it wasn't used as the accessible name.
figure element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
figure element has a child that is a figcaption element, then use the subtree of the first such element.
figure element has a title attribute, then use that attribute.
aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
img element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
alt attribute.title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
table element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
table element has a child that is a caption element, then use the subtree of the first such element.
table element has a title attribute, then use that attribute.
aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
table element has a child that is a caption element and it wasn't used as the accessible name, then use the subtree of the first such element.
table element has a title attribute and it wasn't used as the accessible name, then use that attribute.
aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
a element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
a element subtree.title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
area element has an aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
area element's alt attribute.title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute.The document referenced by the src of the iframe element gets its name from that document's title element, like any other document. If there is no title provided, there is no accessible name.
aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
abbr, b, bdi, bdo, br, cite, code, dfn, em, i, kbd, mark, q, rp, rt, ruby, s, samp, small, strong, sub and sup, time, u, var, wbr
aria-label or an aria-labelledby attribute the accessible name is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute.aria-describedby attribute the accessible description is to be calculated using the algorithm defined in Accessible Name and Description: Computation and API Mappings 1.1.
title attribute if it wasn't used as the accessible name.
Review the commit history of this document on GitHub.
generic role: a no href, footer not scoped to body, header not scoped to body, samp, span. See GitHub PR 364.mark to point to Core AAM mapping for the role. See GitHub Issue 316.blockquote, caption, code, del, em, ins, meter, paragraph, strong, sub, sup and time to ARIA 1.2 mappings in Core AAM. Fix body mapping to generic, and html mapping to document. Fix hgroup mapping to generic. Update details to map to group with additional information specific to ATK, UIA. See GitHub issue #348readonly, name, form, disabled. See Issue 257.hgroup, slot, autonomous custom element and form associated custom element. See GitHub issue #189.disabled, scope, spellcheck, tabindex to point to WAI-ARIA. Adds AX pattern, reversed, rows, size, span, src, start, step, type attribute mappings. Adds min-length, ping, playsinline, referrerpolicy, sizes, srcset, data[value] attribute mappings. See GitHub pull request #245.rb and rtc elements as they are marked as obsolete in HTML. See GitHub issue #115 and pull request #253.
high, low, max, min, and meter and progress's value attribute. See GitHub pull request #244.mark element's UIA LocalizedControlType and AX AXRoleDescription. See GitHub issue #236.summary and details elements. See GitHub issue #142 and GitHub issue #147.sub and sup. See GitHub pull request #252.menu to match HTML Living Standard. Remove element and attribute mappings that are not applicable to menu and menuitem. Update mapping of menu to role="list". See GitHub issue #188.ins and del elements. See GitHub pull request #219.ins and del elements. See GitHub issue #141.header and footer when not scoped to the body. See GitHub issue #129.map element. Add accessible name and description computation for area. See GitHub issue #176.sub and sup elements. See Pull request #177.sup and sub elements. See GitHub issue #174.address element. See GitHub issue #170.placeholder attribute to accessible name computation for various input elements. See GitHub issue #167.rb and rtc elements, and updated AXAPI mappings for the rb, rt and ruby elements. See GitHub issue #115.svg element. See GitHub issue #43.del and ins elements, and the datetime attribute.header and footer when scoped to body, aside, and output. See GitHub issue #119.multiple attribute on input element. See GitHub issue #96.sub and sup elements. See GitHub issue #121.body element. See GitHub issue #117.meter element. See GitHub issue #2.address element. See GitHub issue #33.dt element. See GitHub issue #78.mark element.input element with the type attribute in the Color state. See GitHub issue #48.pre, q, and ruby elements, and the multiple attribute for the input element. See GitHub issue #94.readonly attribute to use aria-readonly="true" WAI-ARIA mappings. See GitHub issue #93.canvas element from AXImage to AXGroup.dfn element. See GitHub issue #6.meter element. See GitHub issue #2.audio and video elements. See GitHub issue #80.figure element mappings to reflect the WAI-ARIA figure role mappings.form element based on presence of accessible name. See GitHub issue #106.img element's title attribute when the element's alt attribute is empty. See GitHub issue #99.aria-roledescription unless element also a conforming role attribute value. See GitHub issue #98.type attribute on the ol element. See GitHub issue #91.title attribute on abbr element, and abbr attribute on th element. See GitHub issue #16.hidden attribute. See GitHub issue #38.selected attribute. See GitHub issue #92.time element. See GitHub issue #88.lang and dir attributes. See GitHub issue #19.colspan and rowspan attributes. See GitHub issue #56 and issue #57.section element. See GitHub issue #79.datalist element if not linked with input element. See GitHub issue #26.list attribute. See GitHub issue #21.footer and header elements. See GitHub issue #59.input@type='date' attribute. See GitHub issue #61.input@type='file' element. See GitHub issue #62.summary element. See GitHub issue #64.header and footer elements are or are not ARIA landmarks. See GitHub issue #65.aria-multiselectable mapping for datalist to reflect listbox selection model. See GitHub issue #71.multiple attribute on input and select elements. See GitHub issue #72.checked, contenteditable, disabled, and indeterminate attributes.placeholder attribute from accessible description computation for various input elements.This section is non-normative.
The following people contributed to the development of this document.
This publication has been funded in part with U.S. Federal funds from the Department of Education, National Institute on Disability, Independent Living, and Rehabilitation Research (NIDILRR), initially under contract number ED-OSE-10-C-0067 and currently under contract number HHSP23301500054C. The content of this publication does not necessarily reflect the views or policies of the U.S. Department of Education, nor does mention of trade names, commercial products, or organizations imply endorsement by the U.S. Government.