Skip to content

Proposed ARIA state or property has valid value

Description

This rule checks that each ARIA state or property has a valid value type.

Applicability

This rule applies to any WAI-ARIA state or property that has a non-empty (“”) attribute value, and that is specified on an HTML or SVG element.

Expectation

Each test target has an attribute value that is valid according to its WAI-ARIA value type.

Exception: For value types ID Reference and ID Reference List no ID referenced elements are required.

Assumptions

There are no assumptions.

Accessibility Support

Some user agents treat the value of aria-* attribute as case-sensitive (even when these are not ID) while some treat them as case-insensitive.

Background

Using invalid ARIA attribute values is often the result of a typo or other developer error. These attributes are then either ignored, or a default value is assumed by browsers and assistive technologies. This often means that a state or property which should exist is missing or has an unexpected value. If the default value for invalid attribute values happens to match the author’s intention for the value, there will not be an accessibility issue.

This rule does not require the target of an ID Reference to exist. This is because referencing an element that does not exist, and not having the reference at all has the same end result. A common use case for using ID Reference for a non-existing ID is to use a static aria-errormessage on an input element, and to only insert the element with the error message if there is an actual error. There are some cases in which ID references are required. These are tested in a separate rule.

Bibliography

Accessibility Requirements Mapping

Secondary Requirements

This rule is related to the following accessibility requirements, but was not designed to test this requirements directly. These secondary requirements can either be stricter than the rule requires, or may be satisfied in ways not tested by the rule:

Input Aspects

The following aspects are required in using this rule.

Test Cases

Passed

Passed Example 1

Open in a new tab

The aria-label attribute value of Family name is allowed for the string value type.

<div role="textbox" aria-label="Family name"></div>

Passed Example 2

Open in a new tab

The aria-required attribute value of true is allowed for the true/false value type.

<div role="textbox" aria-required="true" aria-label="Family name"></div>

Passed Example 3

Open in a new tab

The aria-expanded attribute value of undefined is allowed for the true/false/undefined value type.

<div role="button" aria-expanded="undefined">A button</div>

Passed Example 4

Open in a new tab

The aria-pressed attribute value of mixed is allowed for the tristate value type.

<div role="button" aria-pressed="mixed">Partially pressed button</div>

Passed Example 5

Open in a new tab

The aria-errormessage attribute value is an ID Reference value type. The presence of an element with a matching ID is not required by this rule.

<div role="textbox" aria-errormessage="my-error" aria-label="A textbox"></div>

Passed Example 6

Open in a new tab

The aria-owns attribute value is a valid ID Reference List value type. Both tokens reference elements that exist in the same [DOM tree][].

<h1>Shopping list</h1>
<div role="list" aria-owns="item1 item2"></div>
<div id="item1">Apples</div>
<div id="item2">Bananas</div>

Passed Example 7

Open in a new tab

The aria-rowindex attribute value of 2 is a valid integer value type.

<div role="gridcell" aria-rowindex="2">Fred</div>

Passed Example 8

Open in a new tab

The aria-valuemin, aria-valuemax and aria-valuenow attribute values are valid for a number value type.

<div role="spinbutton" aria-valuemin="1.0" aria-valuemax="2.0" aria-valuenow="1.5" aria-label="Select a value"></div>

Passed Example 9

Open in a new tab

The aria-current attribute value of page is a valid token value type.

<a href="/" aria-current="page">Home</a>

Passed Example 10

Open in a new tab

The aria-relevant attribute value has a text and removals tokens. Both are valid tokens for a aria-relevant token list value type.

<div role="alert" aria-relevant="text removals"></div>

Failed

Failed Example 1

Open in a new tab

The aria-required attribute value of undefined is not valid for a true/false value type.

<div role="textbox" aria-required="undefined" aria-label="A required textbox"></div>

Failed Example 2

Open in a new tab

The aria-expanded attribute value of collapsed is not valid for a true/false/undefined value type.

<div role="button" aria-expanded="collapsed">A button</div>

Failed Example 3

Open in a new tab

The aria-pressed attribute value of horizontal is not valid for a tristate value type.

<div role="button" aria-pressed="horizontal">An other button</div>

