Please check the errata for any errors or issues reported since publication.
See also translations.
Copyright © 2014-2017 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and document use rules apply.
This 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.1]. 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 supercedes the guidance in the WAI-ARIA 1.0 User Agent Implementation Guide [wai-aria-implementation-1.0] W3C Recommendation. It 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. Other documents may supersede this document. 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 is the Core-AAM 1.1 W3C Recommendation by the Accessible Rich Internet Applications Working Group. The Working Group create a Core-AAM 1.1 Implementation Report to demonstrate that the specification is implementable. A history of changes to Core-AAM 1.1 is available in the appendix.
To comment on this document, file an issue in the W3C core-aam GitHub repository. If this is not feasible, send email to [email protected] (comment archive). Comments received on the Core-AAM 1.1 Recommendation cannot result in changes to this version of the specification, but may be addressed in errata or future versions of Core-AAM. The Working Group may not make formal responses to comments but future work undertaken by the Working Group may address comments received on this document. In-progress updates to the technology may be viewed in the publicly visible editors' draft.
This document was published by the Accessible Rich Internet Applications Working Group as a Recommendation.
Please see the Working Group's implementation report.
This document has been reviewed by W3C Members, by software developers, and by other W3C groups and interested parties, and is endorsed by the Director as a W3C Recommendation. It is a stable document and may be used as reference material or cited from another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its widespread deployment. This enhances the functionality and interoperability of the Web.
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 1 March 2017 W3C Process Document.
This section is non-normative.
In traditional desktop graphical user interface (GUI) applications, components of the user interface (UI) are displayed when needed and hidden when not needed based on user interactions. Accessibility application programming interfaces (APIs) are used to communicate semantic information about the user interface to assistive technology software used by people with disabilities. These APIs constitute a contract between applications and assistive technologies, such as screen readers, magnifiers, alternate input devices, and speech command and control, to enable them to access the appropriate semantics needed to produce a usable alternative to interactive applications. For example, screen reading software for blind users can determine whether a particular UI component is a menu, button, text field, list box, etc.
In traditional static Web pages, the HTML elements provided the necessary semantic information. The user agent provides keyboard navigation but only to the HTML elements that are known to be interactive, specifically links and form elements. Assistive technologies obtain the semantic information from the Document Object Model (DOM) or, in the case of links and form elements, through the Accessibility API. In both cases, the assistive technology expects that nothing changes until a new page is loaded based on a user action.
Yet technologies such as JavaScript, Ajax, and CSS have enabled Web pages to look and behave more like interactive desktop GUI applications, without the need to reload the page with each user interaction. Developers can now re-purpose HTML elements into UI components not previously defined in HTML. For example, Javascript can be used with CSS to modify a The W3C Web Accessibility Initiative's (WAI) Protocols and Formats working group (PFWG) has addressed these deficiencies through several W3C standards efforts, with a focus on the Accessible Rich Internet Applications [wai-aria-1.1] specification. WAI-ARIA enables rich Internet applications to have the same accessibility features as desktop GUI applications by adding metadata to markup technologies such as (X)HTML. Authors include WAI-ARIA in their markup and user agents translate the WAI-ARIA markup to the platform accessibility APIs. For an introduction to WAI-ARIA, see the WAI-ARIA Overview. The User Agent Implementation Guide describes how WAI-ARIA roles, states, and properties should be supported in user agents using platform accessibility APIs. It is part of a set of resources that define and support the WAI-ARIA specification which includes the following documents: The WAI-ARIA User Agent Implementation Guide begins by providing a general overview of accessibility APIs and the accessible object hierarchy known as the accessibility tree. The following sections give guidance on supporting keyboard navigation and mapping WAI-ARIA roles, states, and properties to accessibility APIs. Other sections give guidance on calculating text alternatives, mapping actions to events, event processing, special document handling procedures, and error handling. This guide assumes that a user agent already exposes static content to assistive technology via the accessibility API on a given platform. Most of the additional work to enable WAI-ARIA can be divided into three parts: In general, WAI-ARIA attributes should only affect how content is mapped to platform accessibility APIs. They should not affect the visual rendering of content nor behavior of mainstream desktop browsers, except when style sheets are deliberately keyed off of WAI-ARIA attributes as recommended in the specification. This allows one of the primary principles of WAI-ARIA to be upheld—that content still renders and behaves the same for the majority of users. This document includes information for user agents specifying how to map WAI-ARIA roles, states, and properties to platform accessibility APIs. It also includes host-language specific requirements where necessary to complete the accessibility model. Examples of host languages include HTML and SVG. However, in order to provide the basic, core mappings of WAI-ARIA, discussion of host-language features are generally avoided. How host languages modify or override the core mappings is specified in separate documents. To provide access to desktop GUI applications, assistive technologies originally used heuristic techniques to determine the meaning of the user interface and build an alternative off-screen model. For example, a row of labels displayed horizontally near the top of an application window might be a menu. Labels with a border drawn around them might be buttons. Heuristic techniques are not always accurate, however, and require assistive technologies to be updated whenever the software application is updated. A much better technique is for the software application to provide the necessary information for interoperability with assistive technology. To meet this need, platform owners have developed specialized interfaces, called accessibility APIs, which can be used to communicate accessibility information about user interfaces to assistive technologies. Accessibility APIs allow developers to express the function of controls and text to assistive technologies. Accessibility APIs include a tree of accessible objects (controls and text) and information about each of them: In the case of Web pages, the Document Object Model (DOM) is used to represent the structure and state of the elements in the document being rendered by a user agent. The elements of the document are organized into a hierarchy of nodes known as the DOM tree. To interact with static Web content, assistive technologies, such as screen readers, have tended to rely on the DOM provided by the user agent. However, platform accessibility APIs provide a quicker and more comprehensive way for assistive technologies to learn about and interact with Web page content. Especially with UI elements that are known to be interactive, such as HTML form elements and desktop applications, accessibility APIs allow the more complex roles, properties, states, and relationships of those elements to be communicated to assistive technology in a way that the DOM cannot provide on its own. In the case of rich Internet applications, developers use DOM APIs to manipulate objects in the DOM tree to make them behave like interactive desktop GUI applications. In order to make a Web application understandable to assistive technologies, the user agent needs to map accessibility information from the elements in the DOM tree to the Accessibility APIs of the underlying operating system or software platform throughout the lifecycle of the application. The information needed is provided when developers use WAI-ARIA to supply semantic role, state, and property information for elements. The screen reader or other assistive technology uses the semantic information exposed via the accessibility API to provide an alternative rendering of an application that is meaningful to a user. Accessibility APIs covered by this document 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 User Interface 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. The accessibility tree and the DOM tree are parallel structures. Roughly speaking the accessibility tree is a subset of the DOM tree. It includes the user interface objects of the user agent and the objects of the document. Accessible objects are created in the accessibility tree for every DOM element that should be exposed to an assistive technology, either because it may fire an accessibility event or because it has a property, relationship or feature which needs to be exposed. Generally if something can be trimmed out it will be, for reasons of performance and simplicity. For example, a 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 user agents. The following subsections describe a few of the distinguising 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 user agent (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, comobox, 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, wherease AT-SPI is relevant to consumers. In the context of mapping WAI-ARIA roles, states and properties, user agents are implementors and use ATK. Asisstive 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 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 mapping in this specification provide the 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 the relevant properties are implemented and what they are called vary depending on the API. For instance, in MSAA, all accessible objects support the Software using ATK can read and write to an object's Automation elements in the UIA accessibility tree have a The approach to accessible names and accessible descriptions in AX API is somewhat different to the other platform APIs. Accessible names are exposed using the For more detail, see the Accessible Name and Description Computation and API Mappings 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, OPTIONAL, SHOULD, and SHOULD NOT are
to be interpreted as described in [RFC2119].
RFC-2119 keywords are formatted in uppercase and contained in a The indication whether a section is normative or non-normative (informative) applies to the entire section including sub-sections. 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. While some terms are defined in place, the following definitions are used throughout this document. Operating systems and other platforms provide a set of interfaces that expose information about objects and events to assistive technologies. Assistive technologies use these interfaces to get information about and interact with those widgets. Examples of accessibility APIs are Microsoft Active Accessibility [MSAA], Microsoft User Interface Automation [UI-AUTOMATION], MSAA with UIA Express [UIA-EXPRESS], the
Mac OS X Accessibility Protocol [AXAPI], the Linux/Unix Accessibility Toolkit [ATK] and Assistive Technology Service Provider Interface [AT-SPI], and IAccessible2 [IAccessible2]. An accessible object in the accessibility tree and its descendants in that tree. It does not include objects which have relationships other than parent-child in that tree. For example, it does not include objects linked via Tree of accessible objects that represents the structure of the user interface (UI). Each node in the accessibility tree represents an element in the UI as exposed through the accessibility API; for example, a push button, a check box, or container. An accessible description provides additional information, related to an interface element, that complements the accessible name. The accessible description might or might not be visually perceivable. The accessible name is the name of a user interface element. Each platform accessibility API provides the accessible name property. The value of the accessible name may be derived from a visible (e.g., the visible text on a button) or invisible (e.g., the text alternative that describes an icon) property of the user interface element. See related accessible description. A simple use for the accessible name property may be illustrated by an "OK" button. The text "OK" is the accessible name. When the button receives focus, assistive technologies may concatenate the platform's role description with the accessible name. For example, a screen reader may speak "push-button OK" or "OK button". The order of concatenation and specifics of the role description (e.g., "button", "push-button", "clickable button") are determined by platform accessibility APIs or assistive technologies. A node in the accessibility tree of a platform accessibility API. Accessible objects expose various states, properties, and events for use by assistive technologies. In the context of markup languages (e.g., HTML and SVG) in general, and of WAI-ARIA in particular, markup elements and their attributes are represented as accessible objects. Hardware and/or software that: This definition may differ from that used in other documents. Examples of assistive technologies that are important in the context
of this document include the following: In this specification, attribute is used as it is in markup languages. Attributes are structural features added to elements to provide information about the states and properties of the object represented by the element. A set of instance objects that share similar characteristics. Event from/to the host operating system via the accessibility API, notifying of a change of input focus. In this specification, element is used as it is in markup languages. Elements are the structural elements in markup language that contains the data profile for objects. A programmatic message used to communicate discrete changes in the state of an object to other objects in a computational system. User input to a web page is commonly mediated through abstract events that describe the interaction and can provide notice of changes to the state of a document object. In some programming languages, events are more commonly known as notifications. Indicates that the element is not visible, perceivable, or interactive to any user. An element is considered hidden if it or any one of its ancestor elements is not rendered or is explicitly hidden. Content provided for information purposes and not required for conformance. Content required for conformance is referred to as normative. Accessible to the user using a keyboard or assistive technologies that mimic keyboard input, such as a sip and puff tube. References in this document relate to WCAG 2.0 Guideline 2.1: Make all functionality available from a keyboard [WCAG20]. Live regions are perceivable regions of a web page that are typically updated as a result of an external event when user focus may be elsewhere. These regions are not always updated as a result of a user interaction. This practice has become commonplace with the growing use of Ajax. Examples of live regions include a chat log, stock ticker, or a sport scoring section that updates periodically to reflect game statistics. Since these asynchronous areas are expected to update outside the user's area of focus, assistive technologies such as screen readers have either been unaware of their existence or unable to process them for the user. WAI-ARIA has provided a collection of properties that allow the author to identify these live regions and process them: aria-live, aria-relevant, aria-atomic, and aria-busy. Accessibility API state that is controlled by the user agent, such as focus and selection. These are contrasted with "unmanaged states" that are typically controlled by the author. Nevertheless, authors can override some managed states, such as aria-posinset and aria-setsize. Many managed states have corresponding CSS pseudo-classes, such as :focus, and pseudo-elements, such as ::selection, that are also updated by the user agent. Basic type of object in the DOM tree or accessibility tree. DOM nodes are further specified as Element or Text nodes, among other types. The nodes of an accessibility tree are accessible objects. Required for conformance. By contrast, content identified as informative or "non-normative" is not required for conformance. In the context of user interfaces, an item in the perceptual user experience, represented in markup languages by one or more elements, and rendered by user agents. An 'owned element' is any DOM descendant of the element, any element specified as a child via Presentable to users in ways they can sense. References in this document relate to WCAG 2.0 Principle 1: Content must be perceivable [WCAG20]. Attributes that are essential to the nature of a given object, or that represent a data value associated with the object. A change of a property may significantly impact the meaning or presentation of an object. Certain properties (for example, A connection between two distinct things. Relationships may be of various types to indicate which object labels another, controls another, etc. Main indicator of type. This semantic association allows tools to present and support interaction with the object in a manner that is consistent with user expectations about other objects of that type. The meaning of something as understood by a human, defined in a way that computers can process a representation of an object, such as elements and attributes, and reliably represent the object in a way that various humans will achieve a mutually consistent understanding of the object. A state is a dynamic property expressing characteristics of an object that may change in response to user action or automated processes. States do not affect the essential nature of the object, but represent data associated with the object or user interaction possibilities. See clarification of states versus properties. Type of DOM node that represents the textual content of an attribute or an element. A Text node has no child nodes. Presentable to users in ways they can construct an appropriate meaning. References in this document relate to WCAG 2.0 Principle 3: Information and the operation of user interface must be understandable [WCAG20]. Any software that retrieves, renders and facilitates end user interaction with Web content. This definition may differ from that used in other documents. A reference to a target element in the same document that has a matching ID Discrete user interface object with which the user can interact. Widgets range from simple objects that have one value or operation (e.g., check boxes and menu items), to complex objects that contain many managed sub-objects (e.g., trees and grids). Enabling keyboard navigation in web applications is a necessary step toward making them accessible. User agents MUST provide a mechanism for authors to specify that any renderable element may be focusable without placing the element in a pre-defined tabbing order. User agents MUST also provide programmatic access to all focusable elements. This allows for device-independent access, is needed to conform to the User Agent Accessibility Guidelines [UAAG10], and is vital for a successful implementation of WAI-ARIA. Usable keyboard navigation in a rich Internet application is different from the tabbing paradigm among interactive elements, such as links and form controls, in a static document. In rich internet applications, the user tabs to significantly complex widgets, such as a menu or spreadsheet, and uses the arrow keys to navigate within the widget. The changes that WAI-ARIA introduces to keyboard navigation make this enhanced accessibility possible. In WAI-ARIA, any element can be keyboard focusable. In addition to host language mechanisms such as Assistive technologies often need to set the focus. For example, voice input software, onscreen keyboards and screen readers supply their own structured navigation modes, providing additional commands for moving to elements in a page. User agents need to allow assistive technologies to set the focus. See the section titled "Handling focus changes from the Assistive Technology" for details. The following table defines the accessibility API keyboard focus states and events used in later sections of the document. An example is a single-selection User agents that support WAI-ARIA expand the usage of The Refer to the Table of accessibility APIs for focus states and events for the rules in this section. The user agent MUST do the following to enable accessible When implementing The Typically, the author will use host language semantics to put the container element in the sequential tab order (e.g., Refer to the Table of accessibility APIs for focus states and events for the rules in this section. The user agent MUST do the following to implement Assistive technologies, such as screen readers, voice input software and on-screen keyboards, might request that the keyboard focus be moved using the following accessibility APIs: Refer to the Table of accessibility APIs for focus states and events for the rules in this section. When an assistive technology requests a change of focus using one of the above APIs, user agents MUST do the following: The inability to set DOM focus to the containing element indicates an author error. 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. The accessibility tree is a sub-set of the DOM since not every DOM element is exposed as an accessible object. Whether or not a DOM element is exposed depends on whether it has any semantic import. If it has none, no accessible object is needed, and it is excluded from the accessibility tree. For example, authors might create a nested set of DOM elements solely for visual layout. Those DOM elements are not included as they contain no semantic information. In addtion, some host markup langauges elements have no semantics and are excluded from the accessibility tree. For example, the HTML A DOM element is included if it has semantic significance. As a first approximation, it is significant if it has an explicit or implicit WAI-ARIA role, state, or property, is focusable or interactive, or bears a relationship with some other element (e.g., controller-for). It is not semantically significant if it is purely presentational, or is not rendered in any medium. The details and exceptions are described below, but a procedure that provides the gist of how to build the accessibility tree is as follows: The following elements are not exposed via the accessibility API and user agents MUST NOT include them in the accessibility tree: If not already excluded from the accessibility tree per the above rules, user agents SHOULD NOT include the following elements in the accessibility tree: Any descendants of elements that have the characteristic "Children Presentational: True" unless the descendant is not allowed to be presentational because it meets one of the conditions for exception described in Presentational Roles Conflict Resolution in Accessible Rich Internet Applications (WAI-ARIA) 1.1 [wai-aria-1.1]. However, the text content of any excluded descendants is included. Elements having one of the following roles have the characteristic "Children Presentational: True": If not already excluded from the accessibility tree per the rules above in Excluding Elements in the Accessibility Tree, user agents MUST provide an accessible object in the accessibility tree for DOM elements that meet any of the following criteria: Text equivalents for hidden referenced objects may still be used in the name and description calculation even when not included in the accessibility tree. User agents notify assistive technologies of state and property changes as defined in Events. 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 ( 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 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: 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. The following rules describe how to expose WAI-ARIA roles using the accessibility API: The following steps will correctly identify the applicable WAI-ARIA role: Translators: For label text associated with the following table and its toggle buttons, see the Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it as See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it using the See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it as See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it as See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it as See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it using the See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it as See General rules for exposing WAI-ARIA semantics. For objects that have required owned descendants (e.g., a grid owns gridcells, a list owns listitems), and the descendant is in the accessibility tree, expose it as Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return
[Note 1]
User agent should return a user-presentable, localized string value for the AXRoleDescription. [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 object properties. 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 Translators: For label text associated with the following table and its toggle buttons, see the See Controlling focus with In cases, however, the focus can be transparent in an accessibility tree as it may be exposed as focus delegation from the container element to the child object that takes active focus. This is represented by an accessible object that comes with See Controlling focus with See Controlling focus with In cases, however, the focus can be transparent in an accessibility tree as it may be exposed as focus delegation from the container element to the child object that takes active focus. This is represented by an accessible object that comes with If the value of User agents MAY expose the elements that are referenced by this property as children of the current element. In which case, if multiple User agents MAY expose the elements that are referenced by this property as children of the current element. In which case, if multiple If the value of If the author-provided value of For information on how to compute an accessible name or accessible description, see the section titled Text Alternative Computation of the Accessible Name and Description Computation and API Mappings specification. Some WAI-ARIA roles are widgets that have a particular value within a range of values. For example If the value is not set on a control that requires value, then user agents SHOULD return an error when the current value is requested. When assistive technology requests the current value, user agents are not required to ensure that If an element has the 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: User agents SHOULD ignore ID references that do not match the ID of another element in the same document. It is the web author's responsibility to ensure that IDs are unique. If more than one element has the same ID, the user agent SHOULD use the first element found with the given ID. The behavior will be the same as If the same element is specified multiple times in a single WAI-ARIA relation, user agents SHOULD return multiple pointers to the same object. 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 following table when an element's ID is referenced by a relation property of another element and the referenced element is in the accessibility tree according to the rules in General rules for exposing WAI-ARIA semantics. 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. Special case: If both Note that In addition to the explicit relations defined by WAI-ARIA properties, reverse relations are implied in two other situations: elements with In the case of In the case of If If If the author provides one or more of MSAA/IAccessible2 API mappings involve an additional function, As part of mapping roles to accessible objects as defined in Role Mapping, users agents expose a default action on the object. 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 See the Name and Description Change Events section of the Accessible Name and Description Computation document regarding how different accessibility APIs expose changes to 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. Translators: For label text associated with the following table and its toggle buttons, see the In addition: In addition: 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. Fire these events for node changes where the node in question is an element and has an accessible object: If in a live region, If in a live region, If in a live region, If in a live region, If in a live region, If in a live region, 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 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 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: Exposing additional useful information about the context of the change: Additional MSAA events may be necessary: 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 If on a The multiple selection case occurs when The multiple selection case occurs when This section might be removed in a future version. Support for attribute selectors MUST include WAI-ARIA attributes. For example, .fooMenuItem[aria-haspop="true"] would select all elements with class 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.
1.1 Accessibility APIs §
1.2 The Accessibility Tree and the DOM Tree §
with just a style change and no semantics may not get its own accessible object, but the style change will be exposed by other means.
1.3 Comparing Accessibility APIs §
1.3.1 ATK/AT-SPI §
1.3.2 UIA (UI Automation) §
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.{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.1.3.3 Accessible Names and Descriptions §
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.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.Name
property. Where the object also supports having an accessible description, UIA stores this property in the object's FullDescription
property.AXTitle
property when the name is visually rendered, while the AXDescription
property is used when the object's name is not rendered visually. An object's accessible description, where provided, should always be exposed in the AXHelp
property.2. Conformance §
2.1 RFC-2119 Keywords §
strong
element with class="rfc2119"
. When the keywords shown above are used, but do not share this format, they do not convey formal information in the RFC 2119 sense, and are merely explanatory, i.e., informative. As much as possible, such usages are avoided in this specification.2.2 Normative and Informative Sections §
2.3 Features Deprecated in WAI-ARIA §
3. Important Terms §
aria-flowto
unless those objects are also descendants in the accessibility tree.
aria-owns
, or any DOM descendant of the owned child.aria-multiline
) are less likely to change than states, but note that the frequency of change difference is not a rule. A few properties, such as aria-activedescendant
, aria-valuenow
, and aria-valuetext
are expected to change often. See clarification of states versus properties.4. Supporting Keyboard Navigation §
tabindex
, aria-activedescendant
provides another mechanism for keyboard operation. Most other aspects of WAI-ARIA widget development depend on keyboard navigation functioning properly.4.1 Focus States and Events Table §
tabindex
, the DOM focus (document.activeElement
) is in sync with the focus states and events listed in the table. aria-activedescendant
, the DOM focus is separate from the focus states and events for the MSAA, Microsoft UIA, and ATK/AT-SPI columns of the table.
listbox
that controls focus using aria-activedescendant
instead of tabindex
. The option
children are all marked with the focusable state in the accessibility API. As the user navigates from one option
child to the next, DOM focus is maintained on the listbox
parent, but the accessibility API emits a focus event and exposes the focused state for the option
child that the listbox
references as the active descendant.
MSAA
Microsoft UIA
ATK/AT-SPI
AX API
Focusable state
STATE_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
4.2 Controlling focus with
tabindex
§tabindex
, focus
, and blur
to allow them on all elements. Authors may add any element such as a div
, span
or img
to the default tab order by setting tabindex="0"
. In addition, any item with tabindex
equal to a negative integer is focusable via script or a mouse click, but is not part of the default tab order. This is not supported in the HTML4 specification but is in compliance with HTML5 and SVG2.tabindex
system provides one way to develop custom widgets which are keyboard accessible, from simple widgets like a slider
to container widgets like a menubar
, treeview
or grid
.tabindex
usage on all elements:
tabindex
equals a negative integer, set the focusable state, but do not include the element in the sequential tab order.tabindex="0"
, set the focusable state and include it in the sequential tab order.tabindex
is greater than zero, set the focusable state, and include the element in the sequential tab order according to the value of the tabindex
attribute and before any elements with tabindex
either omitted or with a value of zero. See Sequential focus navigation [html5] for details. element.tabIndex
property for every element that supports the tabindex
attribute.focus()
and blur()
methods on element interfaces that support the tabindex
attribute, e.g., HTMLElement
and SVGElement
. This allows scripts to move the focus to the element.focus
, blur
, DOMFocusIn
, and DOMFocusOut
events for any element that can receive focus.keydown
event is cancelled, also cancel the keypress
event.4.3 Controlling focus with
aria-activedescendant
§aria-activedescendant
as described below, the user agent keeps the DOM focus on the container element but communicates desktop focus events and states to the assistive technology as if the active descendant has focus. User agents are not expected to validate that the active descendant is a descendant of the focused container, as noted in the Author Errors section. It is the responsibility of the user agent to ensure that keyboard events are processed at the container element that has DOM focus. Any keyboard events directed at the active descendant bubble up to the DOM element with focus, the container element, for processing.aria-activedescendant
property may be used to enable keyboard accessibility on WAI-ARIA elements that support this attribute. It is often a more convenient way of creating container widget keyboard navigation (where the entire widget is in the tab order just once, but the user can use other keys, typically arrow keys, to navigate to descendant items of the container).tabindex="0"
in HTML) and aria-activedescendant
to point to the ID of the currently active descendant. The author, not the user agent, is responsible for styling the currently active descendant to show it has keyboard focus. The author cannot use :focus
to style the currently active descendant since actual focus is on the container.aria-activedescendant
:
tabindex
. aria-activedescendant
which points to a valid ID.aria-activedescendant
attribute changes on an element that currently has DOM focus, remove the focused state from the previously focused object and fire an accessibility API desktop focus event on the new active descendant. If aria-activedescendant
is cleared or does not point to an element in the current document, fire a desktop focus event for the container object that had the attribute change. aria-activedescendant
attribute, apply the following accessibility API states to the target to ensure the object is accessible:
aria-activedescendant
of the container can potentially point to it. It is not absolutely necessary to check this when there is no role, because elements that would be focusable would already have the focusable state.aria-activedescendant
to match the ID of this descendant and the container widget with aria-activedescendant
has DOM focus.4.4 Handling focus changes from the Assistive Technology §
accSelect(SELFLAG_TAKEFOCUS)
RaiseAutomationEvent
AtkComponent::grab_focus
AXFocusedUIElementChanged
aria-activedescendant
attribute present, the user agent MUST set DOM focus to that ancestor. When it is not possible for the user agent to set DOM focus to the containing element with aria-activedescendant
, the user agent MAY attempt to set DOM focus to the child element itself.aria-activedescendant
attribute present, the user agent MUST set the accessibility API focused state and fire an accessibility API desktop focus event on the new active descendant.5. Mapping WAI-ARIA to Accessibility APIs §
5.1 General rules for exposing WAI-ARIA semantics §
element is used to define a base URL for all relative URLs within the document. It is important to the browser, which uses the information to resolve relative URLs. But, it has no meaning to end users, is not rendered on screen by the browser, and is excluded from the accessibility tree.
presentation
/none
role is inherited and the descendent elements are excluded.
role="presentation"
and tabindex="0"
is focusable. The presentation role is ignored, and the element is included.display:none
, the element is not focusable even if it has tabindex="0"
since there is nothing rendered on screen to focus, and users cannot interact with the element. The tabindex attribute is ignored, and the element is excluded.5.1.1 Excluding Elements from the Accessibility Tree §
none
or presentation
as the first mappable role in the role attribute. However, their exclusion is conditional and depends on other factors. In addition, the element's descendants and text content are generally included. These exceptions and conditions are documented in the section "Presentational Roles Conflict Resolution" in Accessible Rich Internet Applications (WAI-ARIA) 1.1 [wai-aria-1.1]. display:none
, visibility:hidden
, or the HTML 5 hidden
attribute.
aria-hidden
="true".
In other words, aria-hidden="true"
on a parent overrides aria-hidden="false"
on descendants. 5.1.2 Including Elements in the Accessibility Tree §
aria-activedescendant
attribute that matches the implicit or explicit semantics of the required context role. In either case, the element may receive focus and may fire an accessibility API FOCUS
event.aria-hidden
="true"
. (See Excluding Elements in the Accessibility Tree for additional guidance on aria-hidden
.)
aria-controls
, aria-describedby
, aria-details
, aria-errormessage
, aria-flowto
, aria-labelledby
and aria-owns
.5.1.3 Notification of State Changes §
5.2 Conflicts between native markup semantics and WAI-ARIA §
) 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
() 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 subclsss of those semantics, then treat any required owned elements of the native role as having role presentation or none.
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. 5.3 Exposing attributes that do not directly map to accessibility API properties §
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.5.4 Role mapping §
5.4.1 General rules §
use the HTML
table
element to determine the platform accessibility API role mapping. For , use the mapping for an HTML text input
.
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.0 [wai-aria-1.1].
accRole
property.xml-roles:"string"
)AriaRole
property. The AriaRole property
can also support secondary roles using a space as a separator.xml-roles:"string"
)5.4.2 Role Mapping Table §
mappingTableLabels
object in the section of this document.
WAI-ARIA Role
MSAA + IAccessible2
UIA
ATK/AT-SPI
AX API[Note 1]
alert
Role:
ROLE_SYSTEM_ALERT
Event: The user agent SHOULD fire EVENT_SYSTEM_ALERT
. [Note 2]
Control Type:
Group
Localized Control Type: alert
LiveSetting: Assertive (2)
Event: The user agent SHOULD fire a system alert event. [Note 2]
Role:
ROLE_ALERT
Event: The user agent SHOULD fire a system alert event. [Note 2]
AXRole:
AXGroup
AXSubrole: AXApplicationAlert
AXRoleDescription: 'alert'
Event: The user agent SHOULD fire a system alert event. [Note 2]
alertdialog
Role:
ROLE_SYSTEM_DIALOG
Event: The user agent SHOULD fire EVENT_SYSTEM_ALERT
. [Note 2]
Control Type:
Pane
Event: The user agent SHOULD fire a system alert event. [Note 2]
Role:
ROLE_DIALOG
Interface: Window
Event: The user agent SHOULD fire a system alert event. [Note 2]
AXRole:
AXGroup
AXSubrole: AXApplicationAlertDialog
AXRoleDescription: 'web alert dialog'
Event: The user agent SHOULD fire a system alert event. [Note 2]
application
Role:
ROLE_SYSTEM_APPLICATION
Control Type:
Pane
Localized Control Type: application
Role:
ROLE_EMBEDDED
AXRole:
AXGroup
AXSubrole: AXWebApplication
AXRoleDescription: 'web application'
article
Role:
ROLE_SYSTEM_DOCUMENT
State: STATE_SYSTEM_READONLY
Object Attribute: xml-roles:article
Control Type:
Group
Localized Control Type: article
Role:
ROLE_ARTICLE
Object Attribute: xml-roles:article
AXRole:
AXGroup
AXSubrole: AXDocumentArticle
AXRoleDescription: 'article'
banner
Role:
IA2_ROLE_LANDMARK
Object Attribute: xml-roles:banner
Control Type:
Group
Localized Control Type: banner
Landmark Type: Custom
Localized Landmark Type: banner
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:banner
AXRole:
AXGroup
AXSubrole: AXLandmarkBanner
AXRoleDescription: 'banner'
button
with default values for aria-pressed
and aria-haspopup
Role:
ROLE_SYSTEM_PUSHBUTTON
Control Type:
Button
Role:
ROLE_PUSH_BUTTON
AXRole:
AXButton
AXSubrole:
AXRoleDescription: 'button'
button
with non-false
value for aria-haspopup
Role:
ROLE_SYSTEM_BUTTONMENU
Control Type:
Button
Role:
ROLE_PUSH_BUTTON
AXRole:
AXPopUpButton
AXSubrole:
AXRoleDescription: 'pop up button'
button
with defined value for aria-pressed
Role:
ROLE_SYSTEM_PUSHBUTTON
Role: IA2_ROLE_TOGGLE_BUTTON
Control Type:
Button
Role:
ROLE_TOGGLE_BUTTON
AXRole:
AXCheckBox
AXSubrole: AXToggle
AXRoleDescription: 'toggle button'
cell
Role:
ROLE_SYSTEM_CELL
Interface: IAccessibleTableCell
Control Type:
DataItem
Localized Control Type: cell
Control Pattern: TableItem
Role:
ROLE_TABLE_CELL
Interface: TableCell
AXRole:
AXCell
AXSubrole:
AXRoleDescription: 'cell'
checkbox
Role:
ROLE_SYSTEM_CHECKBUTTON
See also: aria-checked
in the State and Property Mapping Table
Control Type:
Checkbox
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_CHECK_BOX
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXCheckBox
AXSubrole:
AXRoleDescription: 'checkbox'
See also: aria-checked
in the State and Property Mapping Table
columnheader
Role:
ROLE_SYSTEM_COLUMNHEADER
Interface: IAccessibleTableCell
Control Type:
HeaderItem
Role:
ROLE_COLUMN_HEADER
Interface: TableCell
AXRole:
AXCell
AXSubrole:
AXRoleDescription: 'cell'
combobox
Role:
ROLE_SYSTEM_COMBOBOX
State: STATE_SYSTEM_HASPOPUP
State: STATE_SYSTEM_COLLAPSED
if aria-expanded
is not "true"
Control Type:
Combobox
Role:
ROLE_COMBO_BOX
State: STATE_EXPANDABLE
State: STATE_HAS_POPUP
AXRole:
AXComboBox
AXSubrole:
AXRoleDescription: 'combo box'
complementary
Role:
IA2_ROLE_LANDMARK
Object Attribute: xml-roles:complementary
Control Type:
Group
Localized Control Type: complementary
Landmark Type: Custom
Localized Landmark Type: complementary
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:complementary
AXRole:
AXGroup
AXSubrole: AXLandmarkComplementary
AXRoleDescription: 'complementary'
contentinfo
Role:
IA2_ROLE_LANDMARK
Object Attribute: xml-roles:contentinfo
Control Type:
Group
Localized Control Type: content information
Landmark Type: Custom
Localized Landmark Type: content information
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:contentinfo
AXRole:
AXGroup
AXSubrole: AXLandmarkContentInfo
AXRoleDescription: 'content information'
definition
Object Attribute:
xml-roles:definition
Control Type:
Group
Localized Control Type: definition
Role:
ROLE_DESCRIPTION_VALUE
Object Attribute: xml-roles:definition
AXRole:
AXGroup
AXSubrole: AXDefinition
AXRoleDescription: 'definition'
dialog
Role:
ROLE_SYSTEM_DIALOG
Control Type:
Pane
Role:
ROLE_DIALOG
Interface: Window
AXRole:
AXGroup
AXSubrole: AXApplicationDialog
AXRoleDescription: 'web dialog'
directory
Role:
ROLE_SYSTEM_LIST
Control Type:
List
Role:
ROLE_LIST
AXRole:
AXList
AXSubrole: AXContentList
AXRoleDescription: 'content list'
document
Role:
ROLE_SYSTEM_DOCUMENT
State: STATE_SYSTEM_READONLY
Control Type:
Document
Role:
ROLE_DOCUMENT_FRAME
AXRole:
AXGroup
AXSubrole: AXDocument
AXRoleDescription: 'document'
feed
Role:
ROLE_SYSTEM_GROUPING
Object Attribute: xml-roles:feed
Control Type:
Group
Localized Control Type: feed
Role:
ROLE_PANEL
Object Attribute: xml-roles:feed
AXRole:
AXGroup
AXSubrole: AXApplicationGroup
AXRoleDescription: 'feed'
figure
Role:
ROLE_SYSTEM_GROUPING
Object Attribute: xml-roles:figure
Control Type:
Group
Localized Control Type: figure
Role:
ROLE_PANEL
Object Attribute: xml-roles:figure
AXRole:
AXGroup
AXSubrole:
AXRoleDescription: 'figure'
form
Role:
IA2_ROLE_FORM
Object Attribute: xml-roles:form
Control Type:
Group
Localized Control Type: form
Landmark Type: Form
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:form
AXRole:
AXGroup
AXSubrole:
AXRoleDescription: 'group'
grid
Role:
ROLE_SYSTEM_TABLE
Object Attribute: xml-roles:grid
Interface: IAccessibleTable2
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
DataGrid
Control Pattern: Selection
Role:
ROLE_TABLE
Object Attribute: xml-roles:grid
Interface: Table
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXTable
AXSubrole:
AXRoleDescription: 'table'
AXColumnHeaderUIElements: a list of pointers to the columnheader elements
AXHeader: a pointer to the row or group containing those columnheader elements
AXRowHeaderUIElements: a list of pointers to the rowheader elements
gridcell
Role:
ROLE_SYSTEM_CELL
Interface: IAccessibleTableCell
Control Type:
DataItem
Localized Control Type: gridcell
Control Pattern: SelectionItem
SelectionItem.SelectionContainer: the containing grid
Role:
ROLE_TABLE_CELL
Interface: TableCell
AXRole:
AXCell
AXSubrole:
AXRoleDescription: 'cell'
group
Role:
ROLE_SYSTEM_GROUPING
Control Type:
Group
Role:
ROLE_PANEL
AXRole:
AXGroup
AXSubrole: AXApplicationGroup
AXRoleDescription: 'group'
heading
Role:
IA2_ROLE_HEADING
Object Attribute: xml-roles:heading
Control Type:
Text
Localized Control Type: heading
Role:
ROLE_HEADING
AXRole:
AXHeading
AXSubrole:
AXRoleDescription: 'heading'
img
Role:
ROLE_SYSTEM_GRAPHIC
Interface: IAccessibleImage
Control Type:
Image
Role:
ROLE_IMAGE
Interface: Image
AXRole:
AXImage
AXSubrole:
AXRoleDescription: 'image'
link
Role:
ROLE_SYSTEM_LINK
State: STATE_SYSTEM_LINKED
State: STATE_SYSTEM_LINKED
on its descendants
Interface: IAccessibleHypertext
Control Type:
HyperLink
Control Pattern: Value
Role:
ROLE_LINK
Interface: HyperlinkImpl
AXRole:
AXLink
AXSubrole:
AXRoleDescription: 'link'
list
Role:
ROLE_SYSTEM_LIST
State: STATE_SYSTEM_READONLY
Control Type:
List
Role:
ROLE_LIST
AXRole:
AXList
AXSubrole: AXContentList
AXRoleDescription: 'content list'
listbox
not owned by or child of combobox
Role:
ROLE_SYSTEM_LIST
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
List
Control Pattern: Selection
Role:
ROLE_LIST_BOX
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXList
AXSubrole:
AXRoleDescription: 'list'
listbox
owned by or child of combobox
Role:
ROLE_SYSTEM_LIST
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
List
Control Pattern: Selection
Role:
ROLE_MENU
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXList
AXSubrole:
AXRoleDescription: 'list'
listitem
Role:
ROLE_SYSTEM_LISTITEM
State: STATE_SYSTEM_READONLY
Control Type:
ListItem
Control Pattern: SelectionItem
SelectionItem.SelectionContainer: the containing list
Role:
ROLE_LIST_ITEM
AXRole:
AXGroup
AXSubrole:
AXRoleDescription: 'group'
log
Object Attribute:
xml-roles:log
Object Attribute: container-live:polite
Object Attribute: live:polite
Object Attribute: container-live-role:log
Control Type:
Group
Localized Control Type: log
LiveSetting: Polite (1)
Role:
ROLE_LOG
Object Attribute: xml-roles:log
Object Attribute: container-live:polite
Object Attribute: live:polite
Object Attribute: container-live-role:log
AXRole:
AXGroup
AXSubrole: AXApplicationLog
AXRoleDescription: 'log'
main
Role:
IA2_ROLE_LANDMARK
Object Attribute: xml-roles:main
Control Type:
Group
Localized Control Type: main
Landmark Type: Main
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:main
AXRole:
AXGroup
AXSubrole: AXLandmarkMain
AXRoleDescription: 'main'
marquee
Role:
ROLE_SYSTEM_ANIMATION
Object Attribute: xml-roles:marquee
Object Attribute: container-live:off
Object Attribute: live:off
Control Type:
Group
Localized Control Type: marquee
LiveSetting: Off (0)
Role:
ROLE_MARQUEE
Object Attribute: container-live:off
Object Attribute: live:off
AXRole:
AXGroup
AXSubrole: AXApplicationMarquee
AXRoleDescription: 'marquee'
math
Role:
ROLE_SYSTEM_EQUATION
Control Type:
Group
Localized Control Type: math
Role:
ROLE_MATH
AXRole:
AXGroup
AXSubrole: AXDocumentMath
AXRoleDescription: 'math'
menu
Role:
ROLE_SYSTEM_MENUPOPUP
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
Menu
Role:
ROLE_MENU
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXMenu
AXSubrole:
AXRoleDescription: 'menu'
menubar
Role:
ROLE_SYSTEM_MENUBAR
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
MenuBar
Role:
ROLE_MENU_BAR
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXMenuBar
AXSubrole:
AXRoleDescription: 'menu bar'
menuitem
not owned by or child of group
Role:
ROLE_SYSTEM_MENUITEM
Control Type:
MenuItem
Role:
ROLE_MENU_ITEM
AXRole:
AXMenuItem
AXSubrole:
AXRoleDescription: 'menu item'
menuitem
owned by or child of group
Role:
ROLE_SYSTEM_MENUITEM
Control Type:
MenuItem
Role:
ROLE_MENU_ITEM
AXRole:
AXMenuButton
AXSubrole:
AXRoleDescription: 'menu button'
menuitemcheckbox
Role:
ROLE_SYSTEM_CHECKBUTTON
or ROLE_SYSTEM_MENUITEM
Role: IA2_ROLE_CHECK_MENU_ITEM
See also: aria-checked
in the State and Property Mapping Table
Control Type:
MenuItem
Control Pattern: Toggle
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_CHECK_MENU_ITEM
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXMenuItem
AXSubrole:
AXRoleDescription: 'menu item'
See also: aria-checked
in the State and Property Mapping Table
menuitemradio
Role:
ROLE_SYSTEM_RADIOBUTTON
or ROLE_SYSTEM_MENUITEM
Role: IA2_ROLE_RADIO_MENU_ITEM
See also: aria-checked
in the State and Property Mapping Table
Control Type:
MenuItem
Control Pattern: Toggle
Control Pattern: SelectionItem
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_RADIO_MENU_ITEM
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXMenuItem
AXSubrole:
AXRoleDescription: 'menu item'
See also: aria-checked
in the State and Property Mapping Table
navigation
Role:
IA2_ROLE_LANDMARK
Object Attribute: xml-roles:navigation
Control Type:
Group
Localized Control Type: navigation
Landmark Type: Navigation
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:navigation
AXRole:
AXGroup
AXSubrole: AXLandmarkNavigation
AXRoleDescription: 'navigation'
none
IA2_ROLE_TEXT_FRAME
. User agents SHOULD prune empty descendants from the accessibility tree.
text
pattern. User agents SHOULD prune empty descendants from the accessibility tree.
ROLE_SECTION
. User agents SHOULD prune empty descendants from the accessibility tree.
AXGroup
. User agents SHOULD prune empty descendants from the accessibility tree.
note
Role:
IA2_ROLE_NOTE
Control Type:
Group
Localized Control Type: note
Role:
ROLE_COMMENT
AXRole:
AXGroup
AXSubrole: AXDocumentNote
AXRoleDescription: 'note'
option
not inside combobox
Role:
ROLE_SYSTEM_LISTITEM
See also: aria-checked
in the State and Property Mapping Table
Control Type:
ListItem
Control Pattern: Invoke
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_LIST_ITEM
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXStaticText
AXSubrole:
AXRoleDescription: 'text'
See also: aria-checked
in the State and Property Mapping Table
option
inside combobox
Role:
ROLE_SYSTEM_LISTITEM
See also: aria-checked
in the State and Property Mapping Table
Control Type:
ListItem
Control Pattern: Invoke
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_MENU_ITEM
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXStaticText
AXSubrole:
AXRoleDescription: 'text'
See also: aria-checked
in the State and Property Mapping Table
presentation
IA2_ROLE_TEXT_FRAME
. User agents SHOULD prune empty descendants from the accessibility tree.
text
pattern. User agents SHOULD prune empty descendants from the accessibility tree.
ROLE_SECTION
. User agents SHOULD prune empty descendants from the accessibility tree.
AXGroup
. User agents SHOULD prune empty descendants from the accessibility tree.
progressbar
Role:
ROLE_SYSTEM_PROGRESSBAR
State: STATE_SYSTEM_READONLY
Interface: IAcesssibleValue
Control Type:
ProgressBar
Control Pattern: RangeValue
if aria-valuenow
, aria-valuemax
, or aria-valuemin
is present
Role:
ROLE_PROGRESS_BAR
Interface: Value
false
for all Value
methods that provide a means to modify the value.
AXRole:
AXProgressIndicator
AXSubrole:
AXRoleDescription: 'progress indicator'
radio
Role:
ROLE_SYSTEM_RADIOBUTTON
See also: aria-checked
in the State and Property Mapping Table
Control Type:
RadioButton
Control Pattern: Toggle
Control Pattern: SelectionItem
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_RADIO_BUTTON
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXRadioButton
AXSubrole:
AXRoleDescription: 'radio button'
See also: aria-checked
in the State and Property Mapping Table
radiogroup
Role:
ROLE_SYSTEM_GROUPING
Control Type:
List
Role:
ROLE_PANEL
AXRole:
AXRadioGroup
AXSubrole:
AXRoleDescription: 'radio group'
region
with an accessible name
Role:
IA2_ROLE_LANDMARK
Object Attribute: xml-roles:region
Control Type:
Group
Localized Control Type: region
Landmark Type: Custom
Localized Landmark Type: region
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:region
AXRole:
AXGroup
AXSubrole: AXLandmarkRegion
AXRoleDescription: 'region'
region
without an accessible name
Do not expose the element as a landmark. Use the native host language role of the element instead.
Do not expose the element as a landmark. Use the native host language role of the element instead.
Do not expose the element as a landmark. Use the native host language role of the element instead.
Do not expose the element as a landmark. Use the native host language role of the element instead.
row
not inside treegrid
Role:
ROLE_SYSTEM_ROW
Control Type:
DataItem
Localized Control Type: row
Control Pattern: SelectionItem
Role:
ROLE_TABLE_ROW
AXRole:
AXRow
AXSubrole:
AXRoleDescription: 'row'
row
inside treegrid
Role:
ROLE_SYSTEM_OUTLINEITEM
Control Type:
DataItem
Localized Control Type: row
Control Pattern: SelectionItem
Role:
ROLE_TABLE_ROW
AXRole:
AXRow
AXSubrole:
AXRoleDescription: 'row'
rowgroup
Role:
ROLE_SYSTEM_GROUPING
Control Type:
Group
Role:
ROLE_PANEL
Not mapped
rowheader
Role:
ROLE_SYSTEM_ROWHEADER
Interface: IAccessibleTableCell
Control Type:
HeaderItem
Role:
ROLE_ROW_HEADER
Interface: TableCell
AXRole:
AXCell
AXSubrole:
AXRoleDescription: 'cell'
scrollbar
Role:
ROLE_SYSTEM_SCROLLBAR
Interface: IAcesssibleValue
Control Type:
ScrollBar
Control Pattern: RangeValue
Role:
ROLE_SCROLL_BAR
Interface: Value
false
for all Value
methods that provide a means to modify the value.
AXRole:
AXScrollBar
AXSubrole:
AXRoleDescription: 'scroll bar'
search
Role:
IA2_ROLE_LANDMARK
Object Attribute: xml-roles:search
Control Type:
Group
Localized Control Type: search
Landmark Type: Search
Role:
ROLE_LANDMARK
Object Attribute: xml-roles:search
AXRole:
AXGroup
AXSubrole: AXLandmarkSearch
AXRoleDescription: 'search'
searchbox
Role:
ROLE_SYSTEM_TEXT
Object Attribute: text-input-type:search
Control Type:
Edit
Localized Control Type: search box
Role:
ROLE_ENTRY
Object Attribute: xml-roles:searchbox
Interface: EditableText
if aria-readonly
is not "true"
AXRole:
AXTextField
AXSubrole: AXSearchField
AXRoleDescription: 'search text field'
separator
(non-focusable)
Role:
ROLE_SYSTEM_SEPARATOR
Control Type:
Separator
Role:
ROLE_SEPARATOR
AXRole:
AXSplitter
AXSubrole:
AXRoleDescription: 'splitter'
separator
(focusable)
Role:
ROLE_SYSTEM_SEPARATOR
Interface: IAccessibleValue
Control Type:
Thumb
Control Pattern: RangeValue
Role:
ROLE_SEPARATOR
Interface: Value
false
for all Value
methods that provide a means to modify the value.
AXRole:
AXSplitter
AXSubrole:
AXRoleDescription: 'splitter'
slider
Role:
ROLE_SYSTEM_SLIDER
Interface: IAcesssibleValue
Control Type:
Slider
Control Pattern: RangeValue
Role:
ROLE_SLIDER
Interface: Value
false
for all Value
methods that provide a means to modify the value.
AXRole:
AXSlider
AXSubrole:
AXRoleDescription: 'slider'
spinbutton
Role:
ROLE_SYSTEM_SPINBUTTON
Interface: IAcesssibleValue
Control Type:
Spinner
Control Pattern: RangeValue
Role:
ROLE_SPIN_BUTTON
Interface: Value
false
for all Value
methods that provide a means to modify the value.
AXRole:
AXIncrementor
AXSubrole:
AXRoleDescription: 'stepper'
status
Role:
ROLE_SYSTEM_STATUSBAR
Object Attribute: container-live:polite
Object Attribute: live:polite
Object Attribute: container-live-role:status
Control Type:
Group
Localized Control Type: status
LiveSetting: Polite (1)
Role:
ROLE_STATUSBAR
Object Attribute: container-live:polite
Object Attribute: live:polite
Object Attribute: container-live-role:status
AXRole:
AXGroup
AXSubrole: AXApplicationStatus
AXRoleDescription: 'application status'
switch
Role:
ROLE_SYSTEM_CHECKBUTTON
Role: IA2_ROLE_TOGGLE_BUTTON
Object Attribute: xml-roles:switch
See also: aria-checked
in the State and Property Mapping Table
Control Type:
Button
Localized Control Type: toggleswitch
Control Pattern: Toggle
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_TOGGLE_BUTTON
Object Attribute: xml-roles:switch
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXCheckBox
AXSubrole: AXSwitch
AXRoleDescription: 'switch'
See also: aria-checked
in the State and Property Mapping Table
tab
Role:
ROLE_SYSTEM_PAGETAB
State: STATE_SYSTEM_SELECTED
if focus is inside tabpanel
associated with aria-labelledby
Control Type:
TabItem
Role:
ROLE_PAGE_TAB
State: STATE_SELECTED
if focus is inside tabpanel
associated with aria-labelledby
AXRole:
AXRadioButton
AXSubrole:
AXRoleDescription: 'tab'
table
Role:
ROLE_SYSTEM_TABLE
Object Attribute: xml-roles:table
Interface: IAccessibleTable2
Control Type:
Table
Control Pattern: Grid
Control Pattern: Table
Role:
ROLE_TABLE
Object Attribute: xml-roles:table
Interface: Table
AXRole:
AXTable
AXSubrole:
AXRoleDescription: 'table'
AXColumnHeaderUIElements: a list of pointers to the columnheader elements
AXHeader: a pointer to the row or group containing those columnheader elements
AXRowHeaderUIElements: a list of pointers to the rowheader elements
tablist
Role:
ROLE_SYSTEM_PAGETABLIST
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
Tab
Control Pattern: Selection
Role:
ROLE_PAGE_TAB_LIST
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXTabGroup
AXSubrole:
AXRoleDescription: 'tab group'
tabpanel
Role:
ROLE_SYSTEM_PANE
or ROLE_SYSTEM_PROPERTYPAGE
Control Type:
Pane
Role:
ROLE_SCROLL_PANE
AXRole:
AXGroup
AXSubrole: AXTabPanel
AXRoleDescription: 'tab panel'
term
Role:
IA2_ROLE_TEXT_FRAME
Object Attribute: xml-roles:term
Control Type:
Text
Localized Control Type: term
Role:
ROLE_DESCRIPTION_TERM
AXRole:
AXGroup
AXSubrole: AXTerm
AXRoleDescription: 'term'
textbox
when aria-multiline
is false
Role:
ROLE_SYSTEM_TEXT
State: IA2_STATE_SINGLE_LINE
Control Type:
Edit
Role:
ROLE_ENTRY
State: STATE_SINGLE_LINE
Interface: EditableText
if aria-readonly
is not "true"
AXRole:
AXTextField
AXSubrole:
AXRoleDescription: 'text field'
textbox
when aria-multiline
is true
Role:
ROLE_SYSTEM_TEXT
State: IA2_STATE_MULTI_LINE
Control Type:
Edit
Role:
ROLE_ENTRY
State: STATE_MULTI_LINE
Interface: EditableText
if aria-readonly
is not "true"
AXRole:
AXTextArea
AXSubrole:
AXRoleDescription: 'text entry area'
timer
Object Attribute:
xml-roles:timer
Object Attribute: container-live:off
Object Attribute: live:off
Object Attribute: container-live-role:timer
Control Type:
Group
Localized Control Type: timer
LiveSetting: Off (0)
Role:
ROLE_TIMER
Object Attribute: container-live:off
Object Attribute: live:off
Object Attribute: container-live-role:timer
AXRole:
AXGroup
AXSubrole: AXApplicationTimer
AXRoleDescription: 'timer'
toolbar
Role:
ROLE_SYSTEM_TOOLBAR
Control Type:
ToolBar
Role:
ROLE_TOOL_BAR
AXRole:
AXToolbar
AXSubrole:
AXRoleDescription: 'toolbar'
tooltip
Role:
ROLE_SYSTEM_TOOLTIP
Control Type:
ToolTip
Role:
ROLE_TOOL_TIP
AXRole:
AXGroup
AXSubrole: AXUserInterfaceTooltip
AXRoleDescription: 'tooltip'
tree
Role:
ROLE_SYSTEM_OUTLINE
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
Tree
Role:
ROLE_TREE
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXOutline
AXSubrole:
AXRoleDescription: 'outline'
treegrid
Role:
ROLE_SYSTEM_OUTLINE
Interface: IAccessibleTable2
Method: IAccessible::accSelect()
Method: IAccessible::get_accSelection()
Control Type:
DataGrid
Role:
ROLE_TREE_TABLE
Interface: Table
Interface: Selection
false
for all Selection
methods that provide a means to modify the selection.
AXRole:
AXTable
AXSubrole:
AXRoleDescription: 'table'
treeitem
Role:
ROLE_SYSTEM_OUTLINEITEM
See also: aria-checked
in the State and Property Mapping Table
Control Type:
TreeItem
See also: aria-checked
in the State and Property Mapping Table
Role:
ROLE_TREE_ITEM
See also: aria-checked
in the State and Property Mapping Table
AXRole:
AXRow
AXSubrole: AXOutlineRow
AXRoleDescription: 'outline row'
See also: aria-checked
in the State and Property Mapping Table
5.5 State and Property Mapping §
5.5.1 General rules §
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
. See the rules in Controlling focus with aria-activedescendant
.aria-labelledby
attribute but the native HTML semantics must still be exposed. aria-
" prefix from the name, if the API supports it. For example, aria-foo="bar" would be exposed with a text string foo=bar
in UIA, since aria-foo
is not a currently known WAI-ARIA property. The following list specifies the accessibility APIs for exposing properties as text strings.
property:string
)AriaProperties
(property=string
) property:string
) aria-checked="true"
is specified on STATE_SYSTEM_CHECKED
. User agents MAY expose non-relevant attributes as a text string if the API supports it as described above.
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.0 [wai-aria-1.1]].5.5.2 State and Property Mapping Table §
5.5.2.1 Not Mapped §
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. mappingTableLabels
object in the section of this document.
WAI-ARIA State or Property
MSAA + IAccessible2
UIA
ATK/AT-SPI
AX API
aria-activedescendant
aria-activedescendant
, Handling focus changes from the Assistive Technology, and ID Reference Error Processing in Relations.STATE_SYSTEM_FOCUSED
state. When this happens, standard focus event and event handling should apply.
aria-activedescendant
, Handling focus changes from the Assistive Technology, and ID Reference Error Processing in Relations.
aria-activedescendant
, Handling focus changes from the Assistive Technology, and ID Reference Error Processing in Relations.STATE_FOCUSED
state. When this happens, standard focus event and event handling should apply.
Property:
AXSelectedRows
: pointer to active descendant node
aria-atomic
=true
Object Attribute:
atomic:true
Object Attribute: container-atomic:true
Object Attribute: container-atomic:true
on all descendants
Relation: IA2_RELATION_MEMBER_OF
pointing to this element (the atomic root)
See also: Changes to document content or node visibility
Property:
AriaProperties.atomic
: true
See also: Changes to document content or node visibility
Object Attribute:
atomic:true
Object Attribute: container-atomic:true
Object Attribute: container-atomic:true
on all descendants
Relation: RELATION_MEMBER_OF
pointing to this element (the atomic root)
See also: Changes to document content or node visibility
Property:
AXARIAAtomic
: YES
See also: Changes to document content or node visibility
aria-atomic
=false
Not mapped* — OPTIONAL — but if mapped:
Object Attribute: atomic:false
Object Attribute: container-atomic:false
Object Attribute: container-atomic:false
on all descendants
Relation: IA2_RELATION_MEMBER_OF
pointing to this element (the atomic root)
See also: Changes to document content or node visibility
Property:
AriaProperties.atomic
: false
See also: Changes to document content or node visibility
Not mapped* — OPTIONAL — but if mapped:
Object Attribute: atomic:false
Object Attribute: container-atomic:false
Object Attribute: container-atomic:false
on all descendants
Relation: RELATION_MEMBER_OF
pointing to this element (the atomic root)
See also: Changes to document content or node visibility
Property:
AXARIAAtomic
: NO
See also: Changes to document content or node visibility
aria-autocomplete
=inline
, list
, or both
Object Attribute:
autocomplete:
State: IA2_STATE_SUPPORTS_AUTOCOMPLETION
Not mapped
Object Attribute:
autocomplete:
State: STATE_SUPPORTS_AUTOCOMPLETION
Not mapped
aria-autocomplete
=none
Not mapped*
Not mapped*
Not mapped*
Not mapped*
aria-busy
=true
State:
STATE_SYSTEM_BUSY
Property:
AriaProperties.busy
: true
State:
STATE_BUSY
Property:
AXElementBusy
: YES
aria-busy
=false
State:
STATE_SYSTEM_BUSY
not exposed
Property:
AriaProperties.busy
: false
State:
STATE_BUSY
not exposed
Property:
AXElementBusy
: NO
aria-checked
=true
State:
STATE_SYSTEM_CHECKED
Object Attribute: checkable:true
Property:
Toggle.ToggleState
: On (1)
Property: SelectionItem.IsSelected
: True
for radio
and menuitemradio
State:
STATE_CHECKABLE
State: STATE_CHECKED
Property:
AXValue
: 1
Property: AXMenuItemMarkChar
: ✓
for menuitemcheckbox
and menuitemradio
aria-checked
=false
State:
STATE_SYSTEM_CHECKED
not exposed
Object Attribute: checkable:true
Property:
Toggle.ToggleState
: Off (0)
Property: SelectionItem.IsSelected
: False
for radio
and menuitemradio
State:
STATE_CHECKABLE
State: STATE_CHECKED
not exposed
Property:
AXValue
: 0
Property: AXMenuItemMarkChar
:
for menuitemcheckbox
and menuitemradio
aria-checked
=mixed
State:
STATE_SYSTEM_MIXED
Object Attribute: checkable:true
Property:
Toggle.ToggleState
: Indeterminate (2)
State:
STATE_INDETERMINATE
State: STATE_CHECKABLE
State: STATE_CHECKED
not exposed
Property:
AXValue
: 2
Property: AXMenuItemMarkChar
:
for menuitemcheckbox
and menuitemradio
aria-checked
is undefined
Not mapped
Not mapped
Not mapped
Not mapped
aria-colcount
Object Attribute:
colcount:
Method: IAccessible2::groupPosition()
: similarItemsInGroup=
on cells and headers
Property:
Grid.ColumnCount
:
aria-colcount
is -1
, calculate the column count based on the number of columns in the DOM and expose that value as described below along with STATE_INDETERMINATE
.colcount:
Method: atk_table_get_n_columns()
:
Property:
AXARIAColumnCount
:
aria-colindex
Object Attribute:
colindex:
Method: IAccessible2::groupPosition()
: positionInGroup=
on cells and headers
Property:
GridItem.Column
:
(zero-based)
Object Attribute:
colindex:
Method: atk_table_cell_get_position()
: column=
Property:
AXARIAColumnIndex
:
aria-colspan
Object Attribute:
colspan:
Method: IAccessibleTableCell::columnExtent()
:
Property:
GridItem.ColumnSpan
:
Object Attribute:
colspan:
Method: atk_table_cell_get_row_column_span()
: column_span=
Property:
AXColumnIndexRange.length
:
aria-controls
Relation:
IA2_RELATION_CONTROLLER_FOR
points to accessible nodes matching IDREFs
Reverse Relation: IA2_RELATION_CONTROLLED_BY
points to element
See also: Mapping Additional Relations
Property:
ControllerFor
: pointers to accessible nodes matching IDREFs
Relation:
RELATION_CONTROLLER_FOR
points to accessible nodes matching IDREFs
Reverse Relation: RELATION_CONTROLLED_BY
points to element
See also: Mapping Additional Relations
Property:
AXLinkedUIElements
: pointers to accessible nodes matching IDREFs
aria-current
with non-false
allowed value
Object Attribute:
current:
Property:
AriaProperties.current
:
Object Attribute:
current:
State: STATE_ACTIVE
Property:
AXARIACurrent
:
aria-current
with unrecognized value
Object Attribute:
current:true
Property:
AriaProperties.current
: true
Object Attribute:
current:true
State: STATE_ACTIVE
Property:
AXARIACurrent
: true
aria-current
is false
or undefined
Not mapped*
Not mapped*
Not mapped*
Not mapped*
aria-describedby
Property:
accDescription
:
Relation: IA2_RELATION_DESCRIBED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: IA2_RELATION_DESCRIPTION_FOR
points to element
See also: Name Computation and Mapping Additional Relations
Property:
FullDescription
:
Property: DescribedBy
: points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
See also: Name Computation
Property:
Description
:
Relation: RELATION_DESCRIBED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: RELATION_DESCRIPTION_FOR
points to element
See also: Name Computation and Mapping Additional Relations
Property:
AXHelp
:
See also: Name Computation
aria-details
Relation:
IA2_RELATION_DETAILS
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: IA2_RELATION_DETAILS_FOR
points to element
See also: Mapping Additional Relations
Property:
DescribedBy
: points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Relation:
RELATION_DETAILS
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: RELATION_DETAILS_FOR
points to element
See also: Mapping Additional Relations
Not mapped*
aria-disabled
=true
State:
STATE_SYSTEM_UNAVAILABLE
State: STATE_SYSTEM_UNAVAILABLE
on all descendants with STATE_SYSTEM_FOCUSABLE
Property:
IsEnabled
: false
State:
STATE_ENABLED
not exposed
Property:
AXEnabled
: NO
aria-disabled
=false
State:
STATE_SYSTEM_UNAVAILABLE
not exposed
Property:
IsEnabled
: true
State:
STATE_ENABLED
Property:
AXEnabled
: YES
aria-dropeffect
=copy
, move
, link
, execute
, or popup
Object Attribute:
dropeffect:
Property:
AriaProperties.dropeffect
:
Object Attribute:
dropeffect:
array AXDropEffects
aria-dropeffect
=none
Object Attribute:
dropeffect:none
if there are no other valid tokens
Not mapped if not specified by the author
Not mapped*
Object Attribute:
dropeffect:none
if there are no other valid tokens
Not mapped if not specified by the author
Not mapped*
aria-errormessage
Relation:
IA2_RELATION_ERROR
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: IA2_RELATION_ERROR_FOR
points to element
See also: Mapping Additional Relations
Property:
ControllerFor
: pointer to the target accessible object
Relation:
RELATION_ERROR_MESSAGE
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: RELATION_ERROR_FOR
points to element
See also: Mapping Additional Relations
Property:
AXValidationError
: textual content of the referenced element
aria-expanded
=true
State:
STATE_SYSTEM_EXPANDED
Property:
ExpandCollapse.ExpandCollapseState
: Expanded
State:
STATE_EXPANDABLE
State: STATE_EXPANDED
Property:
AXExpanded
: YES
aria-expanded
=false
State:
STATE_SYSTEM_COLLAPSED
Property:
ExpandCollapse.ExpandCollapseState
: Collapsed
State:
STATE_EXPANDABLE
State: STATE_EXPANDED
not exposed
Property:
AXExpanded
: NO
aria-expanded
is undefined
Not mapped
Not mapped
Not mapped
Not mapped
aria-flowto
Relation:
IA2_RELATION_FLOW_TO
points to accessible nodes matching IDREFs
Reverse Relation: IA2_RELATION_FLOW_FROM
points to element
See also: Mapping Additional Relations
Property:
FlowsTo
: pointers to accessible nodes matching IDREFs
Relation:
RELATION_FLOWS_TO
points to accessible nodes matching IDREFs
Reverse Relation: RELATION_FLOWS_FROM
points to element
See also: Mapping Additional Relations
Property:
AXLinkedUIElements
: pointers to accessible nodes matching IDREFs
aria-grabbed
=true
Object Attribute:
grabbed:true
Property:
AriaProperties.grabbed
: true
Object Attribute:
grabbed:true
Property:
AXGrabbed
: YES
aria-grabbed
=false
Object Attribute:
grabbed:false
Property:
AriaProperties.grabbed
: false
Object Attribute:
grabbed:false
Property:
AXGrabbed
: NO
aria-grabbed
is undefined
Not mapped
Not mapped
Not mapped
Not mapped
aria-haspopup
=true
State:
STATE_SYSTEM_HASPOPUP
Object Attribute: haspopup:true
Control Pattern:
ExpandCollapse
See also: aria-expanded
State:
STATE_HAS_POPUP
Object Attribute: haspopup:true
Property:
Action
: AXShowMenu
aria-haspopup
=false
State:
STATE_SYSTEM_HASPOPUP
not exposed
Object Attribute: haspopup:false
Not mapped*
Not mapped*
Not mapped*
aria-haspopup
=dialog
State:
STATE_SYSTEM_HASPOPUP
Object Attribute: haspopup:dialog
Control Pattern:
ExpandCollapse
See also: aria-expanded
State:
STATE_HAS_POPUP
Object Attribute: haspopup:dialog
Action:
AXShowMenu
aria-haspopup
=listbox
State:
STATE_SYSTEM_HASPOPUP
Object Attribute: haspopup:listbox
Control Pattern:
ExpandCollapse
See also: aria-expanded
State:
STATE_HAS_POPUP
Object Attribute: haspopup:listbox
Action:
AXShowMenu
aria-haspopup
=menu
State:
STATE_SYSTEM_HASPOPUP
Object Attribute: haspopup:menu
Control Pattern:
ExpandCollapse
See also: aria-expanded
State:
STATE_HAS_POPUP
Object Attribute: haspopup:menu
Action:
AXShowMenu
aria-haspopup
=tree
State:
STATE_SYSTEM_HASPOPUP
Object Attribute: haspopup:tree
Control Pattern:
ExpandCollapse
See also: aria-expanded
State:
STATE_HAS_POPUP
Object Attribute: haspopup:tree
Action:
AXShowMenu
aria-hidden
=true
on unfocused element
Element SHOULD NOT be exposed
See also: Including Elements in the Accessibility Tree
Element SHOULD NOT be exposed
See also: Including Elements in the Accessibility Tree
Element SHOULD NOT be exposed
See also: Including Elements in the Accessibility Tree
Element SHOULD NOT be exposed
See also: Including Elements in the Accessibility Tree
aria-hidden
=true
when element is focused or fires an accessibility event
Object Attribute:
hidden:true
See also: Including Elements in the Accessibility Tree
Property:
AriaProperties.hidden
: true
See also: Including Elements in the Accessibility Tree
Object Attribute:
hidden:true
See also: Including Elements in the Accessibility Tree
Not mapped
See also: Including Elements in the Accessibility Tree
aria-hidden
=false
Not mapped
Not mapped
Not mapped
Not mapped
aria-invalid
=true
State:
IA2_STATE_INVALID_ENTRY
Text Attribute: invalid:true
Property:
IsDataValidForForm
: false
State:
STATE_INVALID_ENTRY
Text Attribute: invalid:true
Property:
AXInvalid
: true
aria-invalid
=false
State:
IA2_STATE_INVALID_ENTRY
not exposed
Property:
IsDataValidForForm
: true
State:
STATE_INVALID_ENTRY
not exposed
Property:
AXInvalid
: false
aria-invalid
=spelling
or grammar
State:
IA2_STATE_INVALID_ENTRY
Text Attribute: invalid:
Property:
IsDataValidForForm
:
State:
STATE_INVALID_ENTRY
Text Attribute: invalid:
Property:
AXInvalid
:
aria-invalid
with unrecognized value
State:
IA2_STATE_INVALID_ENTRY
Text Attribute: invalid:true
Property:
IsDataValidForForm
: false
State:
STATE_INVALID_ENTRY
Text Attribute: invalid:true
Property:
AXInvalid
: true
aria-keyshortcuts
Property:
accKeyboardShortcut
:
Property:
AcceleratorKey
:
Object Attribute:
keyshortcuts:
Not mapped*
aria-label
Property:
accName
:
See also: Name Computation
Property:
Name
:
See also: Name Computation
Property:
Name
:
See also: Name Computation
Property:
AXDescription
:
See also: Name Computation
aria-labelledby
Property:
accName
:
Relation: IA2_RELATION_LABELLED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: IA2_RELATION_LABEL_FOR
points to element
See also: Name Computation and Mapping Additional Relations
Property:
Name
:
Property: LabeledBy
: points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
See also: Name Computation
Property:
Name
:
Relation: RELATION_LABELLED_BY
points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
Reverse Relation: RELATION_LABEL_FOR
points to element
See also: Name Computation and Mapping Additional Relations
Property:
AXDescription
:
Property: AXTitleUIElement
: points to accessible node matching IDREF, if there is a single referenced element that is in the accessibility tree
See also: Name Computation
aria-level
on non-heading
Object Attribute:
level:
Method: IAccessible2::groupPosition()
: groupLevel=
on roles that support aria-posinset
and aria-setsize
See also: groupPosition()
Property:
AriaProperties.level
:
Object Attribute:
level:
Property:
AXDisclosureLevel
:
(zero-based), when used on an outline row (like a treeitem
or group
)
aria-level
on heading
Object Attribute:
level:
Property:
AriaProperties.level
:
Property: StyleId_Heading
:
Object Attribute:
level:
Property:
AXValue
:
aria-live
=assertive
Object Attribute:
live:assertive
Object Attribute: container-live:assertive
Object Attribute: container-live:assertive
on all descendants
See also: Changes to document content or node visibility
Property:
: LiveSetting
"assertive"
See also: Changes to document content or node visibility
Object Attribute:
live:assertive
Object Attribute: container-live:assertive
Object Attribute: container-live:assertive
on all descendants
See also: Changes to document content or node visibility
Property:
AXARIALive
: "assertive"
See also: Changes to document content or node visibility
aria-live
=polite
Object Attribute:
live:polite
Object Attribute: container-live:polite
Object Attribute: container-live:polite
on all descendants
See also: Changes to document content or node visibility
Property:
: LiveSetting
"polite"
See also: Changes to document content or node visibility
Object Attribute:
live:polite
Object Attribute: container-live:polite
Object Attribute: container-live:polite
on all descendants
See also: Changes to document content or node visibility
Property:
AXARIALive
: "polite"
See also: Changes to document content or node visibility
aria-live
=off
Object Attribute:
live:off
Object Attribute: container-live:off
Object Attribute: container-live:off
on all descendants
Property:
: LiveSetting
"off"
Object Attribute:
live:off
Object Attribute: container-live:off
Object Attribute: container-live:off
on all descendants
Property:
AXARIALive
: "off"
aria-modal
=true
State:
IA2_STATE_MODAL
Property:
Window.IsModal
: true
State:
STATE_MODAL
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-modal
=false
State:
IA2_STATE_MODAL
not exposed
Property:
Window.IsModal
: false
State:
STATE_MODAL
not exposed
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-multiline
=true
State:
IA2_STATE_MULTI_LINE
State: IA2_STATE_SINGLE_LINE
not exposed
Property:
AriaProperties.multiline
: true
State:
STATE_MULTI_LINE
State: STATE_SINGLE_LINE
not exposed
Not mapped
See also: textbox
in the Role Mapping Table
aria-multiline
=false
State:
IA2_STATE_SINGLE_LINE
State: IA2_STATE_MULTI_LINE
not exposed
Not mapped*
State:
STATE_SINGLE_LINE
State: STATE_MULTI_LINE
not exposed
Not mapped
See also: textbox
in the Role Mapping Table
aria-multiselectable
=true
State:
STATE_SYSTEM_MULTISELECTABLE
State: STATE_SYSTEM_EXTSELECTABLE
See also: Selection for details on accessibility events
Property:
Selection.CanSelectMultiple
: true
See also: Selection for details on accessibility events
State:
STATE_MULTISELECTABLE
See also: Selection for details on accessibility events
Not mapped*
See also: Selection for details on accessibility events
aria-multiselectable
=false
State:
STATE_SYSTEM_MULTISELECTABLE
not exposed
State: STATE_SYSTEM_EXTSELECTABLE
not exposed
See also: Selection for details on accessibility events
Not mapped*
State:
STATE_MULTISELECTABLE
not exposed
Not mapped*
aria-orientation
=horizontal
State:
IA2_STATE_HORIZONTAL
State: IA2_STATE_VERTICAL
not exposed
Property:
Orientation
: horizontal
State:
STATE_HORIZONTAL
State: STATE_VERTICAL
not exposed
Property:
AXOrientation
: AXHorizontalOrientation
aria-orientation
=vertical
State:
IA2_STATE_VERTICAL
State: IA2_STATE_HORIZONTAL
not exposed
Property:
Orientation
: vertical
State:
STATE_VERTICAL
State: STATE_HORIZONTAL
not exposed
Property:
AXOrientation
: AXVerticalOrientation
aria-orientation
is undefined
Not mapped*
Not mapped*
State:
STATE_VERTICAL
not exposed
State: STATE_HORIZONTAL
not exposed
Property:
AXOrientation
: AXUnknownOrientation
aria-owns
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
Reverse Relation: IA2_RELATION_NODE_CHILD_OF
points to element
See also: Mapping Additional Relations
Expose the elements that are referenced by this property as children of the current element. If multiple
aria-owns
relationships are found, use only the first one.
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
Reverse Relation: RELATION_NODE_CHILD_OF
points to element
See also: Mapping Additional Relations
Property:
AXOwns
: pointers to accessible nodes matching IDREFs
aria-placeholder
Object Attribute:
placeholder-text:
Property:
AriaProperties.placeholder
:
Object Attribute:
placeholder-text:
Property:
AXPlaceholderValue
:
aria-posinset
Object Attribute:
posinset:
See also: Group Position
Property:
AriaProperties.posinset
:
See also: Group Position
Object Attribute:
posinset:
See also: Group Position
Property:
AXARIAPosInSet
:
See also: Group Position
aria-pressed
=true
State:
STATE_SYSTEM_PRESSED
See also: button
with defined value for aria-pressed
Property:
Toggle.ToggleState
: On (1)
State:
STATE_PRESSED
See also: button
with defined value for aria-pressed
Property:
AXValue
: 1
See also: button
with defined value for aria-pressed
aria-pressed
=mixed
State:
STATE_SYSTEM_MIXED
See also: button
with defined value for aria-pressed
Property:
Toggle.ToggleState
: Indeterminate (2)
State:
STATE_INDETERMINATE
See also: button
with defined value for aria-pressed
Property:
AXValue
: 2
See also: button
with defined value for aria-pressed
aria-pressed
=false
State:
STATE_SYSTEM_PRESSED
not exposed
See also: button
with defined value for aria-pressed
Property:
Toggle.ToggleState
: Off (3)
State:
STATE_PRESSED
not exposed
See also: button
with defined value for aria-pressed
Property:
AXValue
: 0
See also: button
with defined value for aria-pressed
aria-pressed
is undefined
Not mapped*
Not mapped*
Not mapped*
Not mapped*
aria-readonly
=true
State:
STATE_SYSTEM_READONLY
Property:
Value.IsReadOnly
: true
State:
STATE_READ_ONLY
State: STATE_EDITABLE
not exposed on text input roles
State: STATE_CHECKABLE
not exposed on roles supporting aria-checked
State: STATE_CHECKABLE
not exposed on radio descendants when used on a radiogroup
Method:
AXUIElementIsAttributeSettable(AXValue)
: NO
aria-readonly
=false
State:
STATE_SYSTEM_READONLY
not exposed
State: IA2_STATE_EDITABLE
Property:
Value.IsReadOnly
: false
State:
STATE_READ_ONLY
not exposed
Method:
AXUIElementIsAttributeSettable(AXValue)
: YES
aria-readonly
is unspecified on gridcell
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"
.
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"
.
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"
.
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-relevant
Object Attribute:
relevant:
Object Attribute: container-relevant:
Object Attribute: container-relevant:
on all descendants
See also: Changes to document content or node visibility
Property:
AriaProperties.relevant
:
See also: Changes to document content or node visibility
Object Attribute:
relevant:
Object Attribute: container-relevant:
Object Attribute: container-relevant:
on all descendants
See also: Changes to document content or node visibility
Property:
AXARIARelevant
:
See also: Changes to document content or node visibility
aria-required
=true
State:
IA2_STATE_REQUIRED
Property:
IsRequiredForForm
: true
State:
STATE_REQUIRED
Property:
AXRequired
: YES
aria-required
=false
Not mapped*
Not mapped*
Not mapped*
Not mapped*
aria-roledescription
Method:
localizedExtendedRole()
:
Localized Control Type:
Object Attribute:
roledescription:
Property:
AXRoleDescription
:
aria-roledescription
is empty or whitespace characters
Not mapped
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.
Not mapped
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-rowcount
Object Attribute:
rowcount:
Method: IAccessible2::groupPosition()
: similarItemsInGroup=
on rows
Property:
Grid.RowCount
:
aria-rowcount
is -1
, calculate the row count based on the number of rows in the DOM and expose that value as described below along with STATE_INDETERMINATE
.rowcount:
Method: atk_table_get_n_rows()
:
Property:
AXARIARowCount
:
aria-rowindex
Object Attribute:
rowindex:
Method: IAccessible2::groupPosition()
: positionInGroup=
on rows
Property:
GridItem.Row
:
(zero-based)
Object Attribute:
rowindex:
Method: atk_table_cell_get_position()
: row=
Property:
AXARIARowIndex
:
aria-rowspan
Object Attribute:
rowspan:
Method: IAccessibleTableCell::rowExtent()
: column=
Property:
GridItem.RowSpan
:
Object Attribute:
rowspan:
Method: atk_table_cell_get_row_column_span()
: row_span=
Property:
AXRowIndexRange.length
:
aria-selected
=true
State:
STATE_SYSTEM_SELECTABLE
State: STATE_SYSTEM_SELECTED
See also: Selection for details on accessibility events
Property:
SelectionItem.IsSelected
: true
State:
STATE_SELECTABLE
State: STATE_SELECTED
See also: Selection for details on accessibility events
Property:
AXSelected
: YES
aria-selected
=false
State:
STATE_SYSTEM_SELECTABLE
State: STATE_SYSTEM_SELECTED
not exposed
See also: Selection for details on accessibility events
Property:
SelectionItem.IsSelected
: false
State:
STATE_SELECTABLE
State: STATE_SELECTED
not exposed
See also: Selection for details on accessibility events
Property:
AXSelected
: NO
aria-selected
is undefined
Not mapped
Not mapped
Not mapped
Not mapped
aria-setsize
Object Attribute:
setsize:
See also: Group Position
Property:
AriaProperties.setsize
:
See also: Group Position
aria-setsize
is -1
, the exposed value should be based on the number of objects in the DOM.setsize:
State: STATE_INDETERMINATE
if the author-provided value is -1
See also: Group Position
Property:
AXARIASetSize
:
See also: Group Position
aria-sort
=ascending
Object Attribute:
sort:ascending
Property:
AriaProperties.sort
: ascending
Property: ItemStatus
: ascending
if the element maps to HeaderItem
Control Type
Object Attribute:
sort:ascending
Property:
AXSortDirection
: AXAscendingSortDirection
aria-sort
=descending
Object Attribute:
sort:descending
Property:
AriaProperties.sort
: descending
Property: ItemStatus
: descending
if the element maps to HeaderItem
Control Type
Object Attribute:
sort:descending
Property:
AXSortDirection
: AXDescendingSortDirection
aria-sort
=other
Object Attribute:
sort:other
Property:
AriaProperties.sort
: other
Property: ItemStatus
: other
if the element maps to HeaderItem
Control Type
Object Attribute:
sort:other
Property:
AXSortDirection
: AXUnknownSortDirection
aria-sort
=none
Object Attribute:
sort:none
, if the value is not unspecified
Not mapped*
Object Attribute:
sort:none
, if the value is not unspecified
Not mapped*
aria-valuemax
Method:
IAccessibleValue::maximumValue()
:
See also: Widget values
Property:
RangeValue.Maximum
:
See also: Widget values
Method:
atk_value_get_maximum_value()
:
See also: Widget values
Property:
AXMaxValue
:
See also: Widget values
aria-valuemin
Method:
IAccessibleValue::minimumValue()
:
See also: Widget values
Property:
RangeValue.Minimum
:
See also: Widget values
Method:
atk_value_get_minimum_value()
:
See also: Widget values
Property:
AXMinValue
:
See also: Widget values
aria-valuenow
Method:
IAccessibleValue::currentValue()
:
Method: IAccessible::get_accValue()
:
if aria-valuetext
is not defined
See also: Widget values
Property:
RangeValue.Value
:
See also: Widget values
Method:
atk_value_get_current_value()
:
See also: Widget values
Property:
AXValue
:
See also: Widget values
aria-valuetext
Method:
IAccessible::get_accValue()
:
Object Attribute: valuetext:
See also: Widget values
Property:
Value.Value
:
See also: Widget values
Object Attribute:
valuetext:
See also: Widget values
Property:
AXValueDescription
:
See also: Widget values
5.6 Special Processing Requiring Additional Computation §
5.6.1 Name and Description §
5.6.2 Widget Values §
progressbar
, spinbutton
, and slider
use aria-valuemin
and aria-valuemax
to specify the range of valid values, aria-valuenow
to specify the current value, and optionally aria-valuetext
to specify a text string equivalent for the current value.aria-valuenow
is greater than aria-valuemin
and less than aria-valuemax
.aria-valuetext
property set, but not aria-valuenow
, user agents MUST expose the string value of aria-valuetext
as specified in State and Property Mapping.5.6.3 Relations §
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. 5.6.3.1 ID Reference Error Processing §
getElementById
.aria-activedescendant
is defined as referencing only a single ID reference. Any aria-activedescendant
value that does not match an existing IDREF exactly is an author error and will not match any element in the DOM.5.6.3.2 Reverse Relations §
aria-labelledby
and aria-described
by 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.
WAI-ARIA Relation
IAccessible2
ATK/AT-SPI
aria-controls
references the element's IDIA2_RELATION_CONTROLLED_BY
RELATION_CONTROLLED_BY
aria-describedby
references the element's IDIA2_RELATION_DESCRIPTION_FOR
RELATION_DESCRIPTION_FOR
aria-details
references the element's IDIA2_RELATION_DETAILS_FOR
RELATION_DETAILS_FOR
aria-errormessage
references the element's IDIA2_RELATION_ERROR_FOR
RELATION_ERROR_FOR
aria-flowto
references the element's IDIA2_RELATION_FLOW_FROM
RELATION_FLOWS_FROM
aria-labelledby
references the element's IDIA2_RELATION_LABEL_FOR
RELATION_LABEL_FOR
aria-owns
references the element's IDIA2_RELATION_NODE_CHILD_OF/IA2_RELATION_NODE_PARENT_OF
RELATION_NODE_CHILD_OF/RELATION_NODE_PARENT_OF
aria-labelledby
and HTML are used, the user agent MUST use the WAI-ARIA relation and MUST ignore the HTML label relation.
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.5.6.3.3 Implied reverse relations §
role="treeitem"
where the ancestor does not have an aria-owns
property and descendants of elements with aria-atomic
property.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.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"
.5.6.4 Group Position §
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. aria-level
is not provided or inherited for an element of role treeitem
, user agents implementing IAccessible2 or ATK/AT-SPI MUST compute it by following the explicit or computed RELATION_NODE_CHILD_OF
relations.aria-posinset
and aria-setsize
are not provided, user agents MUST compute them as follows:
role="treeitem"
, 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.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.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.5.7 Actions §
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.5.8 Events §
5.8.1 State and Property Change Events §
aria-activedescendant
changes. WAI-ARIA properties that are expected to change include aria-activedescendant
, aria-valuenow
, and aria-valuetext
.aria-describedby
, aria-label
, and aria-labelledby
.mappingTableLabels
object in the section of this document.
State or Property
MSAA + IAccessible2 event
UIA event
ATK/AT-SPI event
AX API Notification
aria-activedescendant
See Controlling focus with
aria-activedescendant
IA2_EVENT_ACTIVE_DESCENDANT_CHANGED
See Controlling focus with
aria-activedescendant
See Controlling focus with
aria-activedescendant
See Controlling focus with
aria-activedescendant
AXSelectedChildrenChanged
aria-busy
(state)EVENT_OBJECT_STATECHANGE
PropertyChangedEvent
object:state-changed:busy
AXElementBusyChanged
aria-checked
(state)EVENT_OBJECT_STATECHANGE
ToggleStateProperty
as part of toggle
patternobject:state-changed:checked
AXValueChanged
aria-current
(state)IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
PropertyChangedEvent
object:state-changed:active
No notification
aria-disabled
(state)EVENT_OBJECT_STATECHANGE
No event
object:state-changed:enabled
and object:state-changed:sensitive
No notification
aria-dropeffect
(property)IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
No event
object:property-change
No notification
aria-expanded
(state)EVENT_OBJECT_STATECHANGE
expand
/collapse
pattern eventsobject:state-changed:expanded
AXRowExpanded
,
AXRowCollapsed
,
AXRowCountChanged
aria-grabbed
(state)EVENT_OBJECT_SELECTION
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
No event
object:property-change
No notification
aria-invalid
(state)EVENT_OBJECT_STATECHANGE
No event
object:state-changed:invalid_entry
AXInvalidStatusChanged
aria-pressed
(state)EVENT_OBJECT_STATECHANGE
No event
object:state-changed:pressed
No notification
aria-readonly
EVENT_OBJECT_STATECHANGE
No event
object:state-changed:readonly
No notification
aria-required
EVENT_OBJECT_STATECHANGE
No event
object:state-changed:required
No notification
aria-selected
(state)See section Selection for details.
See section Selection for details.
See section Selection for details.
See section Selection for details.
aria-valuenow
EVENT_OBJECT_VALUECHANGE
ValueProperty
property change as part of value
patternobject:property-change:accessible-value
AXValueChanged
aria-valuetext
EVENT_OBJECT_VALUECHANGE
No event
object:property-change:accessible-value
AXValueChanged
5.8.2 Changes to document content or node visibility §
Scenario
MSAA + IAccessible2 event
UIA event
ATK/AT-SPI event
AX API Notification
When text is removed
IA2_EVENT_TEXT_REMOVED
EVENT_OBJECT_LIVEREGIONCHANGED
text_changed::delete
If in a live region,
AXLiveRegionChanged
.
If in aria-errormessage
, AXValidationErrorChanged
.
When text is inserted
IA2_EVENT_TEXT_INSERTED
EVENT_OBJECT_LIVEREGIONCHANGED
text_changed::insert
If in a live region,
AXLiveRegionChanged
.
If in 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
.
If in aria-errormessage
, AXValidationErrorChanged
.
Scenario
MSAA
Microsoft UIA event
ATK/AT-SPI event
AX API Notification
When an accessibility subtree is hidden
EVENT_OBJECT_HIDE
The MSAA event called 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
AXLiveRegionChanged
When an accessibility subtree is removed
EVENT_OBJECT_REORDER
The MSAA event called 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
AXLiveRegionChanged
When an accessibility subtree is shown
EVENT_OBJECT_SHOW
children_changed::add
AXUIElementCreated
AXLiveRegionChanged
When an accessibility subtree is inserted
EVENT_OBJECT_REORDER
children_changed::add
AXUIElementCreated
AXLiveRegionChanged
When an accessibility subtree is moved
Treat it as a removal from one place and insertion in another
Treat it as a removal from one place and insertion in another
Treat it as a removal from one place and insertion in another
AXUIElementDestroyed
/ AXUIElementCreated
AXLiveRegionChanged
When an accessibility subtree is changed (e.g. replaceNode)
Treat it as a removal and insertion
Treat it as a removal and insertion
Treat it as a removal and insertion
AXUIElementDestroyed
/ AXUIElementCreated
AXLiveRegionChanged
, the
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.
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.
event-from-user-input:true
on the accessible object for the event, if the user caused 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.
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.5.8.3 Selection §
aria-selected
changes:
Scenario
MSAA
Microsoft UIA
ATK/AT-SPI
AX API
Focus change
EVENT_OBJECT_SELECTION
and EVENT_OBJECT_STATECHANGE
on newly focused item.UIA_SelectionItem_ElementSelectedEventId
on the newly focused element.
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
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: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:
Scenario
MSAA
Microsoft UIA
ATK/AT-SPI
AX API
Toggle
aria-selected
EVENT_OBJECT_SELECTIONADD
/EVENT_OBJECT_SELECTIONREMOVE
on the item.SelectionItem Control Pattern
:UIA_SelectionItem_ElementAddedToSelectionEventId
or UIA_SelectionItem_ElementRemovedFromSelectionEventId
on the current container.
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
6. Special Document Handling Procedures §
6.1 CSS Selectors §
fooMenuItem
, and WAI-ARIA property aria-haspopup
with value of true
. The presentation MUST be updated for dynamic changes to WAI-ARIA attributes. This allows authors to match styling with WAI-ARIA semantics. A. Appendices §
A.1 Change Log: substantive changes since the WAI-ARIA 1.0 User Agent Implementation Guide Recommendation §
A.2 Acknowledgments §
A.2.1 Participants active in the ARIA WG at the time of publication §
A.2.2 Other ARIA contributors, commenters, and previously active participants §
A.2.3 Enabling funders §
B. References §
B.1 Normative references §
B.2 Informative references §