1. Introduction
This section is informative.
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] 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 or the 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 in legacy browsers which do not support WAI-ARIA. This document includes general information for user agents to handle WAI-ARIA roles, states, and properties. It also includes host-language specific requirements where necessary to complete the accessibility model, in particular for HTML 4. In the future, the PFWG may split out technology-specific versions of this guide, moving some requirements out but retaining this document as the general ARIA implementation guide. 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. In the case of static 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. For traditional static Web pages, assistive technologies, such as screen readers, interact with user agents using the DOM. For UI elements that are known to be interactive, such as HTML form elements and desktop applications, assistive technologies may use platform accessibility APIs. 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: 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 This section is normative. This specification indicates whether a section is normative or informative and the classification applies to the entire section. A statement "This section is normative" or "This section is informative" applies to all sub-sections of that section. Normative sections provide requirements that user agents must follow for an implementation to conform to this specification. The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, RECOMMENDED, MAY, and OPTIONAL in this document are to be interpreted as described in Keywords for use in RFCs to indicate requirement levels [RFC2119]. RFC-2119 keywords are formatted in uppercase and contained in a 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. This section is informative. 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 the Microsoft
Active Accessibility [MSAA], the Microsoft User Interface Automation [UIA-ARIA], the
Mac OS X Accessibility Protocol [AXAPI],
the Linux/Unix Accessibility Toolkit [ATK] and Assistive Technology Service Provider Interface [AT-SPI], and IAccessible2 [IA2]. 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. 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. 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 user interface object whose basic accessibility is exposed
to assistive technology via a platform accessibility API. Accessible objects are included in the accessibility tree. MS UIA represents accessible objects as automation elements. 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 or perceivable to any user.
An element is only considered hidden in the DOM if it or one
of its ancestor elements has the Note: Authors are reminded that visibility:hidden and display:none apply to all CSS media types; therefore, use of either will hide the content from assistive technologies that access the DOM through a rendering engine. However, in order to support assistive technologies that access the DOM directly, or other authoring techniques to visibly hide content (for example, opacity or off-screen positioning), authors need to ensure the 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
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 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 how to process them: aria-live, aria-relevant,
aria-atomic, and aria-busy. Pre-defined live region roles are listed
in the Choosing
Between Special Case Live Regions ([ARIA-PRACTICES],
Section 5.3). 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. 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. A description of the characteristics of classes and
how they relate to each other. 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
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. Presentable to users in ways they can construct an appropriate meaning.
References in this document relate to WCAG 2
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 A literal that solidifies the information expressed by a state, property, role,
or text content. 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). This section is normative. Enabling keyboard navigation in web applications is a necessary step toward making accessible web applications possible. 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. In HTML for example, 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 [UAAG], 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 significant complex widgets and uses the arrow keys to navigate within a complex widget, such as a menu or spreadsheet. The changes that WAI-ARIA introduces in 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. Note: An example is a single-selection Editorial Note: this section is specific to HTML only and may be moved to the HTML Implementation Guide. User agents that support WAI-ARIA for HTML expand the usage of The Note: 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 ( Note: 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: Note: 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: Note: the inability to set DOM focus to the containing element indicates an author error. This section is normative. 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, 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 does not define mechanisms for assistive technologies to directly modify WAI-ARIA information. 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: 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: Note: Text equivalents for hidden referenced objects may still be used in the name and description calculation even when not included in the accessibility tree. 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 ( Editorial Note: The above text differs slightly from the WAI-ARIA specification. The requirement for user agents to expose the WAI-ARIA role instead of the native role was intended to only apply in cases where there is a direct mapping from the WAI-ARIA role to a corresponding role in the accessibility API. The wording of the requirement is not clear in the WAI-ARIA specification, however, and has been interpreted differently by implementers. The requirement has been clarified here and an additional statement added to indicate that user agents may expose native semantics if there is not a direct mapping to a role in the accessibility API. Because there are differing implementations, authors will be advised against adding such WAI-ARIA roles to native elements that have their own semantics in the WAI-ARIA Authoring Practices Guide. When WAI-ARIA states and properties correspond to host language features that have the same implicit WAI-ARIA semantic, it can be problematic if the values become out of sync. For example, the HTML 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: Editorial Note: MSAA does not provide a mechanism for exposing attributes that do not map directly to the API and among implementers, there is no agreement on how to do it. User agents MUST also expose the entire role string through this mechanism and MAY also expose WAI-ARIA attributes and values through this mechanism even when there is a direct mapping to an accessibility API. Browser implementers are advised to publicly document their API methods for exposing any relevant information, so that assistive technology developers can use the API to support user features. Platform accessibility APIs traditionally have had a finite set of predefined roles that are expected by assistive technologies on that platform and only one or two roles may be exposed. In contrast, WAI-ARIA allows multiple roles to be specified as an ordered set of space-separated valid role tokens. The additional roles are fallback roles similar to the concept of specifying multiple fonts in case the first choice font type is not supported. 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: Roles given in this document for ATK/AT-SPI were implemented at the time of publication. However, the maintainers of ATK and of AT-SPI have informed W3C that they have re-engineered several of the roles listed in this specification. Developers are, therefore, strongly urged to consult the most recent implementation specification draft for current, preferred values. Mac OS X AXRole The user agent SHOULD fire The user agent SHOULD fire The user agent SHOULD fire a system alert event.[Note 2] The user agent SHOULD fire a system alert event.[Note 2] The user agent SHOULD fire The user agent SHOULD fire The user agent SHOULD fire a system alert event.[Note 2] The user agent SHOULD fire a system alert event.[Note 2] IAccessible2: Object attribute Object attribute If If If If IAccessible2: Object attribute IAccessible2: Used to help support Parent table also implements Parent table also implements If If IAccessible2: Use The heading level is specified by the Also, expose Also, expose Also, expose IAccessible2: object attributes object attributes IAccessible2: object attribute These objects are not exposed for a submenu if there is a parent menu item spawning the submenu. Since ATK/AT-SPI allows menuitems to have menuitem children, interposing menu objects are not exposed, except for the root parent. If If the option's parent has a If See "Special case" under If If IAccessible2: If If Special case: if an If the object is in the accessibility tree, expose as Not mapped See "Special case" under IAccessible2: Used to help support: Expose as text string in Note: the Note: the Note: the Not mapped Note: the IAccessible2: Used to help support Parent table also implements IAccessible2: object attributes If Expose Expose IAccessible2: object attributes If If IAccessible2: IAccessible2: If
[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 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 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 IAccessible2: Expose as object attribute Expose object attribute IAccessible2: Not mapped* — OPTIONAL — but if mapped: Not mapped* — OPTIONAL — but if mapped: Expose as object attribute Expose object attribute IAccessible2: Expose the Expose as Special case: For IAccessible2: Expose object attribute Expose object attribute Set the Expose as Special case: For IAccessible2: Expose object attribute Clear the Expose object attribute Treat as Expose as Set the IAccessible2: Expose object attribute Expose object attribute Treat as IAccessible2: Expose reverse relations as described in Relations. IAccessible2: If the referenced object is in the accessibility tree, expose pointer to it in Use in calculating the accessible Description as described in Name Computation. Expose in the description property of the accessible object. If the referenced object is in the accessibility tree, expose reverse relations as described in Relations. Propagate to all descendants of the element with IAccessible2: Expose as object attribute Not mapped if not specified by the author. Expose as object attribute Not mapped if not specified by the author. IAccessible2: Expose reverse relations as described in Relations. See Including Elements in the Accessibility Tree. If the object is in the accessibility tree, map all attributes as normal. See Including Elements in the Accessibility Tree. If the object is in the accessibility tree, map all attributes as normal. IAccessible2: Expose object attribute See Including Elements in the Accessibility Tree. If the object is in the accessibility tree, map all attributes as normal. In addition, expose object attribute IAccessible2: IAccessible2: Calculate accessible name as described in Name Computation and expose value as Note: Use in calculating the accessible name as described in Name Computation. Expose in IAccessible2: If the referenced object is in the accessibility tree expose a pointer to it in Use in calculating the accessible name as described in Name Computation. Expose in the name property of the accessible object. If the referenced object is in the accessibility tree, expose a pointer to it in If If Expose as IAccessible2: When used on a When used on an outline row (like a Set IAccessible2: Expose as object attribute IAccessible2: Expose as object attribute IAccessible2: Expose as object attribute See See Set See Selection for details. Set the IAccessible2: For text elements, support the selection methods defined on the See Selection for details. Expose See Selection for details. See Selection for details. See Selection for details. Set Set If multiple The accessibility tree is not modified. IAccessible2: If multiple Expose reverse relations as described in Relations If multiple If not provided for relevant roles, user agents calculate Expose as Additionally, user agents MAY update the IAccessible2: Expose as object attribute Expose as object attribute Expose as IAccessible2: Expose object attribute Expose as IAccessible2: Expose object attribute Expose as IAccessible2: Expose object attribute IAccessible2: Expose as object attribute Expose as object attribute IAccessible2: Expose as object attribute Expose as object attribute If role is Expose Expose IAccessible2: If not If not If role is Expose Expose IAccessible2: If not If not provided for relevant roles, user agents calculate Expose as Additionally, user agents MAY update the IAccessible2: Expose object attribute Expose object attribute Expose as If on an element that maps to See Widget values for additional information See Widget values for additional information See Widget values for additional information See Widget values for additional information See Widget values for additional information See Widget values for additional information See Widget values for additional information See Widget values for additional information IAccessible2: Expose via See Widget values for additional information See Widget values for additional information See Widget values for additional information See Widget values for additional information IAccessible2: Expose as object attribute See Widget values for additional information See Widget values for additional information See Widget values for additional information User agents MUST compute an accessible name using the rules outlined below in the section titled Text Alternative Computation. Special Case: If the element is an If The text alternative is reused in both the name and description computation, as described above. There are different rules provided for several different types of nodes and combinations of markup. Text alternatives are built up, when appropriate, from all the relevant content contained within an element. This is accomplished via rule 2C (which is recursive), using the full set of rules to retrieve text from its own children. In the following example, the See How to Specify Alternate Text ([HTML], section 13.8) and
HTML5 Requirements for providing text to act as an alternative for images ([HTML5], section 4.8.1.1).
In the case of HTML Editorial Note: We've asked the HTML5 WG to remove or reduce this section, so we may remove the reference to it. The purpose of the flat text alternative string is to create a perceivable label in alternative presentations. At each step of the algorithm, an implementation will trim the existing text alternative string and the string to be added, then join those two strings with a single space. For example, a space character may be inserted between the text of two elements used one after the other in a description. 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 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. Note: Authors will need to create handlers for those click events that update WAI-ARIA states and properties in the DOM accordingly, so that those updated states can be populated by the user agent in the Accessibility API. User agents fire events for user actions, WAI-ARIA state changes, changes to document content or node visibility, changes in selection and operation of menus as defined in the following sections. User agents MUST notify assistive technology of state changes as defined in the table below, SHOULD notify assistive technology of property changes if the accessibility API defines a change event for the property, and SHOULD NOT notify assistive technology of property changes if the accessibility API does not define a change event for the property. For example, IAccessible2 defines an event to be used when Note: In some APIs, AT will only be notified of events to which it has subscribed. For simplicity and performance the user agent MAY trim out change events for state or property changes that assistive technologies typically ignore, such as events that are happening in a window that does not currently have focus. See Controlling focus with In addition: IAccessible2: In addition: IAccessible2: 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. User agents MUST fire the following events when The multiple selection case occurs when This section is normative. Editorial Note: 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 In general, user agents do not do much validation of WAI-ARIA properties. User agents MAY do some minor validation on request, such as making sure valid IDs are specified for WAI-ARIA relations, and enforcing things like If the author specifies a non-numeric value for a decimal or integer value type, the user agent SHOULD do the following: If a WAI-ARIA property contains an unknown or disallowed value, the user agent SHOULD expose to platform accessibility APIs as follows: Note: In UIA Express, the user agent might leave the corresponding property set to "unsupported." User agent MUST NOT expose WAI-ARIA attributes that reference unresolved ID's. For example: If a required WAI-ARIA attribute for a given role is missing, user agents SHOULD process the attribute as if the values given in the following table were provided. User agents MAY report these errors via their console. This section is normative. Resources referenced normatively are considered part of this specification. Implementations of this specification MUST implement the requirements of these resources. Resources referenced informatively provide useful information relevant to this document, but do not comprise a part of its requirements. The following people contributed to the development of this document. The Protocols and Formats Working Group expresses special thanks to three individuals
for extraordinary contributions to ARIA: Other contributors: This publication has been funded in part with Federal funds from the U.S. Department of Education, National Institute on Disability and Rehabilitation Research (NIDRR) under contract number ED05CO0039 and ED-OSE-10-C-0067. 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.
2. Normative User Agent Implementation Requirements for WAI-ARIA
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.3. Important Terms
aria-flowto
unless those objects are also descendants in the accessibility tree.aria-hidden
(state) attribute
set to true
.aria-hidden
attribute is always updated accordingly when an element is shown or hidden, unless the intent of using off-screen positioning is to make the content visible only to screen reader users and not others.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
is used to provide this function. tabindex
in HTML, 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, and ATK/AT-SPI columns of the table.
listbox
that controls focus using aria-activedescendent
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 ATK/AT-SPI Mac OS X Accessibility Focusable state STATE_SYSTEM_FOCUSABLE
STATE_FOCUSABLE
boolean AXFocused
(writable)Focused state STATE_SYSTEM_FOCUSED
STATE_FOCUSED
boolean AXFocused
Focus event EVENT_OBJECT_FOCUS
object:state-changed:focused
or focus:
AXFocusedUIElementChanged
4.2. Controlling focus with
tabindex
tabindex
, focus
, and blur
to allow them on all HTML 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 HTML 4 specification but is expected to be in compliance with HTML 5.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 HTML element that supports the tabindex
attribute.focus
and blur
methods to the HTMLElement
interface (available to script for every type of 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. 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 HTML 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)
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
5.1.1. Excluding Elements from the Accessibility Tree
presentation
as the first mappable role in the role attribute string, according to the rules for presentation
role defined in Accessible Rich Internet Applications (WAI-ARIA) 1.0 [ARIA]. display:none
or visibility:hidden
or 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 need to fire a FOCUS
event.aria-hidden
="true"
. (See Excluding Elements in the Accessibility Tree for additional guidance on aria-hidden
.)aria-controls
, aria-describedby
, aria-flowto
, aria-labelledby
or aria-owns
) and are not hidden.
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", isn't correct because it doesn't properly communicate the additional features of a spin button. The author will add the WAI-ARIA role of spinbutton (
) so that the control gets 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.
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
use the element name
table
to determine what platform accessibility API role to use according to the host language's role mapping. For , use the platform accessibility API for a text input.presentation
is applied to an element, the user agent MUST implement the rules for presentation
role defined in Accessible Rich Internet Applications (WAI-ARIA) 1.0 [ARIA]. xml-roles:"string"
)AriaRole
property. The AriaRole property
can also support secondary roles using a space as a separator.xml-roles:"string"
)5.4.1. Role Mapping Table
WAI-ARIA role MSAA + UIA Express role MSAA + IAccessible2 role and other IAccessible2 features ATK/AT-SPI role
AXSubrole
AXRoleDescription[Note 1]alert
ROLE_SYSTEM_ALERT
EVENT_SYSTEM_ALERT
[Note 2]ROLE_SYSTEM_ALERT
EVENT_SYSTEM_ALERT
[Note 2]ROLE_ALERT
AXGroup
AXApplicationAlert
'alert'
alertdialog
ROLE_SYSTEM_DIALOG
EVENT_SYSTEM_ALERT
[Note 2]ROLE_SYSTEM_DIALOG
EVENT_SYSTEM_ALERT
[Note 2]ROLE_DIALOG
AXGroup
AXApplictionAlertDialog
'alert dialog'
application
ROLE_SYSTEM_APPLICATION
ROLE_SYSTEM_APPLICATION
ROLE_EMBEDDED
AXGroup
AXLandmarkApplication
'application'
article
ROLE_SYSTEM_DOCUMENT
+ STATE_SYSTEM_READONLY
ROLE_SYSTEM_DOCUMENT
+ STATE_SYSTEM_READONLY
xml-roles:article
ROLE_DOCUMENT_FRAME
+ do not expose STATE_EDITABLE
xml-roles:article
AXGroup
AXDocumentArticle
'article'
banner
Expose as text string in AriaRole
IAccessible2: Object attribute xml-roles:banner
Object attribute xml-roles:banner
AXGroup
AXLandmarkBanner
'banner'
button
ROLE_SYSTEM_PUSHBUTTON
ROLE_SYSTEM_PUSHBUTTON
, expose as aria-haspopup
="true"ROLE_SYSTEM_BUTTONMENU
aria-pressed
is not undefined, it SHOULD be exposed as IA2_ROLE_TOGGLE_BUTTON
ROLE_PUSH_BUTTON
aria-pressed
(state) is not undefined, it SHOULD be exposed as ROLE_TOGGLE_BUTTON
is defined (true/false/mixed) use:aria-pressed
(state)AXCheckBox
AXToggleButton
'toggle button'
is not defined use:aria-pressed
(state)AXButton
'button'
checkbox
ROLE_SYSTEM_CHECKBUTTON
ROLE_SYSTEM_CHECKBUTTON
checkable:true
ROLE_CHECK_BOX
+ object attribute checkable:true
AXCheckBox
'check box'
columnheader
ROLE_SYSTEM_COLUMNHEADER
ROLE_SYSTEM_COLUMNHEADER
AccessibleTable
for the container grid
roleROLE_COLUMN_HEADER
AXCell
or AXSortButton
if using aria-sort
'cell
'
AXColumnHeaderUIElements
property that is a
list of pointers to the column header cells.AXHeader
property that is a pointer to the row or group containing the columnheader cells.combobox
ROLE_SYSTEM_COMBOBOX
+ STATE_SYSTEM_HASPOPUP
.
aria-expanded
(state) is not "true"
, expose STATE_SYSTEM_COLLAPSED
.ROLE_SYSTEM_COMBOBOX
+ STATE_SYSTEM_HASPOPUP
.
aria-expanded
(state) is not "true"
, expose STATE_SYSTEM_COLLAPSED
.ROLE_COMBO_BOX
+ STATE_EXPANDABLE
+ object attribute haspopup:true
AXComboBox
'combo box'
complementary
Expose as text string in AriaRole
IAccessible2: Object attribute xml-roles:complementary
Object attribute xml-roles:
complementary
AXGroup
AXLandmarkComplementary
'complementary'
contentinfo
Expose as text string in AriaRole
IAccessible2: Object attribute xml-roles:contentinfo
Object attribute xml-roles:
contentinfo
AXGroup
AXLandmarkContentInfo
'content'
definition
Expose as text string in AriaRole
IAccessible2: Object attribute xml-roles:definition
Object attribute xml-roles:definition
AXGroup
AXDefinition
'definition'
dialog
ROLE_SYSTEM_DIALOG
ROLE_SYSTEM_DIALOG
ROLE_DIALOG
AXGroup
AXApplicationDialog
'dialog'
directory
ROLE_SYSTEM_LIST
ROLE_SYSTEM_LIST
ROLE_LIST
AXList
AXContentList
'content list'
document
ROLE_SYSTEM_DOCUMENT
+ STATE_SYSTEM_READONLY
ROLE_SYSTEM_DOCUMENT
+ STATE_SYSTEM_READONLY
ROLE_DOCUMENT_FRAME
+ do not expose STATE_EDITABLE
AXGroup
AXDocument
'document'
form
Expose as text string in AriaRole
IAccessible2: IA2_ROLE_FORM
ROLE_FORM
AXGroup
'group'
grid
ROLE_SYSTEM_TABLE
ROLE_SYSTEM_TABLE
IAccessibleTable2
interfaceROLE_TABLE
AXTable
'table'
gridcell
ROLE_SYSTEM_CELL
ROLE_SYSTEM_CELL
ROLE_TABLE_CELL
AXCell
'cell'
group
ROLE_SYSTEM_GROUPING
ROLE_SYSTEM_GROUPING
ROLE_PANEL
AXGroup
'group'
heading
aria-level
property. ROLE_SYSTEM_TEXT
Expose as object attribute xml-roles:heading
.IAccessible2: IA2_ROLE_HEADING
ROLE_HEADING
AXHeading
'heading'
img
ROLE_SYSTEM_GRAPHIC
ROLE_SYSTEM_GRAPHIC
ROLE_IMAGE
AXImage
'image'
link
ROLE_SYSTEM_LINK
+ STATE_LINKED
STATE_LINKED
on all descendantsROLE_SYSTEM_LINK
+ STATE_LINKED
STATE_LINKED
on all descendantsAccessibleHypertext
interfaceROLE_LINK
AXLink
'link'
list
ROLE_SYSTEM_LIST
+ STATE_SYSTEM_READONLY
ROLE_SYSTEM_LIST
+ STATE_SYSTEM_READONLY
ROLE_LIST
+ do not expose STATE_EDITABLE
AXList
AXContentList
'content list'
ROLE_SYSTEM_LIST
ROLE_SYSTEM_LIST
ROLE_LIST
. Special case: if a listbox
has a parent or is owned by (via aria-owns
) a combobox
, it SHOULD be exposed with ROLE_MENU
.AXList
'list'
listitem
ROLE_SYSTEM_LISTITEM
ROLE_SYSTEM_LISTITEM
+ STATE_SYSTEM_READONLY
ROLE_LISTITEM
+ do not expose STATE_EDITABLE
AXGroup
'group'
log
Control type/role is group
Localized Control Type is log
. LiveSettingProperty = On (1)
.xml-roles:log
;container-live:polite;live:polite;container-live-role:log
xml-roles:log;container-live:polite;live:polite;container-live-role:log
AXGroup
AXApplicationLog
'log'
main
Expose as text string in AriaRole
IAccessible2: Object attribute xml-roles:main
Object attribute xml-roles:main
AXGroup
AXLandmarkMain
'main'
marquee
ROLE_SYSTEM_ANIMATION
ROLE_SYSTEM_ANIMATION
+ xml-roles:marquee;container-live:off;live:off
ROLE_ANIMATION
+ object attributes container-live:off;live:off
AXGroup
AXApplicationMarquee
'marquee'
math
ROLE_SYSTEM_EQUATION
ROLE_SYSTEM_EQUATION
ROLE_UNKNOWN
AXGroup
AXDocumentMath
'math'
menu
ROLE_SYSTEM_MENUPOPUP
ROLE_SYSTEM_MENUPOPUP
ROLE_MENU
AXMenu
'menu'
menubar
ROLE_SYSTEM_MENUBAR
ROLE_SYSTEM_MENUBAR
ROLE_MENU_BAR
AXMenuBar
'menu bar'
menuitem
ROLE_SYSTEM_MENUITEM
ROLE_SYSTEM_MENUITEM
ROLE_MENU_ITEM
aria-checked
(state) is not undefined, support object attribute checkable:true
If the option's parent has a group
role, then role="menuitem"
maps to AXMenuButton
menu
role, then role="menuitem"
maps to AXMenuItem
AXMenuItem
'menu item
'menuitemcheckbox
ROLE_SYSTEM_CHECKBUTTON
or ROLE_SYSTEM_MENUITEM
ROLE_SYSTEM_CHECKBUTTON
or ROLE_SYSTEM_MENUITEM
IAccessible2: IA2_ROLE_CHECK_MENU_ITEM
+ object attribute checkable:true
ROLE_CHECK_MENU_ITEM
+ object attribute checkable:true
AXMenuItem
'menu item
'aria-checked
(state)="true"
: AXMenuItemMarkChar
✓
Otherwise: AXMenuItemMarkChar
menuitemradio
ROLE_SYSTEM_RADIOBUTTON
or ROLE_SYSTEM_MENUITEM
aria-checked
for mapping aria-checked
(state) attribute for radio buttons. ROLE_SYSTEM_RADIOBUTTON
or ROLE_SYSTEM_MENUITEM
IAccessible2: IA2_ROLE_RADIO_MENU_ITEM
+ object attribute checkable:true
ROLE_RADIO_MENU_ITEM
+ object attribute checkable:true
AXMenuItem
'menu item
'aria-checked
(state)="true"
: AXMenuItemMarkChar
✓.
Otherwise: AXMenuItemMarkChar
navigation
Expose as text string in AriaRole
IAccessible2: Object attribute xml-roles:navigation
Object attribute xml-roles:navigation
AXGroup
AXLandmarkNavigation
'navigation'
note
Expose as text string in AriaRole
IAccessible2: IA2_ROLE_NOTE
Object attribute xml-roles:note
AXGroup
AXDocumentNote
'note'
option
aria-selected
(state) is undefined treat as aria-selected = "false"
.ROLE_SYSTEM_LISTITEM
ROLE_SYSTEM_LISTITEM
aria-checked
(state) is not undefined, support object attribute checkable:true
ROLE_LIST_ITEM
aria-checked
(state) is not undefined, support object attribute checkable:true
option
has a parent that was exposed as a ROLE_MENU
, the option
SHOULD be exposed as an ROLE_MENU_ITEM
AXStaticText
'text'
presentation
If the object is in the accessibility tree, expose as ROLE_SYSTEM_PANE
ROLE_PANEL
progressbar
ROLE_SYSTEM_PROGRESSBAR
+ STATE_SYSTEM_READONLY
ROLE_SYSTEM_PROGRESSBAR
+ STATE_SYSTEM_READONLY
ROLE_PROGRESS_BAR
+ do not expose STATE_EDITABLE
AXProgressIndicator
'progress indicator'
radio
ROLE_SYSTEM_RADIOBUTTON
aria-checked
for mapping aria-checked
(state) attribute for radio buttons. ROLE_SYSTEM_RADIOBUTTON
ROLE_RADIO_BUTTON
AXRadioButton
'radio button'
radiogroup
ROLE_SYSTEM_GROUPING
ROLE_SYSTEM_GROUPING
ROLE_PANEL
AXRadioGroup
'radio group'
region
ROLE_SYSTEM_PANE
ROLE_SYSTEM_PANE
ROLE_PANEL
AXGroup
AXDocumentRegion
'region'
row
ROLE_SYSTEM_ROW
unless inside a tree
or treegrid
, in which case ROLE_SYSTEM_OUTLINEITEM
ROLE_SYSTEM_ROW
unless inside a tree
or treegrid
, in which case ROLE_SYSTEM_OUTLINEITEM
IAccessibleTable2
interface for the container grid
roleROLE_LIST_ITEM
AXRow
'row'
rowgroup
AriaRole
rowgroup
role exists to support role symmetry in HTML, and allows for the propagation of presentation inheritance on tables with an explicit presentation role applied.ROLE_SYSTEM_GROUP
rowgroup
role exists to support role symmetry in HTML, and allows for the propagation of presentation inheritance on tables with an explicit presentation role applied.ROLE_PANEL
rowgroup
role exists to support role symmetry in HTML, and allows for the propagation of presentation inheritance on tables with an explicit presentation role applied.rowgroup
role exists to support role symmetry in HTML, and allows for the propagation of presentation inheritance on tables with an explicit presentation role applied.rowheader
ROLE_SYSTEM_ROWHEADER
ROLE_SYSTEM_ROWHEADER
IAccessibleTable2
interface for the container grid
roleROLE_ROW_HEADER
AXCell
'cell
'AXRowHeaderUIElements
property that is a list of pointers to the row header cellsscrollbar
ROLE_SYSTEM_SCROLLBAR
ROLE_SYSTEM_SCROLLBAR
ROLE_SCROLLBAR
AXScrollBar
'scroll bar'
search
Expose as text string in AriaRole
Object attribute xml-roles:search
AXGroup
AXLandmarkSearch
'search'
separator
ROLE_SYSTEM_SEPARATOR
ROLE_SYSTEM_SEPARATOR
ROLE_SEPARATOR
AXSplitter
'splitter'
slider
ROLE_SYSTEM_SLIDER
ROLE_SYSTEM_SLIDER
ROLE_SLIDER
AXSlider
'slider'
spinbutton
ROLE_SYSTEM_SPINBUTTON
ROLE_SYSTEM_SPINBUTTON
ROLE_SPIN_BUTTON
AXIncrementor
'stepper'
status
ROLE_SYSTEM_STATUSBAR
ROLE_SYSTEM_STATUSBAR
+ container-live:polite;live:polite;container-live-role:status
ROLE_STATUSBAR
+ object attributes container-live:polite;live:polite;container-live-role:status
AXGroup
AXApplicationStatus
'status'
tab
aria-selected
(state) is undefined treat as aria-selected = "false"
.ROLE_SYSTEM_PAGETAB
.
SELECTED
state if focus is inside tabpanel
associated with aria-labelledby
.ROLE_SYSTEM_PAGETAB
.
SELECTED
state if focus is inside tabpanel
associated with aria-labelledby
.ROLE_PAGE_TAB
. Expose SELECTED
state if focus is inside tabpanel
associated with aria-labelledby
.AXRadioButton
'tab'
tablist
ROLE_SYSTEM_PAGETABLIST
ROLE_SYSTEM_PAGETABLIST
+ container-live:polite;live:polite;container-live-role:tablist
ROLE_PAGE_TAB_LIST
+ object attributes container-live:polite;live:polite;container-live-role:tablist
AXTabGroup
'tabgroup'
tabpanel
ROLE_SYSTEM_PANE
or ROLE_SYSTEM_PROPERTYPAGE
ROLE_SYSTEM_PANE
or ROLE_SYSTEM_PROPERTYPAGE
ROLE_SCROLL_PANE
AXGroup
TabPanel
'tab panel'
textbox
ROLE_SYSTEM_TEXT
ROLE_SYSTEM_TEXT
IAccessible2: IA2_STATE_SINGLE_LINE
if aria-multiline
is not "true"
ROLE_ENTRY
+ STATE_SINGLE_LINE
if aria-multiline
is not "true"
aria-multiline
="false"
(default) use:
AXTextField
'text field
'aria-multiline
="true"
use:
AXTextArea
'text entry area
'timer
Expose as text string in AriaRole
IAccessible2: Object attribute xml-roles:timer;container-live:off;live:off;container-live-role:timer
ROLE_UNKNOWN
+ object attributes container-live:off;live:off;container-live-role:timer
AXGroup
AXApplicationTimer
'timer'
toolbar
ROLE_SYSTEM_TOOLBAR
ROLE_SYSTEM_TOOLBAR
ROLE_TOOL_BAR
AXToolbar
'toolbar'
tooltip
ROLE_SYSTEM_TOOLTIP
ROLE_SYSTEM_TOOLTIP
ROLE_TOOL_TIP
AXGroup
AXUserInterfaceTooltip
'tooltip'
tree
ROLE_SYSTEM_OUTLINE
ROLE_SYSTEM_OUTLINE
ROLE_TREE
AXOutline
'outline'
treegrid
DataGrid
ROLE_SYSTEM_OUTLINE
IAccessibleTable2
interfacexml-roles:treegrid
ROLE_TREE_TABLE
AXTable
'table'
treeitem
TreeItem
ROLE_SYSTEM_OUTLINEITEM
aria-checked
(state) is not undefined, support object attribute checkable:true
ROLE_LIST_ITEM
+ if aria-checked
is not undefined, support object attribute checkable:true
AXRow
AXOutlineRow
'outline row'
5.5. State and Property Mapping
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 Express, 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.presentation
is applied to an element, the user agent MUST implement the rules for presentation
role defined in Accessible Rich Internet Applications (WAI-ARIA) 1.0 [ARIA].5.5.1. State and Property Mapping Table
5.5.1.1. Not Mapped
aria-grabbed
(state). Its absence not only indicates that the accessible is not grabbed, but further defines it as not grab-able. These cases are marked as "Not mapped" without an asterisk. WAI-ARIA State or Property MSAA + UIA Express MSAA + IAccessible2 ATK/AT-SPI Mac OS X aria-activedescendant
See Controlling focus with 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.See Controlling focus with aria-activedescendant
, Handling focus changes from the Assistive Technology, and ID Reference Error Processing in Relations.See Controlling focus with 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.array AXSelectedRows
contains pointer to active descendant nodearia-atomic
="true"
Expose atomic=true
in AriaProperties
atomic:true
and container-atomic:true
container-atomic:true
on all descendants as well as IA2_RELATION_MEMBER_OF
pointing to this element (the atomic root) as described in Changes to document content or node visibility.atomic:true
and container-atomic:true
. container-atomic:true
on all descendants as well as RELATION_MEMBER_OF
pointing to this element (the atomic root) as described in Changes to document content or node visibility.boolean AXARIAAtomic: YES
aria-atomic
="false"
(default)Expose atomic=false
in AriaProperties
atomic:false
and container-atomic:false
container-atomic:false
on all descendants as well as IA2_RELATION_MEMBER_OF
pointing to this element (the atomic root) as described in Changes to document content or node visibility.atomic:false
and container-atomic:false
. container-atomic:false
on all descendants as well as RELATION_MEMBER_OF
pointing to this element (the atomic root) as described in Changes to document content or node visibility.boolean AXARIAAtomic: NO
aria-autocomplete
="inline"
, "list"
, or "both"
Expose autocomplete=
in AriaProperties
autocomplete:
IA2_STATE_SUPPORTS_AUTOCOMPLETION
equivalent stateObject attribute autocomplete:
SUPPORTS_AUTOCOMPLETION
equivalent stateNot mapped aria-autocomplete
="none"
(default)Not mapped* Not mapped* Not mapped* Not mapped* aria-busy
="true"
(state)Expose the STATE_SYSTEM_BUSY
stateExpose the STATE_SYSTEM_BUSY
stateExpose the STATE_BUSY
stateboolean AXARIABusy: YES
aria-busy
="false"
(state) (default)Clear the STATE_SYSTEM_BUSY
stateClear the STATE_SYSTEM_BUSY
stateClear the STATE_BUSY
stateboolean AXARIABusy: NO
aria-checked
="true"
(state)ToggleState
property in Toggle
Control Pattern.Toggle.ToggleState = On (1)
menuitemradio
and radio
, expose as IsSelected
property in SelectionItem
Control Pattern. SelectionItem.IsSelected = On (1)
Set the STATE_SYSTEM_CHECKED
state
checkable:true
checkable:true
STATE_CHECKED
stateAXValue: 1
aria-checked
="false"
(state)ToggleState
property in Toggle
Control Pattern.Toggle.ToggleState = Off (0)
menuitemradio
and radio
, expose as IsSelected
property in SelectionItem
Control Pattern. SelectionItem.IsSelected = Off (0)
Clear the STATE_SYSTEM_CHECKED
state
checkable:true
STATE_CHECKED
statecheckable:true
AXValue: 0
aria-checked
="mixed"
(state)
"false"
for radio
and menuitemradio
roles.ToggleState
property in Toggle
Control Pattern.STATE_SYSTEM_MIXED
stateToggle.ToggleState = Indeterminate (2)
Set the STATE_SYSTEM_MIXED
state
checkable:true
Expose STATE_INDETERMINATE
, unless on a role of radio
or menuitemradio
(in those cases treat as "false"
)
checkable:true
AXValue: 2
aria-checked
is undefined (state)
"false"
for checkbox
, menuitemcheckbox
, radio
and menuitemradio
roles.Not mapped Not mapped Not mapped Not mapped aria-controls
Expose pointer to the accessible object ControllerFor
propertyIA2_RELATION_CONTROLLER_FOR
Expose pointer to the accessible object RELATION_CONTROLLER_FOR
array AXLinkedUIElements
contains pointers to nodes matching IDREFsaria-describedby
Use in calculating the accessible Description as described in Name Computation. Expose in accDescription
property.Use in calculating the accessible Description as described in Name Computation. Expose in accDescription
property.
IA2_RELATION_DESCRIBED_BY
and expose reverse relations as described in Relations.Use in calculating the accessible description as described in Name Computation and expose value as string AXHelp
.aria-disabled
="true"
(state)Set IsEnabled
to "false"
Set STATE_SYSTEM_UNAVAILABLE
STATE_SYSTEM_FOCUSABLE
Not mapped boolean AXEnabled: NO
aria-disabled
="false"
(state) (default)Set IsEnabled
to "true"
Clear STATE_SYSTEM_UNAVAILABLE
Expose STATE_ENABLED
boolean AXEnabled: YES
aria-dropeffect
="copy"
, "move"
, "link"
, "execute"
, or "popup"
(state)Expose dropeffect=
in AriaProperties
IAccessible2: Expose as object attribute dropeffect:
Expose as object attribute dropeffect:
array AXDropEffects
aria-dropeffect
="none"
(state) (default)Not mapped* dropeffect:none
if there are no other valid tokens.dropeffect:none
if there are no other valid tokens.Not mapped* aria-expanded
="true"
(state)Expose as "expanded"
in ExpandCollapseState
property of ExpandCollapse
Control PatternSet STATE_SYSTEM_EXPANDED
Expose STATE_EXPANDABLE
and STATE_EXPANDED
boolean AXExpanded: YES
aria-expanded
="false"
(state)Expose as "collapsed"
in ExpandCollapseState
property of ExpandCollapse
Control PatternSet STATE_SYSTEM_COLLAPSED
Expose STATE_EXPANDABLE
boolean AXExpanded: NO
aria-expanded
is undefined (state) (default)Not mapped Not mapped Not mapped Not mapped aria-flowto
Expose a reference to the accessible object in FlowsTo
propertyIA2_RELATION_FLOW_TO
Expose reference to the accessible object in RELATION_FLOWS_TO
array AXLinkedUIElements
contains pointer to nodes matching IDREFsaria-grabbed
="true"
(state)Expose as grabbed=true
in AriaProperties
IAccessible2: Object attribute grabbed:true
Object attribute grabbed:true
boolean AXGrabbed: YES
aria-grabbed
="false"
(state)Expose as grabbed=false
in AriaProperties
IAccessible2: Object attribute grabbed:false
Object attribute grabbed:false
boolean AXGrabbed: NO
aria-grabbed
is undefined (state) (default)Not mapped Not mapped Not mapped Not mapped aria-haspopup
="true"
(default for role combobox
)Expose as STATE_SYSTEM_HASPOPUP
. If on a push button, change the role to ROLE_SYSTEM_BUTTONMENU
.Expose as STATE_SYSTEM_HASPOPUP
. If on a push button, change the role to ROLE_SYSTEM_BUTTONMENU
.Object attribute haspopup:true
Expose AXShowMenu
and AXPress
actionsaria-haspopup
="false"
(default)Clear the HASPOPUP
state. If specified on a push button, change the role to ROLE_SYSTEM_BUTTONMENU
Clear the HASPOPUP
state. If specified on a push button, change the role to ROLE_SYSTEM_BUTTONMENU
Not mapped* Not mapped* aria-hidden
="true"
(state)hidden:true
.hidden:true
.Not exposed in AX
API unless focused. If focused, expose as normal.aria-hidden
="false"
(state) (default)Not mapped Not mapped Not mapped Not mapped aria-invalid
="true"
, "spelling"
, or "grammar"
(state)aria-invalid
="true"
, expose false
in IsDataValidForForm
property,
in IsDataValidForForm
propertyIA2_STATE_INVALID_ENTRY
STATE_INVALID_ENTRY
AXInvalid:
aria-invalid
=
Expose
in IsDataValidForForm
propertyIA2_STATE_INVALID_ENTRY
STATE_INVALID_ENTRY
AXInvalid:
aria-invalid
="false"
(state) (default)Expose true
in IsDataValidForForm
propertyIAccessible2: Clear IA2_STATE_INVALID_ENTRY
or equivalent state.Not mapped* AXInvalid: "false"
aria-invalid
=""
(state) (default)Expose true
in IsDataValidForForm
propertyIAccessible2: Clear IA2_STATE_INVALID_ENTRY
or equivalent state.Not mapped* AXInvalid: "false"
aria-label
Use in calculating the accessible name as described in Name Computation. Expose in accName
property.Use in calculating the accessible name as described in Name Computation. Expose in accName
property.Use in calculating the accessible name as described in Name Computation. Expose in the name property of the accessible object. string AXDescription
. AXDescription
is recommended for accessible name values that are not exposed visually, such as @alt
and @aria-label
. Accessible name values that are exposed visually, as in the case of a button, should be exposed as string AXTitle
. For example, with , expose both
AXTitle:"Feb"
and AXDescription:"February"
.aria-labelledby
Use in calculating the accessible name as described in Name Computation. Expose in accName
property.accName
property.IA2_RELATION_LABELLED_BY
and expose reverse relations as described in Relations. RELATION_LABELLED_BY
and expose reverse relations as described in Relations. aria-labelledby
references a single element, expose the labeling relationship as element AXTitleUIElement
. aria-labelledby
references multiple elements, or if the labeling element is invisible or otherwise not exposed in the accessibility tree, use in calculating the accessible name as described in Name Computation and expose value as string AXDescription
. aria-level
level=
in AriaProperites
.
level:
.aria-posinset
and aria-setsize
, expose in groupPosition()
.RELATION_NODE_CHILD_OF
when used on a tree item. See section Group Position.Expose as object attribute level:
heading
, map to AXValue
. treeitem
or group
), map to AXDisclosureLevel.
aria-live
="assertive"
(default for role alert
)LiveSetting
Property to "assertive"live:assertive
and container-live:assertive
.container-live:assertive
on all descendants as described in Changes to document content or node visibility.Expose as object attribute live:assertive
and container-live:assertive
.
container-live:assertive
on all descendants as described in Changes to document content or node visibility.AXARIALive: "assertive"
aria-live
="polite"
(default for role types log
and status
)Set LiveSetting
Property to "polite"live:polite
and container-live:polite
container-live:polite
on all descendants as described in Changes to document content or node visibility.Expose as object attribute live:polite
and container-live:polite
.
container-live:polite
on all descendants as described in Changes to document content or node visibility.AXARIALive: "polite"
aria-live
="off"
(default)Set LiveSetting
property to "off"live:off
and container-live:off
container-live:off
on all descendants as described in Changes to document content or node visibility.Expose as object attribute live:off
and container-live:off
.
container-live:off
on all descendants as described in Changes to document content or node visibility.AXARIALive: "off"
aria-multiline
="true"
Expose as multiline=true
in AriaProperties
IAccessible2: Set the IA2_MULTI_LINE
state and clear IA2_SINGLE_LINE
Set STATE_MULTI_LINE
and clear STATE_SINGLE_LINE
textbox
in the Role Mapping Table for more information.aria-multiline
="false"
(default)Not mapped* IAccessible2: Clear the IA2_MULTI_LINE
state, and set IA2_SINGLE_LINE
Set STATE_SINGLE_LINE
and clear STATE_MULTI_LINE
textbox
in the Role Mapping Table for more information.aria-multiselectable
="true"
CanSelectMultiple
property on the Selection
Control Pattern.STATE_SYSTEM_MULTISELECTABLE
state. Expose STATE_SYSTEM_EXTSELECTABLE
to exactly match STATE_SYSTEM_
MULTISELECTABLE
.IAccessibleText
interfaceSTATE_MULTISELECTABLE
aria-multiselectable
="false"
(default)Not mapped* Clear the STATE_SYSTEM_MULTISELECTABLE
state. Expose STATE_SYSTEM_EXTSELECTABLE
to exactly match STATE_SYSTEM_MULTISELECTABLE
.
Not mapped* Not mapped* aria-orientation
="horizontal"
(default)Orientation
property to "horizontal"IAccessible2:
IA2_STATE_HORIZONTAL
IA2_STATE_VERTICAL
Set STATE_HORIZONTAL
AXOrientation: AXHorizontalOrientation
aria-orientation
="vertical"
(default for role scrollbar
)Orientation
Property to "vertical"IAccessible2:
IA2_STATE_VERTICAL
IA2_STATE_HORIZONTAL
Set STATE_VERTICAL
AXOrientation: AXVerticalOrientation
aria-owns
The structure should be reflected in the accessibility tree as directed by aria-owns
. Map the elements that are referenced by this property as children of the current element.
aria-owns
relationships are found, use only the first one. aria-owns
relationships are found, use only the first one. aria-owns
relationships are found, use only the first one. array AXLinkedUIElements
contains pointer to nodes matching IDREFs
aria-setsize
and aria-posinset
for each object in the container based on the number of objects in the DOM.posinset=
in AriaProperties
. LegacyIAccessible.Description
property to take the form X of Y, where X is the aria-posinset
value and Y is the aria-setsize
value; and if X is less than one, or if X is greater than Y, LegacyIAccessible.Description
will be empty.posinset:
and in groupPosition()
.posinset:
.AXARIAPosInSet:
aria-pressed
="true"
(state)ToggleState property
of Toggle
Control PatternToggle.ToggleState = On (1)
Set the STATE_SYSTEM_PRESSED
state.
IA2_ROLE_TOGGLE_BUTTON
checkable:true
Expose STATE_PRESSED
. If on a button, expose the role as ROLE_TOGGLE_BUTTON
.
checkable:true
AXValue: 1 aria-pressed
="mixed"
(state)ToggleState
property of Toggle
Control PatternToggle.ToggleState = Indeterminate (2)
Set the STATE_SYSTEM_PRESSED
state.
IA2_ROLE_TOGGLE_BUTTON
checkable:true
Expose STATE_INDETERMINATE
/STATE_SYSTEM_MIXED
. If on a button, expose the role as ROLE_TOGGLE_BUTTON
.
checkable:true
AXValue: 2 aria-pressed
="false"
(state)ToggleState
property of Toggle
Control PatternToggle.ToggleState = Off (3)
Clear the STATE_SYSTEM_PRESSED
state
IA2_ROLE_TOGGLE_BUTTON
checkable:true
If on a button, expose the role as ROLE_TOGGLE_BUTTON
.
checkable:true
AXValue: 0 aria-pressed
is undefined (state) (default)Not mapped* Not mapped* Not mapped* Not mapped* aria-readonly
="true"Expose as STATE_SYSTEM_READONLY
Expose as STATE_SYSTEM_READONLY
No mapping AXValue
(not writable)
(default)aria-readonly
="false"Not mapped IAccessible2: Expose IA2_STATE_EDITABLE
Expose STATE_EDITABLE
AXValue
(writable)
, aria-relevant
="additions""removals"
, "text"
, or "all"
Expose as relevant=
in AriaProperties
relevant:
and container-relevant:
container-relevant:
on all descendants as described in Changes to document content or node visibility.relevant:
and container-relevant:
. container-relevant:
on all descendants as described in Changes to document content or node visibility.AXARIARelevant:
(Default)aria-relevant
="additions text"Expose as relevant=additions text
in AriaProperties
relevant:additions text
and container-relevant:additions text
container-relevant:additions text
on all descendants as described in Changes to document content or node visibility.relevant:additions text
and container-relevant:additions text
. container-relevant:additions text
on all descendants as described in Changes to document content or node visibilityAXARIARelevant:
aria-required
="true"Expose as IsrequiredForForm
property.IAccessible2: Expose IA2_STATE_REQUIRED
Expose STATE_REQUIRED
boolean AXRequired: YES
aria-required
="false" (default)Not mapped* Not mapped* Not mapped* Not mapped* aria-selected
="true"
(state)
radio
or menuitemradio
, mapping the value is OPTIONAL. Expose STATE_SYSTEM_SELECTED
STATE_SYSTEM_SELECTABLE
Expose STATE_SYSTEM_SELECTED
STATE_SYSTEM_SELECTABLE
DISABLED
, toggle between "true"
and "false"
as appropriate when aria-multiselectable
is used on an ancestor as described in Selection.Expose STATE_SELECTED
and STATE_SELECTABLE
.
DISABLED
, toggle between "true"
and "false"
as appropriate when the AccessibleSelection
interface is used on an ancestor with aria-multiselectable
as described in Selection. boolean AXSelected: YES
aria-selected
="false"
(state)
radio
or menuitemradio
, mapping the value is OPTIONAL.Clear STATE_SYSTEM_SELECTED
STATE_SYSTEM_SELECTABLE
Clear STATE_SYSTEM_SELECTED
STATE_SYSTEM_SELECTABLE
DISABLED
, toggle between "true"
and "false"
as appropriate when the AccessibleSelection
interface is used on an ancestor with aria-multiselectable
as described in Selection.Clear STATE_SELECTED
and expose STATE_SELECTABLE
.boolean AXSelected: NO
aria-selected
is undefined (state) (default)
Not mapped Not mapped Not mapped Not mapped
aria-setsize
and aria-posinset
for each object in the container based on the number of objects in the DOM.setsize=
in AriaProperties
LegacyIAccessible.Description
property to take the form X of Y, where X is the aria-posinset
value and Y is the aria-setsize
value; and if X is less than one, or if X is greater than Y, LegacyIAccessible.Description
will be empty.setsize:
and groupPosition()
. setsize:
. AXARIASetSize:
aria-sort
="ascending","descending"
, or "other"
sort=
in AriaProperties
.HeaderItem
controls (th
elements, and elements that include the "columnheader"
and "rowheader"
role), ItemStatus="
.IAccessible2: Expose as object attribute sort:
Expose as object attribute sort:
AXSortDirection: AXAscendingSortDirection | AXDescendingSortDirection | AXUnknownSortDirection
(default)aria-sort
="none"Not mapped* IAccessible2: If specified, expose as object attribute sort:
If specified, expose as object attribute sort:
Not mapped* aria-valuemax
Expose the Maximum
property in RangeValue
Control Pattern
IAccessible2: Expose via AccessibleValue
interface.
Expose the Maximum
property in RangeValue
Control Pattern
number AXMaxValue
aria-valuemin
Expose the Minimum
property in RangeValue
Control Pattern
IAccessible2: Expose via AccessibleValue
interface
Expose via AccessibleValue
interface
number AXMinValue
aria-valuenow
If aria-valuetext
is not defined, expose via IAccessible::get_accValue
If aria-valuetext
is not defined, expose via IAccessible::get_accValue
AccessibleValue
interface. Expose via AccessibleValue
interface.
number AXValue
aria-valuetext
Expose Value
property in Value
Control Pattern which can co-exist with RangeValue
Control Pattern.
Expose via IAccessible::get_accValue
valuetext:
Expose as object attribute valuetext:
AXValueDescription:
5.6. Special Processing Requiring Additional Computation
5.6.1. Name and Description
5.6.1.1. Name Computation
img
element that is exposed in the accessibility tree; and the computed text alternative is empty, then check for the presence of role presentation
or any labeling attribute that specifies an empty label, specifically aria-label
, aria-labelledby
, alt
or title
. The presence of any of these indicates the author's intention to indicate that the img
is decorative or redundant. In this case, the user agent MUST set the name to an empty string. If none of these attributes are present, this indicates the author simply did not provide an accessible label for the image, and the implementation MUST return an accessible name of NULL instead of an empty string if the API supports it. This hints to the assistive technology to do its own heuristic processing to repair the missing accessible name.5.6.1.2. Description Computation
aria-describedby
is present,
user agents MUST compute the accessible description by concatenating the text alternatives for nodes referenced by an aria-describedby
attribute on the current node. The text alternatives for the referenced nodes are computed using a number of methods, outlined below in the section titled Text Alternative Computation. 5.6.1.3. Text Alternative Computation
aria-labelledby
or aria-describedby
being used in the current computation. By default, users of assistive technologies won't receive the hidden information, but an author will be able to explicitly override that and include the hidden text alternative as part of the label string sent to the accessibility API.aria-labelledby
attribute takes precedence as the element's text alternative unless this computation is already occurring as the result of a recursive aria-labelledby
declaration (in other words, aria-labelledby
is not recursive when referenced from another element, so it will not cause loops). However, the element's aria-labelledby
attribute can reference the element's own IDREF in order to concatenate a string provided by the element's aria-label
attribute or another feature lower in this preference list. The text alternatives for all the elements referenced will be computed using this same set of rules. User agents will then trim whitespace and join the substrings using a single space character. Substrings will be joined in the order specified by the author (IDREF order in the aria-labelledby
attribute).
elements would have text alternatives of "Delete Documentation.pdf" and "Delete HolidayLetter.pdf", respectively.
Files
aria-labelledby
is empty or undefined, the aria-label
attribute, which defines an explicit text string, is used. However, if this computation is already occurring as the result of a recursive text alternative computation and the current element is an embedded control as defined in rule 2B, ignore the aria-label
attribute and skip directly to rule 2B.aria-labelledby
and aria-label
are both empty or undefined, and if the element is not marked as presentational (role="
, check for the presence of an equivalent host language attribute or element for associating a label, and use those mechanisms to determine a text alternative. For example, in HTML, the presentation
"img
element's alt
attribute defines a label string and the label
element references the form element it labels. frame
and iframe
elements, the title
element in the head
element of the document inside a frame
or iframe
is used in this step of the calculation of the name of the frame
or iframe
.
spinbutton
or slider
), use the value of the aria-valuetext
attribute if available, or otherwise the value of the aria-valuenow
attribute.title
attribute in HTML). This is used only if nothing else, including subtree content, has provided results.:before
and :after
pseudo-elements, where the user agent combines the textual content specified in the style sheet with that given in the DOM.
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-flowto
references the element's IDIA2_RELATION_FLOW_FROM
RELATION_FLOW-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="
, when treeitem
"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-posinset
and aria-setsize
are not provided, user agents MUST compute them as follows:role="
, 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.treeitem
"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.groupPosition()
[IA2], 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
.State or Property MSAA + UIA Express event MSAA + IAccessible2 event ATK/AT-SPIevent Mac OS X Notification aria-activedescendant
Not mapped aria-activedescendant
IA2_EVENT_ACTIVE_DESCENDANT_CHANGED
See Controlling focus with aria-activedescendant
See Controlling focus with aria-activedescendant
AXSelectedChildrenChanged
aria-busy
(state)EVENT_OBJECT_STATECHANGE
EVENT_OBJECT_STATECHANGE
object:state-changed:busy
Not mapped aria-checked
(state)EVENT_OBJECT_STATECHANGE
EVENT_OBJECT_STATECHANGE
object:state-changed:checked
AXValueChanged
aria-disabled
(state)EVENT_OBJECT_STATECHANGE
EVENT_OBJECT_STATECHANGE
object:state-changed:enabled
and object:state-changed:sensitive
Not mapped aria-dropeffect
(state)Not mapped IAccessible2: IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
object:property-change
Not mapped aria-expanded
(state)EVENT_OBJECT_STATECHANGE
EVENT_OBJECT_STATECHANGE
object:state-changed:expanded
AXRowExpanded
,
AXRowCollapsed
,
AXRowCountChanged
aria-grabbed
(state)EVENT_OBJECT_SELECTION
EVENT_OBJECT_SELECTION
IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
object:property-change
Not mapped aria-hidden
(state)EVENT_OBJECT_HIDE
, EVENT_OBJECT_SHOW
IAccessible2: IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED
object:property-change
AXUIElementDestroyed
,
AXUIElementCreated
aria-invalid
(state)EVENT_OBJECT_STATECHANGE
EVENT_OBJECT_STATECHANGE
object:state-changed:invalid_entry
AXInvalidStatusChanged
aria-pressed
(state)EVENT_OBJECT_STATECHANGE
EVENT_OBJECT_STATECHANGE
object:state-changed:pressed
Not mapped aria-readonly
EVENT_OBJECT_STATECHANGE
EVENT_OBJECT_STATECHANGE
object:state-changed:readonly
Not mapped aria-required
Not mapped EVENT_OBJECT_STATECHANGE
object:state-changed:required
Not mapped 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
EVENT_OBJECT_VALUECHANGE
object:property-change:accessible-value
AXValueChanged
aria-valuetext
Not mapped EVENT_OBJECT_VALUECHANGE
object:property-change:accessible-value
AXValueChanged
5.8.2. Changes to document content or node visibility
Scenario MSAA + UIA Express event MSAA + IAccessible2 event ATK/AT-SPI event Mac OS X Notification When text is removed EVENT_OBJECT_LIVEREGIONCHANGED
IAccessible2: IA2_EVENT_TEXT_REMOVED
text_changed::delete
If in a live region, AXLiveRegionChanged
When text is inserted EVENT_OBJECT_LIVEREGIONCHANGED
IAccessible2: IA2_EVENT_TEXT_INSERTED
text_changed::insert
If in a live region, AXLiveRegionChanged
When text is changed EVENT_OBJECT_LIVEREGIONCHANGED
IAccessible2: IA2_EVENT_TEXT_REMOVE
and IA2_EVENT_TEXT_INSERTED
text_changed::delete
and text_changed::insert
If in a live region, AXLiveRegionChanged
Scenario MSAA ATK/AT-SPI event Mac OS X 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.
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.
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 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 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 Mac OS X, 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
(if any).aria-atomic
="true"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
(state) changes:Scenario MSAA ATK/AT-SPI Mac OS X Focus change EVENT_OBJECT_SELECTION
and EVENT_OBJECT_STATECHANGE
on newly focused item.object:selection_changed
on the current container.AXSelectedChildrenChanged
on an element with a role that supports that property. User agents MUST fire the following events when aria-multiselectable
="true"aria-selected
(state) changes on a descendant, as follows:Scenario MSAA ATK/AT-SPI Mac OS X Toggle aria-selected
EVENT_OBJECT_SELECTIONADD
/EVENT_OBJECT_SELECTIONREMOVE
on the item.object:selection_changed
on the current container.AXSelectedChildrenChanged
Selection follows focus EVENT_OBJECT_SELECTION
and EVENT_OBJECT_STATECHANGE
on newly focused item.object:selection_changed
on the current container.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.The user agent MAY fire a single object:selection_changed
event on the container, vs. multiple events, for performance.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. 6.2. Author Errors
aria-posinset
being within 1 and aria-setsize
, inclusive. User agents are not responsible for logical validation, such as the following:aria-activedescendant
being a DOM-descendant of the element with the relation.checkbox
actually behaves like a checkbox.aria-activedescendant
actually points to a descendant or another owned element.WAI-ARIA role Required Attribute Default value checkbox
aria-checked
See aria-checked="false"
in State and Property mapping table. menuitemcheckbox
aria-checked
See aria-checked="false"
in State and Property mapping table. menuitemradio
aria-checked
See aria-checked="false"
in State and Property mapping table. radio
aria-checked
See aria-checked="false"
in State and Property mapping table. combobox
aria-expanded
See aria-expanded="false"
in State and Property mapping table. scrollbar
aria-controls
no mapping scrollbar
aria-orientation
See aria-orientation="vertical"
in State and Property mapping table. scrollbar
aria-valuemax
0 scrollbar
aria-valuemin
0 scrollbar
aria-valuenow
0 slider
aria-valuemax
0 slider
aria-valuemin
0 slider
aria-valuenow
0 spinbutton
aria-valuemax
0 spinbutton
aria-valuemin
0 spinbutton
aria-valuenow
0 7. Appendices
7.1. References
7.1.1. Normative
References
7.1.2. Informative References
7.2. Acknowledgments
7.2.1. Participants active in the PFWG at the time of publication
7.2.2. Other ARIA contributors, commenters, and previously active PFWG participants
7.2.3. Enabling funders