Failed Example 4

Open in a new tab

The aria-rowindex attribute value of 2.5 is not valid for an integer value type because it is a decimal number.

<div role="gridcell" aria-rowindex="2.5">Fred</div>

Failed Example 5

Open in a new tab

The aria-valuemin, aria-valuemax and aria-valuenow attribute values are strings. These should all be of the number value type instead.

<div role="spinbutton" aria-valuemin="one" aria-valuemax="three" aria-valuenow="two" aria-label="Choose a value"></div>

Failed Example 6

Open in a new tab

The aria-live attribute value of page is not a valid token, because page is not a token for aria-live.

<div role="main" aria-live="page"></div>

Failed Example 7

Open in a new tab

The aria-relevant attribute value has the two tokens text and always. The always token is not valid for the aria-relevant token list. In order to be a valid value, all tokens must be valid.

<div role="alert" aria-relevant="text always"></div>

Inapplicable

Inapplicable Example 1

Open in a new tab

Element does not have any ARIA states or properties

<div>Some Content</div>

Inapplicable Example 2

Open in a new tab

Element has ARIA role, but no ARIA states or properties

<div role="button">Some Content</div>

Inapplicable Example 3

Open in a new tab

The aria-live attribute does not have a value.

<div role="alert" aria-live>Remember to be awesome!</div>

Inapplicable Example 4

Open in a new tab

The aria-hidden attribute is not on an HTML or SVG element.

<math aria-hidden="false"></math>

Glossary

Attribute value

The attribute value of a content attribute set on an HTML element is the value that the attribute gets after being parsed and computed according to specifications. It may differ from the value that is actually written in the HTML code due to trimming whitespace or non-digits characters, default values, or case-insensitivity.

Some notable case of attribute value, among others:

This list is not exhaustive, and only serves as an illustration for some of the most common cases.

The attribute value of an IDL attribute is the value returned on getting it. Note that when an IDL attribute reflects a content attribute, they have the same attribute value.

Namespaced Element

An element with a specific namespaceURI value from HTML namespaces. For example an “SVG element” is any element with the “SVG namespace”, which is http://www.w3.org/2000/svg.

Namespaced elements are not limited to elements described in a specification. They also include custom elements. Elements such as a and title have a different namespace depending on where they are used. For example a title in an HTML page usually has the HTML namespace. When used in an svg element, a title element has the SVG namespace instead.

Outcome

An outcome is a conclusion that comes from evaluating an ACT Rule on a test subject or one of its constituent test target. An outcome can be one of the three following types:

Note: A rule has one passed or failed outcome for every test target. When there are no test targets the rule has one inapplicable outcome. This means that each test subject will have one or more outcomes.

Note: Implementations using the EARL10-Schema can express the outcome with the outcome property. In addition to passed, failed and inapplicable, EARL 1.0 also defined an incomplete outcome. While this cannot be the outcome of an ACT Rule when applied in its entirety, it often happens that rules are only partially evaluated. For example, when applicability was automated, but the expectations have to be evaluated manually. Such “interim” results can be expressed with the incomplete outcome.

Rule Versions

  1. Latest version, 20 December 2023

Implementations

This section is not part of the official rule. It is populated dynamically and not accounted for in the change history or the last modified date.

Implementation Type Consistency Report
Alfa (fully automated) 0.57.2 Automated tool Consistent Alfa (fully automated) Report
Alfa (semi-automated) 0.57.2 Semi-automated tool Consistent Alfa (semi-automated) Report
Axe DevTools Pro 4.37.1 Semi-automated tool Consistent Axe DevTools Pro Report
Axe-core 4.8.3 Automated tool Consistent Axe-core Report
Equal Access Accessibility Checker 3.1.42-rc.0 Automated tool Consistent Equal Access Accessibility Checker Report
QualWeb 3.0.0 Automated tool Consistent QualWeb Report
SortSite 6.45 Automated tool Consistent SortSite Report
Total Validator 17.4.0 Linter Consistent Total Validator Report
Total Validator (+Browser) 17.4.0 Automated tool Consistent Total Validator (+Browser) Report
ember-template-lint 5.5.1 Linter Partial ember-template-lint Report
Back to Top