W3C Editor's Draft 14 October 2025
More details about this documentCopyright © 2014-2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
AbstractThis document describes how user agents should expose semantics of web content languages to accessibility APIs. This helps users with disabilities to obtain and interact with information using assistive technologies. 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.
This Core Accessibility API Mappings specification defines support that applies across multiple content technologies, including general keyboard navigation support and mapping of general-purpose roles, states, and properties provided in Web content via WAI-ARIA [WAI-ARIA-1.2]. Other Accessibility API Mappings specifications depend on and extend this Core specification for specific technologies, including native technology features and WAI-ARIA extensions. This document updates and will eventually supersede the guidance in the Core Accessibility API Mappings 1.1 [CORE-AAM-1.1] W3C Recommendation. It is part of the WAI-ARIA suite described in the WAI-ARIA Overview.
Status of This DocumentThis 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 standards and drafts index.
The Accessible Rich Internet Applications Working Group seeks feedback on any aspect of the specification. When submitting feedback, please consider issues in the context of the companion documents. To comment, file an issue in the W3C core-aam GitHub repository. If this is not feasible, send email to public-aria@w3.org (comment archive). In-progress updates to the document may be viewed in the publicly visible editors' draft.
Living specification — This document is maintained as a living specification. For the latest normative version, visit Core Accessibility API Mappings.
This document was published by the Accessible Rich Internet Applications Working Group as an Editor's Draft.
Publication as an Editor's 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 a 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 that 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 18 August 2025 W3C Process Document.
Table of Contentsalert
alertdialog
application
article
banner
blockquote
button
with default values for aria-pressed
and aria-haspopup
button
with non-false
value for aria-haspopup
button
with defined value for aria-pressed
caption
cell
checkbox
code
columnheader
combobox
comment
complementary
contentinfo
definition
deletion
dialog
directory
(deprecated)document
emphasis
feed
figure
form
with an accessible nameform
without an accessible namegeneric
grid
gridcell
group
heading
image
img
insertion
link
list
listbox
without an accessibility parent of combobox
listbox
with an accessibility parent of combobox
listitem
log
main
mark
marquee
math
menu
menubar
menuitem
menuitemcheckbox
menuitemradio
meter
navigation
none
note
option
not inside combobox
option
inside combobox
paragraph
presentation
progressbar
radio
radiogroup
region
with an accessible nameregion
without an accessible namerow
not inside treegrid
row
inside treegrid
rowgroup
rowheader
scrollbar
search
searchbox
sectionfooter
sectionheader
separator
(non-focusable)separator
(focusable)slider
spinbutton
status
strong
subscript
suggestion
superscript
switch
tab
table
tablist
tabpanel
term
textbox
when aria-multiline
is false
textbox
when aria-multiline
is true
time
timer
toolbar
tooltip
tree
treegrid
treeitem
aria-activedescendant
aria-atomic
=true
aria-atomic
=false
aria-autocomplete
=inline
, list
, or both
aria-autocomplete
=none
aria-braillelabel
aria-brailleroledescription
aria-brailleroledescription
is undefined or the empty stringaria-busy
=true
aria-busy
=false
aria-checked
=true
aria-checked
=false
aria-checked
=mixed
aria-checked
is undefinedaria-colcount
aria-colindex
aria-colindextext
aria-colspan
aria-controls
aria-current
with non-false
allowed valuearia-current
with unrecognized valuearia-current
is false
or undefinedaria-describedby
aria-description
aria-details
aria-disabled
=true
aria-disabled
=false
aria-dropeffect
=copy
, move
, link
, execute
, or popup
(deprecated) aria-dropeffect
=none
(deprecated)aria-errormessage
aria-expanded
=true
aria-expanded
=false
aria-expanded
is undefinedaria-flowto
aria-grabbed
=true
aria-grabbed
=false
aria-grabbed
is undefinedaria-haspopup
=true
aria-haspopup
=false
aria-haspopup
=dialog
aria-haspopup
=grid
aria-haspopup
=listbox
aria-haspopup
=menu
aria-haspopup
=tree
aria-hidden
=true
on unfocused elementaria-hidden
=true
when element is focused or fires an accessibility eventaria-hidden
=false
aria-invalid
=true
aria-invalid
=false
aria-invalid
=spelling
or grammar
aria-invalid
with unrecognized valuearia-keyshortcuts
aria-label
aria-labelledby
aria-level
on non-heading
aria-level
on heading
aria-live
=assertive
aria-live
=polite
aria-live
=off
aria-modal
=true
aria-modal
=false
aria-multiline
=true
aria-multiline
=false
aria-multiselectable
=true
aria-multiselectable
=false
aria-orientation
=horizontal
aria-orientation
=vertical
aria-orientation
is undefinedaria-owns
aria-placeholder
aria-posinset
aria-pressed
=true
aria-pressed
=mixed
aria-pressed
=false
aria-pressed
is undefinedaria-readonly
=true
aria-readonly
=false
aria-readonly
is unspecified on gridcell
aria-relevant
aria-required
=true
aria-required
=false
aria-roledescription
aria-roledescription
is undefined or the empty stringaria-rowcount
aria-rowindex
aria-rowindextext
aria-rowspan
aria-selected
=true
aria-selected
=false
aria-selected
is undefinedaria-setsize
aria-sort
=ascending
aria-sort
=descending
aria-sort
=other
aria-sort
=none
aria-valuemax
aria-valuemin
aria-valuenow
aria-valuetext
aria-activedescendant
aria-busy
(state)aria-checked
(state)aria-current
(state)aria-disabled
(state)aria-describedby
aria-dropeffect
(property, deprecated)aria-expanded
(state)aria-grabbed
(state, deprecated)aria-hidden
(state)aria-invalid
(state)aria-label
and aria-labelledby
aria-pressed
(state)aria-readonly
aria-required
aria-selected
(state)aria-valuenow
aria-valuetext
This section is non-normative.
The Core Accessibility API Mappings specifies how WAI-ARIA roles, states, and properties are expected to be exposed by user agents via platform accessibility APIs. It is part of a set of resources that define and support the WAI-ARIA specification which includes the following documents:
For an introduction to WAI-ARIA, see the WAI-ARIA Overview.
Accessibility APIs make it possible to communicate accessibility information about user interfaces to assistive technologies. This information includes:
Accessibility APIs covered by this specification are:
The WAI-ARIA 1.0 User Agent Implementation Guide included mappings for [UIA-EXPRESS], also known as IAccessibleEx, which was implemented in Microsoft Internet Explorer 8.0 - 11. New implementations are strongly encouraged to use UI Automation instead.
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 various technological and historical reasons, accessibility APIs do not all work in the same way. In many cases, there is no simple one-to-one relationship between how each of them names or exposes roles, states, and properties to assistive technologies. The following subsections describe a few of the distinguishing characteristics of some of the APIs.
MSAA, IAccessible2, UIA, and AX API each define an API that is shared by both the software application exposing information about its content and interactive components, and the assistive technology consuming that information. Conversely, Linux/GNOME separates that shared interface into its two aspects, each represented by a different accessibility API: ATK or AT-SPI.
ATK defines an interface that is implemented by software in order to expose accessibility information, whereas AT-SPI is a desktop service that gathers accessibility information from active applications and relays it to other interested applications, usually assistive technologies.
For example, the GNOME GUI toolkit [GTK], implements the relevant aspects of ATK for each widget (menu, combobox, checkbox, etc.) in order that GTK widgets expose accessibility information about themselves. AT-SPI then acquires the information from applications built with GTK and makes it available to interested parties.
ATK is most relevant to implementors, whereas AT-SPI is relevant to consumers. In the context of mapping WAI-ARIA roles, states and properties, user agents are implementors and use ATK. Assistive Technologies are consumers, and use AT-SPI.
UI Automation expresses every element of the application user interface as an automation element. Automation elements form the nodes of the application accessibility tree, that can be queried, traversed and interacted with by automation clients.
There are several concepts central to UI Automation:
All automation elements inherit from the IUIAutomationElement
interface and all properties that are not specific to a particular control pattern can be queried through that interface. There are several ways to access UI Automation element properties:
Current{PropertyName}
, e.g. IUIAutomationElement::CurrentName
for the Name
propertyCached{PropertyName}
, e.g. IUIAutomationElement::CachedName
for the Name
property. Using cached values is preferred when providers and clients are used in remote environments.GetCurrentPropertyValue
and passing the UIA Property ID enumeration value corresponding to that property to get the current value, e.g. IUIAutomationElement::GetCurrentPropertyValue(UIA_NamePropertyId)
for the Name
property.GetCachedPropertyValue
and passing the UIA Property ID enumeration value corresponding to that property to get the cached value, e.g. IUIAutomationElement::GetCachedPropertyValue(UIA_NamePropertyId)
for the Name
property.Properties for specific UIA control patterns are queried the same way using relevant control pattern interfaces. Taking Toggle Pattern as an example, to query the ToggleState property clients can use IUIAutomationTogglePattern::CurrentToggleState or IUIAutomationTogglePattern::GetCurrentPropertyValue(UIA_ToggleToggleStatePropertyId) to get the current value.
The property mappings in this specification provide the {PropertyName}
and do not specify all specific ways to access the property value. Automation clients can access current or cached values using conventions described above, depending on specific needs and coding style conventions.
Each platform accessibility API includes a way to assign and retrieve accessible name and accessible description properties for each accessible object created in the accessibility tree. How these properties are implemented and what they are called vary depending on the API.
For instance, in MSAA, all accessible objects support the accName
property, which stores the object's accessible name. Where the object also supports having an accessible description, MSAA stores this property in the object's accDescription
property.
Software using ATK can read and write to an object's accessible-name
and accessible-description
properties. In turn, AT-SPI can query the values of those properties through its atspi_accessible_get_name
and atspi_accessible_get_description
functions.
Automation elements in the UIA accessibility tree have a Name
property. Where the object also supports having an accessible description, UIA stores this property in the object's FullDescription
property.
An object's accessible description, where provided by aria-description
or aria-describedby
, should be exposed in the accessibilityCustomContent
API. Otherwise, it should be exposed as AXHelp
.
For more detail, see the Accessible Name and Description Computation specification.
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, MUST NOT, SHOULD, and SHOULD 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.
Normative sections provide requirements that user agents and assistive technologies MUST follow for an implementation to conform to this specification.
Non-normative (informative) 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.
The WAI-ARIA specification lists some features as deprecated. Although this means authors are encouraged not to use such features, it is expected that the features could still be used in legacy content. Therefore, it is important that user agents continue to map these features to accessibility APIs, and doing so is part of conformance to this specification. When future versions of the WAI-ARIA specification change such features from deprecated to removed, they will be removed from the mappings as well and user agents will no longer be asked to continue support for those features.
Where supported by the platform Accessibility API, user agents expose WAI-ARIA semantics through the standard mechanisms of the desktop accessibility API. For example, for WAI-ARIA widgets, compare how the widget is exposed in a similar desktop widget. In general most WAI-ARIA widget capabilities are exposed through the role, value, Boolean states, and relations of the accessibility API.
With respect to WAI-ARIA 1.0 and 1.1, accessibility APIs operate in one direction only. User agents publish WAI-ARIA information (roles, states, and properties) via an accessibility API, and an AT can acquire that information using the same API. However, the other direction is not supported. WAI-ARIA 1.0 and 1.1 do not define mechanisms for assistive technologies to directly modify WAI-ARIA information.
The terms "exposing", "mapping", and "including" refer to the creation of accessible object nodes within the accessibility tree, and populating these objects with Accessibility API specific states and properties.
WAI-ARIA roles, states, and properties are intended to add semantic information when native host language elements with these semantics are not available, and are generally used on elements that have no native semantics of their own. They can also be used on elements that have similar but not identical semantics to the intended object (for instance, a nested list could be used to represent a tree structure). This method can be part of a fallback strategy for older browsers that have no WAI-ARIA implementation, or because native presentation of the repurposed element reduces the amount of style and/or script needed. Except for the cases outlined below, user agents MUST always use the WAI-ARIA semantics to define how it exposes the element to accessibility APIs, rather than using the host language semantics.
Host languages can have features that have implicit WAI-ARIA semantics corresponding to roles. When a WAI-ARIA role is provided that has a corresponding role in the accessibility API, user agents MUST use the semantic of the WAI-ARIA role for processing, not the native semantic, unless the role requires WAI-ARIA states and properties whose attributes are explicitly forbidden on the native element by the host language. Values for roles do not conflict in the same way as values for states and properties, and because authors are expected to have a valid reason to provide a WAI-ARIA role even on elements that would not normally be repurposed. For example, spin buttons are typically constructed from text fields (<input type="text">
) in order to get most of the default keyboard support. But, the native role, "text field", is not correct because it does not properly communicate the additional features of a spin button. The author adds the WAI-ARIA role of spinbutton
(<input type="text" role="spinbutton" ...>
) so that the control is properly mapped in the accessibility API. When a WAI-ARIA role is provided that does not have a corresponding role in the accessibility API, user agents MAY expose the native semantic in addition to the WAI-ARIA role. If the host language element is overridden by a WAI-ARIA role whose semantics or structure is not equivalent to the native host language semantics or to a subclass of those semantics, then treat any child elements having roles specified as Allowed Accessibility Child Roles as having presentation or none.
Note
The above text differs slightly from the WAI-ARIA specification. The requirement for user agents to expose the WAI-ARIA role instead of the native role was intended to only apply in cases where there is a direct mapping from the WAI-ARIA role to a corresponding role in the accessibility API. The wording of the requirement is not clear in the WAI-ARIA specification, however, and has been interpreted differently by implementers. The requirement has been clarified here and an additional statement added to indicate that user agents may expose native semantics if there is not a direct mapping to a role in the accessibility API. Because there are differing implementations, authors will be advised against adding such WAI-ARIA roles to native elements that have their own semantics in the WAI-ARIA Authoring Practices Guide.
When WAI-ARIA states and properties correspond to host language features that have the same implicit WAI-ARIA semantic, it can be problematic if the values become out of sync. For example, the HTML checked
attribute and the aria-checked
attribute could have conflicting values. Therefore to prevent providing conflicting states and properties to assistive technologies, host languages will explicitly declare where the use of WAI-ARIA attributes on a host language element conflict with native attributes for that element. When a host language declares a WAI-ARIA attribute to be in direct semantic conflict with a native attribute for a given element, user agents MUST ignore the WAI-ARIA attribute and instead use the host language attribute with the same implicit semantic.
Host languages might also document features that cannot be overridden with WAI-ARIA (these are called "strong native semantics"). These can be features that have implicit WAI-ARIA semantics as well as features where the processing would be uncertain if the semantics were changed with WAI-ARIA. While conformance checkers might signal an error or warning when a WAI-ARIA role is used on elements with strong native semantics, user agents MUST still use the value of the semantic of the WAI-ARIA role when exposing the element to accessibility APIs.
Platform accessibility APIs might have features that are not in WAI-ARIA. Likewise, WAI-ARIA exposes capabilities that are not supported by accessibility APIs at the time of publication. There typically is not a one to one relationship between all WAI-ARIA attributes and platform accessibility APIs. When WAI-ARIA roles, states and properties do not directly map to an accessibility API, and there is a mechanism in the API to expose the WAI-ARIA role, states, and properties and their values, user agents MUST expose the WAI-ARIA data using that mechanism as follows:
aria-live
attribute can be exposed via an object attribute because accessibility APIs have no such property available. Specific rules for exposing object attribute name-value pairs are described throughout this document, and rules for the general cases are in State and Property Mapping.AriaRole
and AriaProperties
properties to expose semantics that are not directly supported in the control type.Note
MSAA does not provide a mechanism for exposing attributes that do not map directly to the API and among implementers, there is no agreement on how to do it.
User agents MUST also expose the entire role string through this mechanism and MAY also expose WAI-ARIA attributes and values through this mechanism even when there is a direct mapping to an accessibility API.
Browser implementers are advised to publicly document their API methods for exposing any relevant information, so that assistive technology developers can use the API to support user features.
Platform accessibility APIs traditionally have had a finite set of predefined roles that are expected by assistive technologies on that platform and only one or two roles may be exposed. In contrast, WAI-ARIA allows multiple roles to be specified as an ordered set of space-separated valid role tokens. The additional roles are fallback roles similar to the concept of specifying multiple fonts in case the first choice font type is not supported.
User agents MUST expose the WAI-ARIA role string if the API supports a mechanism to do so. This allows assistive technologies to do their own additional processing of roles.
accRole
property.xml-roles:"string"
)AriaRole
property. The AriaRole property
can also support secondary roles using a space as a separator.xml-roles:"string"
)The computedrole
of an element is a string that represents the role of the element as computed by the browser engine. The computedrole
is used primarily for the purposes of developer tools and specification conformance and interoperability testing.
<button>
<a href="#" role="button">
Note
When an element has a role but is not contained in the required context (for example, an orphaned listitem
without the required accessible parent of role list
), this is an authoring error, but the user agent behavior is not specified as a single rule. For most roles, user agents can either recover the error by ignoring the role, or respect the author's intended role in scenarios deemed by the implementation to be harmless. Please note that this permissiveness in how engines treat author role errors might be overridden in a language-specific mapping document such as [HTML-AAM].
<div role="listitem">
<div role="list">
<div role="listitem">
When host language elements do not have an exact or equivalent mapping to a valid, non-abstract role, the related Accessibilty API Mapping extension specification MAY specify a unique computedrole
string as the return value for interoperability testing purposes, such as <video> -> "html-video"
in [HTML-AAM]. However, authors MUST NOT use any host-language-prefixed computedrole
string in the role
attribute (such as html-video
), unless the token also matches valid, defined role (such as dpub-chapter
). User Agents MUST ignore any abstract or invalid role token.
<video>
<main role="html-video">
ARIA Specification alert
Computed Role
alert
ROLE_SYSTEM_ALERT
EVENT_SYSTEM_ALERT
. [Note 2] UIA Control Type: Group
alert
Assertive (2)
ROLE_NOTIFICATION
AXGroup
AXApplicationAlert
alertdialog
Computed Role
alertdialog
ROLE_SYSTEM_DIALOG
EVENT_SYSTEM_ALERT
. [Note 2] UIA Control Type: Pane
ROLE_ALERT
Window
AXGroup
AXApplicationAlertDialog
application
Computed Role
application
ROLE_SYSTEM_APPLICATION
UIA Control Type: Pane
application
ATK/AT-SPI Role: ROLE_EMBEDDED
AX API[Note 1] AXRole: AXGroup
AXWebApplication
article
Computed Role
article
ROLE_SYSTEM_DOCUMENT
STATE_SYSTEM_READONLY
xml-roles:article
UIA Control Type: Group
article
ATK/AT-SPI Role: ROLE_ARTICLE
xml-roles:article
AX API[Note 1] AXRole: AXGroup
AXDocumentArticle
blockquote
Computed Role
blockquote
ROLE_SYSTEM_GROUPING
IA2_ROLE_BLOCK_QUOTE
UIA Control Type: Group
blockquote
ATK/AT-SPI Role: ROLE_BLOCK_QUOTE
AXGroup
<nil>
button
with default values for aria-pressed
and aria-haspopup
Computed Role
button
ROLE_SYSTEM_PUSHBUTTON
UIA Control Type: Button
ATK/AT-SPI Role: ROLE_PUSH_BUTTON
AX API[Note 1] AXRole: AXButton
<nil>
button
with defined value for aria-pressed
Computed Role
button
ROLE_SYSTEM_PUSHBUTTON
IA2_ROLE_TOGGLE_BUTTON
UIA Control Type: Button
ATK/AT-SPI Role: ROLE_TOGGLE_BUTTON
AX API[Note 1] AXRole: AXCheckBox
AXToggle
caption
Computed Role
caption
ROLE_SYSTEM_GROUPING
IA2_ROLE_CAPTION
UIA Control Type: Text
ATK/AT-SPI Role: ROLE_CAPTION
AX API[Note 1] AXRole: AXGroup
<nil>
cell
Computed Role
cell
ROLE_SYSTEM_CELL
IAccessibleTableCell
UIA Control Type: DataItem
item
GridItem
TableItem
ATK/AT-SPI Role: ROLE_TABLE_CELL
TableCell
AX API[Note 1] AXRole: AXCell
<nil>
code
Computed Role
code
IA2_ROLE_TEXT_FRAME
xml-roles:code
UIA Control Type: Text
code
ATK/AT-SPI Role: ROLE_STATIC
xml-roles:code
AX API[Note 1] AXRole: AXGroup
AXCodeStyleGroup
columnheader
Computed Role
columnheader
ROLE_SYSTEM_COLUMNHEADER
IAccessibleTableCell
UIA Control Type: DataItem
column header
GridItem
TableItem
ATK/AT-SPI Role: ROLE_COLUMN_HEADER
TableCell
AX API[Note 1] AXRole: AXCell
<nil>
combobox
Computed Role
combobox
ROLE_SYSTEM_COMBOBOX
STATE_SYSTEM_HASPOPUP
STATE_SYSTEM_COLLAPSED
if aria-expanded
is not "true"
UIA Control Type: Combobox
ATK/AT-SPI Role: ROLE_COMBO_BOX
STATE_EXPANDABLE
STATE_HAS_POPUP
AX API[Note 1] AXRole: AXComboBox
<nil>
complementary
Computed Role
complementary
IA2_ROLE_LANDMARK
xml-roles:complementary
UIA Control Type: Group
complementary
Custom
complementary
ATK/AT-SPI Role: ROLE_LANDMARK
xml-roles:complementary
AX API[Note 1] AXRole: AXGroup
AXLandmarkComplementary
contentinfo
Computed Role
contentinfo
IA2_ROLE_LANDMARK
xml-roles:contentinfo
UIA Control Type: Group
content information
Custom
content information
ATK/AT-SPI Role: ROLE_LANDMARK
xml-roles:contentinfo
AX API[Note 1] AXRole: AXGroup
AXLandmarkContentInfo
definition
Computed Role
definition
xml-roles:definition
UIA Control Type: Group
definition
ATK/AT-SPI Role: ROLE_DESCRIPTION_VALUE
xml-roles:definition
AX API[Note 1] AXRole: AXGroup
AXDefinition
deletion
Computed Role
deletion
IA2_ROLE_CONTENT_DELETION
UIA Control Type: Text
deletion
ATK/AT-SPI Role: ROLE_CONTENT_DELETION
xml-roles:deletion
AX API[Note 1] AXRole: AXGroup
AXDeleteStyleGroup
AXIsSuggestedDeletion = 1;
for all text contained in a deletion
ARIA Specification dialog
Computed Role
dialog
ROLE_SYSTEM_DIALOG
UIA Control Type: Pane
ATK/AT-SPI Role: ROLE_DIALOG
Window
AX API[Note 1] AXRole: AXGroup
AXApplicationDialog
directory
Computed Role
list
MSAA + IAccessible2 Role:ROLE_SYSTEM_LIST
UIA Control Type: List
ATK/AT-SPI Role: ROLE_LIST
AX API[Note 1] AXRole: AXList
AXContentList
document
Computed Role
document
ROLE_SYSTEM_DOCUMENT
STATE_SYSTEM_READONLY
UIA Control Type: Document
ATK/AT-SPI Role: ROLE_DOCUMENT_FRAME
AX API[Note 1] AXRole: AXGroup
AXDocument
emphasis
Computed Role
emphasis
IA2_ROLE_TEXT_FRAME
xml-roles:emphasis
UIA Control Type: Text
emphasis
ATK/AT-SPI Role: ROLE_STATIC
xml-roles:emphasis
AX API[Note 1] AXRole: AXGroup
AXEmphasisStyleGroup
feed
Computed Role
feed
ROLE_SYSTEM_GROUPING
xml-roles:feed
UIA Control Type: Group
feed
ATK/AT-SPI Role: ROLE_PANEL
xml-roles:feed
AX API[Note 1] AXRole: AXGroup
AXApplicationGroup
figure
Computed Role
figure
ROLE_SYSTEM_GROUPING
xml-roles:figure
UIA Control Type: Group
figure
ATK/AT-SPI Role: ROLE_PANEL
xml-roles:figure
AX API[Note 1] AXRole: AXGroup
<nil>
form
with an accessible name Computed Role
form
IA2_ROLE_FORM
xml-roles:form
UIA Control Type: Group
form
Form
ATK/AT-SPI Role: ROLE_LANDMARK
xml-roles:form
AX API[Note 1] AXRole: AXGroup
AXLandmarkForm
form
without an accessible name Computed Role
form
generic
Computed Role
generic
ROLE_SYSTEM_GROUPING
IA2_ROLE_SECTION
UIA Control Type: Group
ATK/AT-SPI Role: ROLE_SECTION
AXGroup
<nil>
grid
Computed Role
grid
ROLE_SYSTEM_TABLE
xml-roles:grid
IAccessibleTable2
IAccessible::accSelect()
IAccessible::get_accSelection()
UIA Control Type: DataGrid
Grid
Table
Selection
ATK/AT-SPI Role: ROLE_TABLE
xml-roles:grid
Table
Selection
Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return false
for all Selection
methods that provide a means to modify the selection.
AXTable
<nil>
gridcell
Computed Role
gridcell
ROLE_SYSTEM_CELL
IAccessibleTableCell
UIA Control Type: DataItem
item
SelectionItem
GridItem
TableItem
grid
ATK/AT-SPI Role: ROLE_TABLE_CELL
TableCell
AX API[Note 1] AXRole: AXCell
<nil>
group
Computed Role
group
ROLE_SYSTEM_GROUPING
UIA Control Type: Group
ATK/AT-SPI Role: ROLE_PANEL
AX API[Note 1] AXRole: AXGroup
AXApplicationGroup
heading
Computed Role
heading
IA2_ROLE_HEADING
xml-roles:heading
UIA Control Type: Text
heading
ATK/AT-SPI Role: ROLE_HEADING
AX API[Note 1] AXRole: AXHeading
<nil>
image
Computed Role
image
ROLE_SYSTEM_GRAPHIC
IAccessibleImage
UIA Control Type: Image
ATK/AT-SPI Role: ROLE_IMAGE
Image
AX API[Note 1] AXRole: AXImage
<nil>
img
Computed Role
image
ROLE_SYSTEM_GRAPHIC
IAccessibleImage
UIA Control Type: Image
ATK/AT-SPI Role: ROLE_IMAGE
Image
AX API[Note 1] AXRole: AXImage
<nil>
insertion
Computed Role
insertion
IA2_ROLE_CONTENT_INSERTION
UIA Control Type: Text
insertion
ATK/AT-SPI Role: ROLE_CONTENT_INSERTION
xml-roles:insertion
AX API[Note 1] AXRole: AXGroup
AXInsertStyleGroup
AXIsSuggestedInsertion = 1;
for all text contained in a insertion
ARIA Specification link
Computed Role
link
ROLE_SYSTEM_LINK
STATE_SYSTEM_LINKED
STATE_SYSTEM_LINKED
on its descendants
IAccessibleHypertext
UIA Control Type: HyperLink
Value
ATK/AT-SPI Role: ROLE_LINK
HyperlinkImpl
AX API[Note 1] AXRole: AXLink
<nil>
list
Computed Role
list
ROLE_SYSTEM_LIST
STATE_SYSTEM_READONLY
UIA Control Type: List
ATK/AT-SPI Role: ROLE_LIST
AX API[Note 1] AXRole: AXList
AXContentList
listbox
Computed Role
listbox
ROLE_SYSTEM_LIST
IAccessible::accSelect()
IAccessible::get_accSelection()
UIA Control Type: List
Selection
ATK/AT-SPI Role: ROLE_LIST_BOX
Selection
Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return false
for all Selection
methods that provide a means to modify the selection.
AXList
<nil>
listbox
Computed Role
listbox
ROLE_SYSTEM_LIST
IAccessible::accSelect()
IAccessible::get_accSelection()
UIA Control Type: List
Selection
ATK/AT-SPI Role: ROLE_MENU
Selection
Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return false
for all Selection
methods that provide a means to modify the selection.
AXList
<nil>
listitem
Computed Role
listitem
ROLE_SYSTEM_LISTITEM
STATE_SYSTEM_READONLY
UIA Control Type: ListItem
SelectionItem
list
ATK/AT-SPI Role: ROLE_LIST_ITEM
AX API[Note 1] AXRole: AXGroup
<nil>
log
Computed Role
log
xml-roles:log
container-live:polite
live:polite
container-live-role:log
UIA Control Type: Group
log
Polite (1)
ATK/AT-SPI Role: ROLE_LOG
xml-roles:log
container-live:polite
live:polite
container-live-role:log
AX API[Note 1] AXRole: AXGroup
AXApplicationLog
main
Computed Role
main
IA2_ROLE_LANDMARK
xml-roles:main
UIA Control Type: Group
main
Main
ATK/AT-SPI Role: ROLE_LANDMARK
xml-roles:main
AX API[Note 1] AXRole: AXGroup
AXLandmarkMain
mark
Computed Role
mark
ROLE_SYSTEM_GROUPING
IA2_ROLE_MARK
xml-roles:mark
UIA Control Type: Group
ATK/AT-SPI Role: ROLE_MARK
xml-roles:mark
AX API[Note 1] AXRole: AXGroup
highlight
AXHighlight = 1;
for all text contained in a mark
ARIA Specification marquee
Computed Role
marquee
ROLE_SYSTEM_ANIMATION
xml-roles:marquee
container-live:off
live:off
UIA Control Type: Group
marquee
Off (0)
ATK/AT-SPI Role: ROLE_MARQUEE
container-live:off
live:off
AX API[Note 1] AXRole: AXGroup
AXApplicationMarquee
math
Computed Role
math
ROLE_SYSTEM_EQUATION
UIA Control Type: Group
math
ATK/AT-SPI Role: ROLE_MATH
AX API[Note 1] AXRole: AXGroup
AXDocumentMath
meter
Computed Role
meter
IA2_ROLE_LEVEL_BAR
IAccessibleValue
UIA Control Type: ProgressBar
meter
RangeValue
ATK/AT-SPI Role: ROLE_LEVEL_BAR
Value
AX API[Note 1] AXRole: AXLevelIndicator
AXMeter
navigation
Computed Role
navigation
IA2_ROLE_LANDMARK
xml-roles:navigation
UIA Control Type: Group
navigation
Navigation
ATK/AT-SPI Role: ROLE_LANDMARK
xml-roles:navigation
AX API[Note 1] AXRole: AXGroup
AXLandmarkNavigation
none
Computed Role
none
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it as IA2_ROLE_TEXT_FRAME
. user agents SHOULD prune empty descendants from the accessibility tree.
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it using the text
pattern. user agents SHOULD prune empty descendants from the accessibility tree.
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it as ROLE_SECTION
. user agents SHOULD prune empty descendants from the accessibility tree.
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it as AXGroup
. user agents SHOULD prune empty descendants from the accessibility tree.
note
Computed Role
note
IA2_ROLE_NOTE
UIA Control Type: Group
note
ATK/AT-SPI Role: ROLE_COMMENT
AX API[Note 1] AXRole: AXGroup
AXDocumentNote
paragraph
Computed Role
paragraph
ROLE_SYSTEM_GROUPING
IA2_ROLE_PARAGRAPH
UIA Control Type: Text
ATK/AT-SPI Role: ROLE_PARAGRAPH
AX API[Note 1] AXRole: AXGroup
<nil>
presentation
Computed Role
none
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it as IA2_ROLE_TEXT_FRAME
. user agents SHOULD prune empty descendants from the accessibility tree.
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it using the text
pattern. user agents SHOULD prune empty descendants from the accessibility tree.
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it as ROLE_SECTION
. user agents SHOULD prune empty descendants from the accessibility tree.
For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the accessibility tree, expose it as AXGroup
. user agents SHOULD prune empty descendants from the accessibility tree.
progressbar
Computed Role
progressbar
ROLE_SYSTEM_PROGRESSBAR
STATE_SYSTEM_READONLY
IAccessibleValue
UIA Control Type: ProgressBar
RangeValue
if aria-valuenow
, aria-valuemax
, or aria-valuemin
is present ATK/AT-SPI Role: ROLE_PROGRESS_BAR
Value
Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return false
for all Value
methods that provide a means to modify the value.
AXProgressIndicator
<nil>
radiogroup
Computed Role
radiogroup
ROLE_SYSTEM_GROUPING
UIA Control Type: List
ATK/AT-SPI Role: ROLE_PANEL
AX API[Note 1] AXRole: AXRadioGroup
<nil>
region
with an accessible name Computed Role
region
IA2_ROLE_LANDMARK
xml-roles:region
UIA Control Type: Group
region
Custom
region
ATK/AT-SPI Role: ROLE_LANDMARK
xml-roles:region
AX API[Note 1] AXRole: AXGroup
AXLandmarkRegion
region
without an accessible name Computed Role
Use native host language role.
MSAA + IAccessible2 Do not expose the element as a landmark. Use the native host language role of the element instead. UIA Do not expose the element as a landmark. Use the native host language role of the element instead. ATK/AT-SPI Do not expose the element as a landmark. Use the native host language role of the element instead. AX API[Note 1] Do not expose the element as a landmark. Use the native host language role of the element instead. ARIA Specificationrow
not inside treegrid
Computed Role
row
ROLE_SYSTEM_ROW
UIA Control Type: DataItem
row
SelectionItem
ATK/AT-SPI Role: ROLE_TABLE_ROW
AX API[Note 1] AXRole: AXRow
<nil>
row
inside treegrid
Computed Role
row
ROLE_SYSTEM_OUTLINEITEM
UIA Control Type: DataItem
row
SelectionItem
ATK/AT-SPI Role: ROLE_TABLE_ROW
AX API[Note 1] AXRole: AXRow
<nil>
rowgroup
Computed Role
rowgroup
ROLE_SYSTEM_GROUPING
UIA Control Type: Group
ATK/AT-SPI Role: ROLE_PANEL
AX API[Note 1] Not mapped ARIA Specification scrollbar
Computed Role
scrollbar
ROLE_SYSTEM_SCROLLBAR
IAccessibleValue
UIA Control Type: ScrollBar
RangeValue
ATK/AT-SPI Role: ROLE_SCROLL_BAR
Value
Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return false
for all Value
methods that provide a means to modify the value.
AXScrollBar
<nil>
search
Computed Role
search
IA2_ROLE_LANDMARK
xml-roles:search
UIA Control Type: Group
search
Search
ATK/AT-SPI Role: ROLE_LANDMARK
xml-roles:search
AX API[Note 1] AXRole: AXGroup
AXLandmarkSearch
searchbox
Computed Role
searchbox
ROLE_SYSTEM_TEXT
text-input-type:search
UIA Control Type: Edit
search box
ATK/AT-SPI Role: ROLE_ENTRY
xml-roles:searchbox
text-input-type:search
EditableText
if aria-readonly
is not "true"
AX API[Note 1] AXRole: AXTextField
AXSearchField
separator
(non-focusable) Computed Role
seperator
ROLE_SYSTEM_SEPARATOR
UIA Control Type: Separator
ATK/AT-SPI Role: ROLE_SEPARATOR
AX API[Note 1] AXRole: AXSplitter
<nil>
separator
(focusable) Computed Role
seperator
ROLE_SYSTEM_SEPARATOR
IAccessibleValue
UIA Control Type: Thumb
RangeValue
ATK/AT-SPI Role: ROLE_SEPARATOR
Value
Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return false
for all Value
methods that provide a means to modify the value.
AXSplitter
<nil>
slider
Computed Role
slider
ROLE_SYSTEM_SLIDER
IAccessibleValue
UIA Control Type: Slider
RangeValue
ATK/AT-SPI Role: ROLE_SLIDER
Value
Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return false
for all Value
methods that provide a means to modify the value.
AXSlider
<nil>
spinbutton
Computed Role
spinbutton
ROLE_SYSTEM_SPINBUTTON
IAccessibleValue
UIA Control Type: Spinner
RangeValue
ATK/AT-SPI Role: ROLE_SPIN_BUTTON
Value
Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return false
for all Value
methods that provide a means to modify the value.
AXIncrementor
<nil>
status
Computed Role
status
ROLE_SYSTEM_STATUSBAR
container-live:polite
live:polite
container-live-role:status
UIA Control Type: Group
status
Polite (1)
ATK/AT-SPI Role: ROLE_STATUSBAR
container-live:polite
live:polite
container-live-role:status
AX API[Note 1] AXRole: AXGroup
AXApplicationStatus
strong
Computed Role
strong
IA2_ROLE_TEXT_FRAME
xml-roles:strong
UIA Control Type: Text
strong
ATK/AT-SPI Role: ROLE_STATIC
xml-roles:strong
AX API[Note 1] AXRole: AXGroup
AXStrongStyleGroup
subscript
Computed Role
subscript
ROLE_SYSTEM_GROUPING
IA2_ROLE_TEXT_FRAME
text-position:sub
UIA Control Type: Text
IsSubscript
attribute of the TextRange
Control Pattern implemented on the accessible object. ATK/AT-SPI Role: ROLE_SUBSCRIPT
AX API[Note 1] AXRole: AXGroup
AXSubscriptStyleGroup
suggestion
Computed Role
suggestion
IA2_ROLE_SUGGESTION
xml-roles:suggestion
UIA Control Type: Group
suggestion
ROLE_SUGGESTION
xml-roles:suggestion
AX API[Note 1] AXRole: AXGroup
AXIsSuggestion = 1;
for all text contained in a suggestion
ARIA Specification superscript
Computed Role
superscript
ROLE_SYSTEM_GROUPING
IA2_ROLE_TEXT_FRAME
text-position:super
UIA Control Type: Text
IsSuperscript
attribute of the TextRange
Control Pattern implemented on the accessible object. ATK/AT-SPI Role: ROLE_SUPERSCRIPT
AX API[Note 1] AXRole: AXGroup
AXSuperscriptStyleGroup
tab
Computed Role
tab
ROLE_SYSTEM_PAGETAB
STATE_SYSTEM_SELECTED
if focus is inside tabpanel
associated with aria-labelledby
UIA Control Type: TabItem
ATK/AT-SPI Role: ROLE_PAGE_TAB
STATE_SELECTED
if focus is inside tabpanel
associated with aria-labelledby
AX API[Note 1] AXRole: AXRadioButton
AXTabButton
table
Computed Role
table
ROLE_SYSTEM_TABLE
xml-roles:table
IAccessibleTable2
UIA Control Type: Table
Grid
Table
ATK/AT-SPI Role: ROLE_TABLE
xml-roles:table
Table
AX API[Note 1] AXRole: AXTable
<nil>
tablist
Computed Role
tablist
ROLE_SYSTEM_PAGETABLIST
IAccessible::accSelect()
IAccessible::get_accSelection()
UIA Control Type: Tab
Selection
ATK/AT-SPI Role: ROLE_PAGE_TAB_LIST
Selection
Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return false
for all Selection
methods that provide a means to modify the selection.
AXTabGroup
<nil>
tabpanel
Computed Role
tabpanel
ROLE_SYSTEM_PANE
or ROLE_SYSTEM_PROPERTYPAGE
UIA Control Type: Pane
ATK/AT-SPI Role: ROLE_SCROLL_PANE
AX API[Note 1] AXRole: AXGroup
AXTabPanel
term
Computed Role
term
IA2_ROLE_TEXT_FRAME
xml-roles:term
UIA Control Type: Text
term
ATK/AT-SPI Role: ROLE_DESCRIPTION_TERM
AX API[Note 1] AXRole: AXGroup
AXTerm
textbox
when aria-multiline
is false
Computed Role
textbox
ROLE_SYSTEM_TEXT
IA2_STATE_SINGLE_LINE
UIA Control Type: Edit
ATK/AT-SPI Role: ROLE_ENTRY
STATE_SINGLE_LINE
EditableText
if aria-readonly
is not "true"
AX API[Note 1] AXRole: AXTextField
<nil>
textbox
when aria-multiline
is true
Computed Role
textbox
ROLE_SYSTEM_TEXT
IA2_STATE_MULTI_LINE
UIA Control Type: Edit
ATK/AT-SPI Role: ROLE_ENTRY
STATE_MULTI_LINE
EditableText
if aria-readonly
is not "true"
AX API[Note 1] AXRole: AXTextArea
<nil>
time
Computed Role
time
ROLE_SYSTEM_GROUPING
xml-roles:time
UIA Control Type: Text
time
ROLE_STATIC
xml-roles:time
AX API[Note 1] AXRole: AXGroup
AXTimeGroup
timer
Computed Role
timer
xml-roles:timer
container-live:off
live:off
container-live-role:timer
UIA Control Type: Group
timer
Off (0)
ATK/AT-SPI Role: ROLE_TIMER
container-live:off
live:off
container-live-role:timer
AX API[Note 1] AXRole: AXGroup
AXApplicationTimer
toolbar
Computed Role
toolbar
ROLE_SYSTEM_TOOLBAR
UIA Control Type: ToolBar
ATK/AT-SPI Role: ROLE_TOOL_BAR
AX API[Note 1] AXRole: AXToolbar
<nil>
tooltip
Computed Role
tooltip
ROLE_SYSTEM_TOOLTIP
UIA Control Type: ToolTip
ATK/AT-SPI Role: ROLE_TOOL_TIP
AX API[Note 1] AXRole: AXGroup
AXUserInterfaceTooltip
tree
Computed Role
tree
ROLE_SYSTEM_OUTLINE
IAccessible::accSelect()
IAccessible::get_accSelection()
UIA Control Type: Tree
ATK/AT-SPI Role: ROLE_TREE
Selection
Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return false
for all Selection
methods that provide a means to modify the selection.
AXOutline
<nil>
treegrid
Computed Role
treegrid
ROLE_SYSTEM_OUTLINE
IAccessibleTable2
IAccessible::accSelect()
IAccessible::get_accSelection()
UIA Control Type: DataGrid
ATK/AT-SPI Role: ROLE_TREE_TABLE
Table
Selection
Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return false
for all Selection
methods that provide a means to modify the selection.
AXTable
<nil>
Note
[Note 1] User agent should return a user-presentable, localized string value for the AXRoleDescription.
Note
[Note 2] This specification does not currently contain guidance for when user agents should fire system alert events. Some guidance may be added to the specification at a later date but it will be a recommendation (SHOULD), not a requirement (MUST).
This section describes how to expose WAI-ARIA states and properties.
VISIBLE
/INVISIBLE
, SHOWING
/OFFSCREEN
, etc. This typically is done in the same way as for ordinary elements that do not have WAI-ARIA attributes present. The FOCUSABLE
/FOCUSED
states may be affected by aria-activedescendant
.aria-labelledby
attribute but the native HTML semantics must still be exposed.aria-checked="true"
is specified on <div role="grid">
, it should not be exposed in MSAA implementations as STATE_SYSTEM_CHECKED
.none
or presentation
is applied to an element, the user agent MUST implement the rules for the none
or the presentation
role defined in Accessible Rich Internet Applications (WAI-ARIA) 1.2 [WAI-ARIA-1.2]].There are a number of occurrences in the table where a given state or property is declared "Not mapped". In some cases, this occurs for the default value of the state/property, and is equivalent to its absence. User agents might find it quicker to map the value than check to see if it is the default. For computational efficiency, user agents MAY expose the state or property value if doing so is equivalent to not mapping it. These cases are marked with an asterisk.
In other cases, it is mandatory that the state/property not be mapped, since exposing it implies a related affordance. An example is aria-grabbed
. Its absence not only indicates that the accessible object is not grabbed, but further defines it as not grab-able. These cases are marked as "Not mapped" without an asterisk.
aria-autocomplete
=inline
, list
, or both
MSAA + IAccessible2 Object Attribute: autocomplete:<value>
IA2_STATE_SUPPORTS_AUTOCOMPLETION
UIA Not mapped ATK/AT-SPI Object Attribute: autocomplete:<value>
STATE_SUPPORTS_AUTOCOMPLETION
AX API Not mapped ARIA Specification aria-braillelabel
MSAA + IAccessible2 Object Attribute: braillelabel:<value>
UIA Property: AriaProperties.braillelabel
: <value>
ATK/AT-SPI Object Attribute: braillelabel:<value>
AX API Property: AXBrailleLabel ARIA Specification aria-brailleroledescription
MSAA + IAccessible2 Object Attribute: brailleroledescription:<value>
UIA Property: AriaProperties.brailleroledescription
: <value>
ATK/AT-SPI Object Attribute: brailleroledescription:<value>
AX API Property: AXBrailleRoleDescription ARIA Specification aria-busy
=true
MSAA + IAccessible2 State: STATE_SYSTEM_BUSY
UIA Property: AriaProperties.busy
: true
ATK/AT-SPI State: STATE_BUSY
AX API Property: AXElementBusy
: YES
ARIA Specification aria-busy
=false
MSAA + IAccessible2 State: STATE_SYSTEM_BUSY
not exposed UIA Property: AriaProperties.busy
: false
ATK/AT-SPI State: STATE_BUSY
not exposed AX API Property: AXElementBusy
: NO
ARIA Specification aria-checked
=true
MSAA + IAccessible2 State: STATE_SYSTEM_CHECKED
checkable:true
UIA Property: Toggle.ToggleState
: On (1)
SelectionItem.IsSelected
: True
for radio
and menuitemradio
ATK/AT-SPI State: STATE_CHECKABLE
STATE_CHECKED
AX API Property: AXValue
: 1
AXMenuItemMarkChar
: ✓
for menuitemcheckbox
and menuitemradio
ARIA Specification aria-checked
=false
MSAA + IAccessible2 State: STATE_SYSTEM_CHECKED
not exposed
checkable:true
UIA Property: Toggle.ToggleState
: Off (0)
SelectionItem.IsSelected
: False
for radio
and menuitemradio
ATK/AT-SPI State: STATE_CHECKABLE
STATE_CHECKED
not exposed AX API Property: AXValue
: 0
AXMenuItemMarkChar
: <nil>
for menuitemcheckbox
and menuitemradio
ARIA Specification aria-checked
=mixed
MSAA + IAccessible2 State: STATE_SYSTEM_MIXED
checkable:true
UIA Property: Toggle.ToggleState
: Indeterminate (2)
ATK/AT-SPI State: STATE_INDETERMINATE
STATE_CHECKABLE
STATE_CHECKED
not exposed AX API Property: AXValue
: 2
AXMenuItemMarkChar
: <nil>
for menuitemcheckbox
and menuitemradio
ARIA Specification aria-colcount
MSAA + IAccessible2 Object Attribute: colcount:<value>
IAccessible2::groupPosition()
: similarItemsInGroup=<value>
on cells and headers UIA Property: Grid.ColumnCount
: <value>
ATK/AT-SPI Object Attribute: colcount
should contain the author-provided value.
atk_table_get_n_columns()
should return the actual number of columns. AX API Property: AXARIAColumnCount
: <value>
ARIA Specification aria-colindex
MSAA + IAccessible2 Object Attribute: colindex:<value>
IAccessible2::groupPosition()
: positionInGroup=<value>
on cells and headers UIA Property: GridItem.Column
: <value>
(zero-based) ATK/AT-SPI Object Attribute: colindex
should contain the author-provided value.
atk_table_cell_get_position()
should return the actual (zero-based) column index. AX API Property: AXARIAColumnIndex
: <value>
ARIA Specification aria-colindextext
MSAA + IAccessible2 Object Attribute: colindextext:<value>
UIA Property: AriaProperties.colindextext
: <value>
ATK/AT-SPI Object Attribute: colindextext:<value>
AX API Property: AXColumnIndexDescription
: <value>
ARIA Specification aria-colspan
MSAA + IAccessible2 Object Attribute: colspan:<value>
IAccessibleTableCell::columnExtent()
: <value>
UIA Property: GridItem.ColumnSpan
: <value>
ATK/AT-SPI Object Attribute: colspan
should contain the author-provided value.
atk_table_cell_get_row_column_span()
should return the actual column span. AX API Property: AXColumnIndexRange.length
: <value>
ARIA Specification aria-controls
MSAA + IAccessible2 Relation: IA2_RELATION_CONTROLLER_FOR
points to accessible nodes matching IDREFs
IA2_RELATION_CONTROLLED_BY
points to element
ControllerFor
: pointers to accessible nodes matching IDREFs ATK/AT-SPI Relation: RELATION_CONTROLLER_FOR
points to accessible nodes matching IDREFs
RELATION_CONTROLLED_BY
points to element
AXLinkedUIElements
: pointers to accessible nodes matching IDREFs ARIA Specification aria-current
with non-false
allowed value MSAA + IAccessible2 Object Attribute: current:<value>
UIA Property: AriaProperties.current
: <value>
ATK/AT-SPI Object Attribute: current:<value>
STATE_ACTIVE
AX API Property: AXARIACurrent
: <value>
ARIA Specification aria-current
with unrecognized value MSAA + IAccessible2 Object Attribute: current:true
UIA Property: AriaProperties.current
: true
ATK/AT-SPI Object Attribute: current:true
STATE_ACTIVE
AX API Property: AXARIACurrent
: true
ARIA Specification aria-describedby
MSAA + IAccessible2 Property: accDescription
: <value>
IA2_RELATION_DESCRIBED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
IA2_RELATION_DESCRIPTION_FOR
points to element
FullDescription
: <value>
Description
: <value>
RELATION_DESCRIBED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
RELATION_DESCRIPTION_FOR
points to element
AXCustomContent
object with { label: "description" }
and `value
` set to the description string.
aria-description
MSAA + IAccessible2 Property: accDescription
: <value>
FullDescription
: <value>
Description
: <value>
AXCustomContent
object with { label: "description" }
and `value
` set to the description string.
aria-details
MSAA + IAccessible2 Relation: IA2_RELATION_DETAILS
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
IA2_RELATION_DETAILS_FOR
points to element
DescribedBy
: points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree ATK/AT-SPI Relation: RELATION_DETAILS
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
RELATION_DETAILS_FOR
points to element
aria-disabled
=true
MSAA + IAccessible2 State: STATE_SYSTEM_UNAVAILABLE
STATE_SYSTEM_UNAVAILABLE
on all descendants with STATE_SYSTEM_FOCUSABLE
UIA Property: IsEnabled
: false
ATK/AT-SPI State: STATE_ENABLED
not exposed AX API Property: AXEnabled
: NO
ARIA Specification aria-disabled
=false
MSAA + IAccessible2 State: STATE_SYSTEM_UNAVAILABLE
not exposed UIA Property: IsEnabled
: true
ATK/AT-SPI State: STATE_ENABLED
AX API Property: AXEnabled
: YES
ARIA Specification aria-dropeffect
=none
MSAA + IAccessible2 Object Attribute: dropeffect:none
if there are no other valid tokens
dropeffect:none
if there are no other valid tokens
aria-errormessage
MSAA + IAccessible2 Relation: IA2_RELATION_ERROR
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
IA2_RELATION_ERROR_FOR
points to element
ControllerFor
: pointer to the target accessible object ATK/AT-SPI Relation: RELATION_ERROR_MESSAGE
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
RELATION_ERROR_FOR
points to element
AXErrorMessageElements
: pointers to accessible nodes matching IDREFs ARIA Specification aria-expanded
=true
MSAA + IAccessible2 State: STATE_SYSTEM_EXPANDED
UIA Property: ExpandCollapse.ExpandCollapseState
: Expanded
ATK/AT-SPI State: STATE_EXPANDABLE
STATE_EXPANDED
AX API Property: AXExpanded
: YES
ARIA Specification aria-expanded
=false
MSAA + IAccessible2 State: STATE_SYSTEM_COLLAPSED
UIA Property: ExpandCollapse.ExpandCollapseState
: Collapsed
ATK/AT-SPI State: STATE_EXPANDABLE
STATE_EXPANDED
not exposed AX API Property: AXExpanded
: NO
ARIA Specification aria-flowto
MSAA + IAccessible2 Relation: IA2_RELATION_FLOW_TO
points to accessible nodes matching IDREFs
IA2_RELATION_FLOW_FROM
points to element
FlowsTo
: pointers to accessible nodes matching IDREFs ATK/AT-SPI Relation: RELATION_FLOWS_TO
points to accessible nodes matching IDREFs
RELATION_FLOWS_FROM
points to element
AXLinkedUIElements
: pointers to accessible nodes matching IDREFs ARIA Specification aria-grabbed
=true
MSAA + IAccessible2 Object Attribute: grabbed:true
UIA Property: AriaProperties.grabbed
: true
ATK/AT-SPI Object Attribute: grabbed:true
AX API Property: AXGrabbed
: YES
ARIA Specification aria-grabbed
=false
MSAA + IAccessible2 Object Attribute: grabbed:false
UIA Property: AriaProperties.grabbed
: false
ATK/AT-SPI Object Attribute: grabbed:false
AX API Property: AXGrabbed
: NO
ARIA Specification aria-invalid
=true
MSAA + IAccessible2 State: IA2_STATE_INVALID_ENTRY
invalid:true
UIA Property: IsDataValidForForm
: false
ATK/AT-SPI State: STATE_INVALID_ENTRY
invalid:true
AX API Property: AXInvalid
: true
ARIA Specification aria-invalid
=false
MSAA + IAccessible2 State: IA2_STATE_INVALID_ENTRY
not exposed UIA Property: IsDataValidForForm
: true
ATK/AT-SPI State: STATE_INVALID_ENTRY
not exposed AX API Property: AXInvalid
: false
ARIA Specification aria-invalid
=spelling
or grammar
MSAA + IAccessible2 State: IA2_STATE_INVALID_ENTRY
invalid:<value>
UIA Property: IsDataValidForForm
: <value>
ATK/AT-SPI State: STATE_INVALID_ENTRY
invalid:<value>
AX API Property: AXInvalid
: <value>
ARIA Specification aria-invalid
with unrecognized value MSAA + IAccessible2 State: IA2_STATE_INVALID_ENTRY
invalid:true
UIA Property: IsDataValidForForm
: false
ATK/AT-SPI State: STATE_INVALID_ENTRY
invalid:true
AX API Property: AXInvalid
: true
ARIA Specification aria-keyshortcuts
MSAA + IAccessible2 Property: accKeyboardShortcut
: <value>
UIA Property: AcceleratorKey
: <value>
ATK/AT-SPI Object Attribute: keyshortcuts:<value>
AX API Property: AXKeyShortcutsValue
: <value>
ARIA Specification aria-labelledby
MSAA + IAccessible2 Property: accName
: <value>
IA2_RELATION_LABELLED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
IA2_RELATION_LABEL_FOR
points to element
Name
: <value>
LabeledBy
: points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Name
: <value>
RELATION_LABELLED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
RELATION_LABEL_FOR
points to element
AXTitle
: <value>
AXTitleUIElement
points to accessible node matching IDREF, if there is a single referenced element that is in the accessibility tree
aria-level
on non-heading
MSAA + IAccessible2 Object Attribute: level:<value>
IAccessible2::groupPosition()
: groupLevel=<value>
on roles that support aria-posinset
and aria-setsize
groupPosition()
UIA Property: AriaProperties.level
: <value>
ATK/AT-SPI Object Attribute: level:<value>
AX API Property: AXDisclosureLevel
: <value>
(zero-based), when used on an outline row (like a treeitem
or group
) ARIA Specification aria-level
on heading
MSAA + IAccessible2 Object Attribute: level:<value>
UIA Property: AriaProperties.level
: <value>
StyleId_Heading
: <value>
ATK/AT-SPI Object Attribute: level:<value>
AX API Property: AXValue
: <value>
ARIA Specification aria-live
=off
MSAA + IAccessible2 Object Attribute: live:off
container-live:off
container-live:off
on all descendants UIA Property: LiveSetting
: "off"
ATK/AT-SPI Object Attribute: live:off
container-live:off
container-live:off
on all descendants
AXARIALive
: "off"
ARIA Specification aria-modal
=true
MSAA + IAccessible2 State: IA2_STATE_MODAL
UIA Property: Window.IsModal
: true
STATE_MODAL
AX API Prune the accessibility tree such that the background content is no longer exposed. No specific property is set on the accessible object that corresponds to the element with aria-modal="true"
. Only the tree whose root is that modal accessible object is exposed. ARIA Specification aria-modal
=false
MSAA + IAccessible2 State: IA2_STATE_MODAL
not exposed UIA Property: Window.IsModal
: false
STATE_MODAL
not exposed AX API Grow the accessibility tree such that the background content is exposed. No specific property is set on the accessible object that corresponds to the element with aria-modal="false"
. ARIA Specification aria-multiline
=true
MSAA + IAccessible2 State: IA2_STATE_MULTI_LINE
IA2_STATE_SINGLE_LINE
not exposed UIA Property: AriaProperties.multiline
: true
ATK/AT-SPI State: STATE_MULTI_LINE
STATE_SINGLE_LINE
not exposed AX API Not mapped
textbox
in the Role Mapping Tables ARIA Specification aria-multiline
=false
MSAA + IAccessible2 State: IA2_STATE_SINGLE_LINE
IA2_STATE_MULTI_LINE
not exposed UIA Not mapped ATK/AT-SPI State: STATE_SINGLE_LINE
STATE_MULTI_LINE
not exposed AX API Not mapped
textbox
in the Role Mapping Tables ARIA Specification aria-multiselectable
=true
MSAA + IAccessible2 State: STATE_SYSTEM_MULTISELECTABLE
STATE_SYSTEM_EXTSELECTABLE
Selection.CanSelectMultiple
: true
STATE_MULTISELECTABLE
AXIsMultiSelectable
: YES
aria-multiselectable
=false
MSAA + IAccessible2 State: STATE_SYSTEM_MULTISELECTABLE
not exposed
STATE_SYSTEM_EXTSELECTABLE
not exposed
STATE_MULTISELECTABLE
not exposed AX API Not mapped* ARIA Specification aria-orientation
=horizontal
MSAA + IAccessible2 State: IA2_STATE_HORIZONTAL
IA2_STATE_VERTICAL
not exposed UIA Property: Orientation
: horizontal
ATK/AT-SPI State: STATE_HORIZONTAL
STATE_VERTICAL
not exposed AX API Property: AXOrientation
: AXHorizontalOrientation
ARIA Specification aria-orientation
=vertical
MSAA + IAccessible2 State: IA2_STATE_VERTICAL
IA2_STATE_HORIZONTAL
not exposed UIA Property: Orientation
: vertical
ATK/AT-SPI State: STATE_VERTICAL
STATE_HORIZONTAL
not exposed AX API Property: AXOrientation
: AXVerticalOrientation
ARIA Specification aria-orientation
is undefined MSAA + IAccessible2 Not mapped* UIA Not mapped* ATK/AT-SPI State: STATE_VERTICAL
not exposed
STATE_HORIZONTAL
not exposed AX API Property: AXOrientation
: AXUnknownOrientation
ARIA Specification aria-owns
MSAA + IAccessible2
User agents MAY expose the elements that are referenced by this property as children of the current element. In which case, if multiple aria-owns
relationships are found, use only the first one. If the accessibility tree is not modified, expose as:
IA2_RELATION_NODE_PARENT_OF
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
IA2_RELATION_NODE_CHILD_OF
points to element
aria-owns
relationships are found, use only the first one. ATK/AT-SPI
User agents MAY expose the elements that are referenced by this property as children of the current element. In which case, if multiple aria-owns
relationships are found, use only the first one. If the accessibility tree is not modified, expose as:
RELATION_NODE_PARENT_OF
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
RELATION_NODE_CHILD_OF
points to element
AXOwns
: pointers to accessible nodes matching IDREFs ARIA Specification aria-placeholder
MSAA + IAccessible2 Object Attribute: placeholder-text:<value>
UIA Property: HelpText
: <value>
ATK/AT-SPI Object Attribute: placeholder-text:<value>
AX API Property: AXPlaceholderValue
: <value>
ARIA Specification aria-readonly
=true
MSAA + IAccessible2 State: STATE_SYSTEM_READONLY
UIA Property: Value.IsReadOnly
: true
, if the element implements IValueProvider
.
RangeValue.IsReadOnly
: true
, if the element implements IRangeValueProvider
.
AriaProperties.readonly
: true
ATK/AT-SPI State: STATE_READ_ONLY
STATE_EDITABLE
not exposed on text input roles
STATE_CHECKABLE
not exposed on roles supporting aria-checked
STATE_CHECKABLE
not exposed on radio descendants when used on a radiogroup
AX API Method: AXUIElementIsAttributeSettable(AXValue)
: NO
ARIA Specification aria-readonly
=false
MSAA + IAccessible2 State: STATE_SYSTEM_READONLY
not exposed
IA2_STATE_EDITABLE
UIA Property: Value.IsReadOnly
: false
, if the element implements IValueProvider
.
RangeValue.IsReadOnly
: false
, if the element implements IRangeValueProvider
.
AriaProperties.readonly
: false
ATK/AT-SPI State: STATE_READ_ONLY
not exposed AX API Method: AXUIElementIsAttributeSettable(AXValue)
: YES
ARIA Specification aria-readonly
is unspecified on gridcell
MSAA + IAccessible2 The gridcell
MUST inherit any author-provided value for aria-readonly
from the containing grid
or treegrid
. Expose the inherited value on the gridcell
as described for aria-readonly="true"
and aria-readonly="false"
. UIA The gridcell
MUST inherit any author-provided value for aria-readonly
from the containing grid
or treegrid
. Expose the inherited value on the gridcell
as described for aria-readonly="true"
and aria-readonly="false"
. ATK/AT-SPI The gridcell
MUST inherit any author-provided value for aria-readonly
from the containing grid
or treegrid
. Expose the inherited value on the gridcell
as described for aria-readonly="true"
and aria-readonly="false"
. AX API The gridcell
MUST inherit any author-provided value for aria-readonly
from the containing grid
or treegrid
. Expose the inherited value on the gridcell
as described for aria-readonly="true"
and aria-readonly="false"
. ARIA Specification aria-required
=true
MSAA + IAccessible2 State: IA2_STATE_REQUIRED
UIA Property: IsRequiredForForm
: true
ATK/AT-SPI State: STATE_REQUIRED
AX API Property: AXRequired
: YES
ARIA Specification aria-roledescription
MSAA + IAccessible2 Method: localizedExtendedRole()
: <value>
UIA Localized Control Type: <value>
ATK/AT-SPI Object Attribute: roledescription:<value>
AX API Property: AXRoleDescription
: <value>
ARIA Specification aria-roledescription
is undefined or the empty string MSAA + IAccessible2 Not mapped UIA Localized Control Type is defined as that specified for the role of the element: based on the explicit role if the role attribute is provided; otherwise, based on the implicit role for the host language. ATK/AT-SPI Not mapped AX API AXRoleDescription is defined as that specified for the role of the element: based on the explicit role if the role attribute is provided; otherwise, based on the implicit role for the host language. ARIA Specification aria-rowcount
MSAA + IAccessible2 Object Attribute: rowcount:<value>
IAccessible2::groupPosition()
: similarItemsInGroup=<value>
on rows UIA Property: Grid.RowCount
: <value>
ATK/AT-SPI Object Attribute: rowcount
should contain the author-provided value.
atk_table_get_n_rows()
should return the actual number of rows. AX API Property: AXARIARowCount
: <value>
ARIA Specification aria-rowindex
MSAA + IAccessible2 Object Attribute: rowindex:<value>
IAccessible2::groupPosition()
: positionInGroup=<value>
on rows UIA Property: GridItem.Row
: <value>
(zero-based) ATK/AT-SPI Object Attribute: rowindex
should contain the author-provided value.
atk_table_cell_get_position()
should return the actual (zero-based) row index. AX API Property: AXARIARowIndex
: <value>
ARIA Specification aria-rowindextext
MSAA + IAccessible2 Object Attribute: rowindextext:<value>
UIA Property: AriaProperties.rowindextext
: <value>
ATK/AT-SPI Object Attribute: rowindextext:<value>
AX API Property: AXRowIndexDescription
: <value>
ARIA Specification aria-rowspan
MSAA + IAccessible2 Object Attribute: rowspan:<value>
IAccessibleTableCell::rowExtent()
: column=<value>
UIA Property: GridItem.RowSpan
: <value>
ATK/AT-SPI Object Attribute: rowspan
should contain the author-provided value.
atk_table_cell_get_row_column_span()
should return the actual row span. AX API Property: AXRowIndexRange.length
: <value>
ARIA Specification aria-selected
=true
MSAA + IAccessible2 State: STATE_SYSTEM_SELECTABLE
STATE_SYSTEM_SELECTED
SelectionItem.IsSelected
: true
ATK/AT-SPI State: STATE_SELECTABLE
STATE_SELECTED
AXSelected
: YES
ARIA Specification aria-selected
=false
MSAA + IAccessible2 State: STATE_SYSTEM_SELECTABLE
STATE_SYSTEM_SELECTED
not exposed
SelectionItem.IsSelected
: false
ATK/AT-SPI State: STATE_SELECTABLE
STATE_SELECTED
not exposed
AXSelected
: NO
ARIA Specification aria-setsize
MSAA + IAccessible2 Object Attribute: setsize:<value>
AriaProperties.setsize
: <value>
If the author-provided value of aria-setsize
is -1
, the exposed value should be based on the number of objects in the DOM.
setsize:<value>
STATE_INDETERMINATE
if the author-provided value is -1
AXARIASetSize
: <value>
aria-sort
=ascending
MSAA + IAccessible2 Object Attribute: sort:ascending
UIA Property: AriaProperties.sort
: ascending
ItemStatus
: ascending
if the element maps to HeaderItem
Control Type ATK/AT-SPI Object Attribute: sort:ascending
AX API Property: AXSortDirection
: AXAscendingSortDirection
ARIA Specification aria-sort
=descending
MSAA + IAccessible2 Object Attribute: sort:descending
UIA Property: AriaProperties.sort
: descending
ItemStatus
: descending
if the element maps to HeaderItem
Control Type ATK/AT-SPI Object Attribute: sort:descending
AX API Property: AXSortDirection
: AXDescendingSortDirection
ARIA Specification aria-sort
=other
MSAA + IAccessible2 Object Attribute: sort:other
UIA Property: AriaProperties.sort
: other
ItemStatus
: other
if the element maps to HeaderItem
Control Type ATK/AT-SPI Object Attribute: sort:other
AX API Property: AXSortDirection
: AXUnknownSortDirection
ARIA Specification aria-sort
=none
MSAA + IAccessible2 Object Attribute: sort:none
, if the value is not unspecified UIA Not mapped* ATK/AT-SPI Object Attribute: sort:none
, if the value is not unspecified AX API Not mapped*
For information on how to compute an accessible name or accessible description, see the section titled Accessible Name and Description Computation of the Accessible Name and Description Computation specification.
Often in a GUI, there are relationships between the widgets that can be exposed programmatically to assistive technology. WAI-ARIA provides several relationship properties which are globally applicable to any element: aria-controls
, aria-describedby
, aria-flowto
, aria-labelledby
, aria-owns
, aria-posinset
, and aria-setsize
. Therefore, it is not important to check the role before computing them. User agents can simply map these relations to accessibility APIs as defined in the section titled State and Property Mapping.
A reverse relation exists when an element's ID is referenced by a property in another element. For APIs that support reverse relations, user agents MUST use the mapping defined in the State and Property Mapping Tables when an element's ID is referenced by a relation property of another element and the referenced element is in the accessibility tree. All WAI-ARIA references must point to an element that is exposed as an accessible object in the accessibility tree. When the referenced object is not exposed in the accessibility tree (e.g. because it is hidden), the reference is null. aria-labelledby
and aria-describedby
have an additional feature, which allows them to pull a flattened string from the referenced element to populate the name or description fields of the accessibility API. This feature is described in the Name and Description section.
Special case: If both aria-labelledby
and HTML <label for= … >
are used, the user agent MUST use the WAI-ARIA relation and MUST ignore the HTML label relation.
Note that aria-describedby
may reference structured or interactive information where users would want to be able to navigate to different sections of content. User agents MAY provide a way for the user to navigate to structured information referenced by aria-describedby
and assistive technology SHOULD provide such a method.
In addition to the explicit relations defined by WAI-ARIA properties, reverse relations are implied in two other situations: elements with role="treeitem"
where the ancestor does not have an aria-owns
property and descendants of elements with aria-atomic
property.
In the case of role="treeitem"
, when aria-owns
is not used, user agents SHOULD do the following where reverse relations are supported by the API:
treeitem
uses aria-level
, then walk backwards in the tree until a treeitem
is found with a lower aria-level
, then set RELATION_NODE_CHILD_OF
to that element. If the top of the tree is reached, then set RELATION_NODE_CHILD_OF
to the tree element itself.treeitem
has a role of group
, then walk backwards from the group
until an element with a role of treeitem
is found, then set RELATION_NODE_CHILD_OF
to that element.In the case of aria-atomic
, where reverse relations are supported by the API:
aria-atomic
="true"
. If found, user agents SHOULD set the RELATION_MEMBER_OF
relation to point to the ancestor that sets aria-atomic
="true"
.aria-level
, aria-posinset
, and aria-setsize
are all 1-based. When the property is not present or is "0", it indicates the property is not computed or not supported. If any of these properties are specified by the author as either "0" or a negative number, user agents SHOULD use "1" instead.
If aria-level
is not provided or inherited for an element of role treeitem
or comment
, user agents implementing IAccessible2 or ATK/AT-SPI MUST compute it by following the explicit or computed RELATION_NODE_CHILD_OF
relations.
If aria-posinset
and aria-setsize
are not provided, user agents MUST compute them as follows:
role="treeitem"
and role="comment"
, walk the tree backward and forward until the explicit or computed level becomes less than the current item's level. Count items only if they are at the same level as the current item.aria-posinset
and aria-setsize
, process the parent (DOM parent or parent defined by aria-owns
), counting items that have the same role.aria-posinset
, include the current item and other group items if they are before the current item in the DOM. For aria-setsize
, add to that the number of items in the same group after the current item in the DOM.If the author provides one or more of aria-setsize
and aria-posinset
, it is the author's responsibility to supply them for all elements in the set. User agent correction of missing values in this case is not defined.
MSAA/IAccessible2 API mappings involve an additional function, groupPosition()
[IAccessible2], when aria-level
, aria-posinset
, and/or aria-setsize
are present on an element, or are computed by the user agent. When this occurs:
aria-level
is exposed in the groupLevel
parameter of groupPosition()
,aria-setsize
is exposed in the similarItemsInGroup
parameter, andaria-posinset
is exposed in the positionInGroup
parameter.As part of mapping roles to accessible objects as defined in Role Mapping, users agents expose a default action on the object.
DoDefaultAction
on an accessible object, the user agent SHOULD simulate a click on the DOM element which is mapped to that accessible object.IAccessibleAction
on an accessible object, the user agent SHOULD simulate a click on the DOM element which is mapped to that accessible object.AXPress
action on an accessible object, the user agent SHOULD simulate a click on the DOM element which is mapped to that accessible object.Note
Authors will need to create handlers for those click events that update WAI-ARIA states and properties in the DOM accordingly, so that those updated states can be populated by the user agent in the Accessibility API.
User agents fire events for user actions, WAI-ARIA state changes, changes to document content or node visibility, changes in selection and operation of menus as defined in the following sections.
User agents MUST notify assistive technology of state changes as defined in the table below, SHOULD notify assistive technology of property changes if the accessibility API defines a change event for the property, and SHOULD NOT notify assistive technology of property changes if the accessibility API does not define a change event for the property. For example, IAccessible2 defines an event to be used when aria-activedescendant
changes. WAI-ARIA properties that are expected to change include aria-activedescendant
, aria-valuenow
, and aria-valuetext
.
Note
In some APIs, AT will only be notified of events to which it has subscribed.
For simplicity and performance the user agent MAY trim out change events for state or property changes that assistive technologies typically ignore, such as events that are happening in a window that does not currently have focus.
Note
Translators: For label text associated with the following table and its toggle buttons, see the mappingTableLabels
object in the <head>
section of this document.
aria-busy
(state) MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Property: AriaProperties
object:state-changed:busy
AX API Notification AXElementBusyChanged
ARIA Specification aria-checked
(state) MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Properties: AriaProperties
, ToggleState
as part of toggle
pattern
object:state-changed:checked
AX API Notification AXValueChanged
ARIA Specification aria-current
(state) MSAA + IAccessible2 event IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
UIA event PropertyChangedEvent
Property: AriaProperties
object:state-changed:active
AX API Notification AXCurrentStateChanged
ARIA Specification aria-disabled
(state) MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Properties: AriaProperties
, IsEnabled
object:state-changed:enabled
and object:state-changed:sensitive
AX API Notification AXDisabledStateChanged
ARIA Specification aria-describedby
MSAA + IAccessible2 event EVENT_OBJECT_DESCRIPTIONCHANGE
UIA event PropertyChangedEvent
Properties: DescribedBy
object:property-change:accessible-description
AX API Notification AXDescribedByChanged
ARIA Specification aria-dropeffect
(property, deprecated) MSAA + IAccessible2 event IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
UIA event PropertyChangedEvent
Property: AriaProperties
object:property-change
AX API Notification AXDropEffectChanged
ARIA Specification aria-expanded
(state) MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Properties: AriaProperties
, ExpandCollapseState
as part of the ExpandCollapse
pattern
object:state-changed:expanded
AX API Notification AXRowExpanded
,
AXRowCollapsed
,
AXRowCountChanged
ARIA Specification aria-grabbed
(state, deprecated) MSAA + IAccessible2 event
EVENT_OBJECT_SELECTION
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
PropertyChangedEvent
Property: AriaProperties
object:property-change
AX API Notification AXGrabbedStateChanged
ARIA Specification aria-hidden
(state) MSAA + IAccessible2 event IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
UIA event StructureChangedEvent
PropertyChangedEvent
Property: AriaProperties
object:property-change
AX API Notification AXUIElementDestroyed
,
AXUIElementCreated
ARIA Specification aria-invalid
(state) MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Properties: AriaProperties
, IsDataValidForForm
object:state-changed:invalid_entry
AX API Notification AXInvalidStatusChanged
ARIA Specification aria-label
and aria-labelledby
MSAA + IAccessible2 event EVENT_OBJECT_NAMECHANGE
UIA event PropertyChangedEvent
Property for aria-label
: AriaProperties
Property for aria-labelledby
: LabeledBy
object:property-change:accessible-name
AX API Notification AXLabelCreated
ARIA Specification aria-pressed
(state) MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Properties: AriaProperties
, ToggleState
as part of toggle
pattern
object:state-changed:pressed
AX API Notification AXPressedStateChanged
ARIA Specification aria-readonly
MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Property: AriaProperties
object:state-changed:readonly
AX API Notification AXReadOnlyStatusChanged
ARIA Specification aria-required
MSAA + IAccessible2 event EVENT_OBJECT_STATECHANGE
UIA event PropertyChangedEvent
Properties: AriaProperties
, IsRequiredForForm
object:state-changed:required
AX API Notification AXRequiredStatusChanged
ARIA Specification aria-selected
(state) MSAA + IAccessible2 event See section Selection for details. UIA event See section Selection for details. ATK/AT-SPI event See section Selection for details. AX API Notification See section Selection for details. ARIA Specification aria-valuenow
MSAA + IAccessible2 event EVENT_OBJECT_VALUECHANGE
UIA event PropertyChangedEvent
Properties: AriaProperties
, also RangeValueValue
if element is mapped with RangeValue
Control Pattern
object:property-change:accessible-value
AX API Notification AXValueChanged
ARIA Specification aria-valuetext
MSAA + IAccessible2 event EVENT_OBJECT_VALUECHANGE
UIA event PropertyChangedEvent
Property: AriaProperties
object:property-change:accessible-value
AX API Notification AXValueChanged
Processing document changes is important regardless of WAI-ARIA. The events described in the table below are used by user agents to inform AT of changes to the DOM via the accessibility tree. For the purposes of conformance with this standard, user agents MUST implement the behavior described in this section whenever WAI-ARIA attributes are applied to dynamic content on a Web page.
Table of document change scenarios and events to be fired in each API Scenario MSAA + IAccessible2 event UIA event ATK/AT-SPI event AX API Notification When text is removedIA2_EVENT_TEXT_REMOVED
EVENT_OBJECT_LIVEREGIONCHANGED
text_changed::delete
If in a live region, AXLiveRegionChanged
.
aria-errormessage
, AXValidationErrorChanged
. When text is inserted IA2_EVENT_TEXT_INSERTED
EVENT_OBJECT_LIVEREGIONCHANGED
text_changed::insert
If in a live region, AXLiveRegionChanged
.
aria-errormessage
, AXValidationErrorChanged
. When text is changed IA2_EVENT_TEXT_REMOVE
and IA2_EVENT_TEXT_INSERTED
EVENT_OBJECT_LIVEREGIONCHANGED
text_changed::delete
and text_changed::insert
If in a live region, AXLiveRegionChanged
.
aria-errormessage
, AXValidationErrorChanged
.
Fire the following events for node changes where the node in question is an element and has an accessible object. The accessibility subtree of a node is its accessible object in the accessibility tree and all of it's accessibility descendants. It does not include objects which have relationships other than parent-child in that tree. For example, it does not include objects linked via aria-flowto unless those objects are also descendants in the accessibility tree.
Table of document change scenarios and events to be fired in each API Scenario MSAA Microsoft UIA event ATK/AT-SPI event AX API Notification When an accessibility subtree is hiddenEVENT_OBJECT_HIDE
EVENT_OBJECT_DESTROY
is not used because this has a history of stability issues and assistive technology avoids it. In any case, from the user's point of view, there is no difference between something that is hidden or destroyed. AutomationElement..::.StructureChangedEvent
children_changed::remove
AXUIElementDestroyed
If in a live region, AXLiveRegionChanged
EVENT_OBJECT_REORDER
EVENT_OBJECT_DESTROY
is not used because this has a history of stability issues and assistive technology avoids it. In any case, from the user's point of view, there is no difference between something that is hidden or destroyed. AutomationElement..::.StructureChangedEvent
children_changed::remove
AXUIElementDestroyed
If in a live region, AXLiveRegionChanged
EVENT_OBJECT_SHOW
children_changed::add
AXUIElementCreated
If in a live region, AXLiveRegionChanged
EVENT_OBJECT_REORDER
children_changed::add
AXUIElementCreated
If in a live region, AXLiveRegionChanged
AXUIElementDestroyed
/ AXUIElementCreated
If in a live region, AXLiveRegionChanged
AXUIElementDestroyed
/ AXUIElementCreated
If in a live region, AXLiveRegionChanged
In some cases, node changes may occur where the node is not an element or has no accessible object. For example, a numbered list bullet ("12.") may have a node in the accessibility tree but not in the DOM tree. For text within a paragraph marked in HTML as <strong>
, the <strong>
element has a node in the DOM tree but may not have one in the accessibility tree. The text itself will of course be in the accessibility tree along with the identification of the range of text that is formatted as strong. If any of the changes described in the table above occur on such a node, user agents SHOULD compute and fire relevant text change events as described above.
User agents SHOULD ensure that an assistive technology, running in process can receive notification of a node being removed prior to removal. This allows an assistive technology, such as a screen reader, to refer back to the corresponding DOM node being deleted. This is important for live regions where removals are important. For example, a screen reader would want to notify a user that another user has left a chat room. The event in MSAA would be EVENT_OBJECT_HIDE
. For ATK/AT-SPI this would be children_changed::remove
. And in macOS, the event is AXLiveRegionChanged
. This also requires the user agent to provide a unique ID in the accessibility API notification identifying the unique node being removed.
When firing any of the above-mentioned change events, it is very useful to provide information about whether the change was caused by user input (as opposed to a timeout initiated from the page load, etc.). This allows the assistive technology to have different rules for presenting changes from the real world as opposed to from user action. Mouse hovers are not considered explicit user input because they can occur from accidental bumps of the mouse.
To expose whether a change occurred from user input:
event-from-user-input:true
on the accessible object for the event, if the user caused the change.Exposing additional useful information about the context of the change:
RELATION_MEMBER_OF
relation on the accessible event's target accessible object SHOULD point to any ancestor with aria-atomic
="true"
(if any).container-live
, container-relevant
, container-busy
, container-atomic
object attributes SHOULD be exposed on the accessible event object, providing the computed value for the related WAI-ARIA properties. The computed value is the value of the closest ancestor. It is recommended to not expose the object attribute if the default value is used.Additional MSAA events may be necessary:
ROLE_SYSTEM_ALERT
, then an EVENT_SYSTEM_ALERT
event SHOULD be fired for the alert. The alert role has an implied value of "assertive" for the aria-live
property.The following table defines the accessibility API keyboard focus states and events.
Table of accessibility APIs for focus states and events MSAA Microsoft UIA ATK/AT-SPI AX API Focusable stateSTATE_SYSTEM_FOCUSABLE
Current state reflected in IUIAutomationElement::CurrentIsKeyboardFocusable
, can be retrieved with IUIAutomationElement::GetCurrentPropertyValue
method using UIA_IsKeyboardFocusablePropertyId
property identifier. STATE_FOCUSABLE
boolean AXFocused
: the AXUIElementIsAttributeSettable
method returns YES
. Focused state STATE_SYSTEM_FOCUSED
Current state reflected in IUIAutomationElement::CurrentHasKeyboardFocus
, can be retrieved with IUIAutomationElement::GetCurrentPropertyValue
method using UIA_HasKeyboardFocusPropertyId
property identifier. STATE_FOCUSED
boolean AXFocused
Focus event EVENT_OBJECT_FOCUS
Clients can subscribe with IUIAutomation::AddFocusChangedEventHandler
using callback interface is IUIAutomationFocusChangedEventHandler
object:state-changed:focused
and:
detail1 = 1
for the accessible object which just gained focus.detail1 = 0
for the accessible object which just lost focus.AXFocusedUIElementChanged
There are two cases for selection:
In the single selection case, selection follows focus (see the section "Focus States and Events Table" for information about focus events). User agents MUST fire the following events when aria-selected
changes:
EVENT_OBJECT_SELECTION
and EVENT_OBJECT_STATECHANGE
on newly focused item. UIA_SelectionItem_ElementSelectedEventId
on the newly focused element.
If on a gridcell
, row
, option
, or tab
, fire UIA_SelectionItem_ElementSelectedEventId
.
object:selection-changed
on the current container,object:state-changed:selected
on the descendant accessible object whose selection has changed:
detail1 = 1
for the descendant which just became selected.detail1 = 0
for the descendant which just became unselected.AXSelectedChildrenChanged
The multiple selection case occurs when aria-multiselectable
="true"
on an element with a role that supports that property. User agents MUST fire the following events when aria-selected
changes on a descendant, as follows:
The multiple selection case occurs when aria-multiselectable
="true"
on an element with a role that supports that property. There are several important aspects:
Selection
and SelectionItem
Control Patterns expose the selection availability, state, and methods.aria-selected
changes on a descendant, as follows:aria-selected
EVENT_OBJECT_SELECTIONADD
/EVENT_OBJECT_SELECTIONREMOVE
on the item. SelectionItem Control Pattern
:UIA_SelectionItem_ElementAddedToSelectionEventId
or UIA_SelectionItem_ElementRemovedFromSelectionEventId
on the item.
object:selection-changed
on the current container,object:state-changed:selected
on any descendant accessible object whose selection has changed:
detail1 = 1
for any descendant which just became selected.detail1 = 0
for any descendant which just became unselected.AXSelectedChildrenChanged
Selection follows focus EVENT_OBJECT_SELECTION
and EVENT_OBJECT_STATECHANGE
on newly focused item. FocusChangedEvent
should be fired but individual selection event may not happen, to avoid redundancy.
object:selection-changed
on the current container,object:state-changed:selected
on any descendant accessible object whose selection has changed:
detail1 = 1
for any accessible object which just became selected.detail1 = 0
for any accessible object which just became unselected.AXSelectedChildrenChanged
Select or deselect many items at once User agent MAY fire an EVENT_OBJECT_SELECTIONWITHIN
. If this event is fired the other events noted above MAY be trimmed out for performance. For each element selected or deselected, fire SelectionItem
Control Pattern: UIA_SelectionItem_ElementAddedToSelectionEventId
or UIA_SelectionItem_ElementRemovedFromSelectionEventId
on the current container. User agents MAY choose to fire the Selection Control Pattern Invalidated event, which indicates that the selection in a container has changed significantly and requires sending more addition and removal events than the InvalidateLimit
constant permits.
object:selection-changed
event on the container, vs. multiple events, for performance,object:state-changed:selected
on any descendant accessible object whose selection has changed:
detail1 = 1
for any accessible object which just became selected.detail1 = 0
for any accessible object which just became unselected.AXSelectedChildrenChanged
In accordance with Web Platform Design Principles, this specification provides no programmatic interface to determine if information is being used by Assistive Technologies. However, this specification does allow an author to present different information to users of Assistive Technologies from the information available to users who do not use Assistive Technologies. This is possible using many features of the ARIA and CORE-AAM specifications, just as this is possible using many other parts of the web technology stack. This content disparity could be abused to perform active fingerprinting of users of Assistive Technologies.
This specification introduces no new security considerations.
role=image
(synonym of img
)label
and legend
.aria-colindex
, aria-colspan
, aria-colcount
, aria-rowindex
, aria-rowspan
, and aria-rowcount
.alert
and alertdialog
.comment
, mark
, and suggestion
roles. Include comment
in calculation for aria-label
and group position.aria-description
.strong
and emphasis
roles for AX API.code
role for AX API.aria-colindextext
and aria-rowindextext
roles for ATK, IA2, and UIA.strong
and emphasis
roles for ATK, IA2, and UIA.code
role for ATK, IA2, and UIA.subscript
and superscript
generic
role.insertion
and deletion
roles.legend
role.label
role.time
role.subscript
and superscript
roles.meter
role.aria-placeholder
.blockquote
, caption
, and paragraph
roles.AXTitle
for exposing rendered labels for AXAPI.aria-label
, aria-labelledby
, and aria-describedby
.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, then under contract number HHSP23301500054C, and now under HHS75P00120P00168. 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.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.5