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.
Related rules
Bibliography
- Understanding Success Criterion 4.1.2: Name, Role, Value
- ARIA5: Using WAI-ARIA state and property attributes to expose the state of a user interface component
- WAI-ARIA 1.2, Definitions of States and Properties
- WAI-ARIA 1.2, Characteristics of States and Properties, Value
- Uniform Resource Identifier (URI): Generic Syntax (RFC 3986)
Accessibility Requirements Mapping
- This rule is not required for conformance to WCAG 2.1 at any level.
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:
- 1.3.1 Info and Relationships (Level A): This success criterion is less strict than this rule. This is because the rule does not ignore irrelevant ARIA properties. Some of the failed examples satisfy this success criterion.
- 4.1.2 Name, Role, Value (Level A): This success criterion is less strict than this rule. This is because the rule does not ignore irrelevant ARIA properties. Some of the failed examples satisfy this success criterion.
Input Aspects
The following aspects are required in using this rule.
Test Cases
Passed
Passed Example 1
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
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
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
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
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
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
The aria-rowindex
attribute value of 2 is a valid integer
value type.
<div role="gridcell" aria-rowindex="2">Fred</div>
Passed Example 8
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
The aria-current
attribute value of page
is a valid token
value type.
<a href="/" aria-current="page">Home</a>
Passed Example 10
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
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
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
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
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
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
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
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
Element does not have any ARIA states or properties
<div>Some Content</div>
Inapplicable Example 2
Element has ARIA role, but no ARIA states or properties
<div role="button">Some Content</div>
Inapplicable Example 3
The aria-live
attribute does not have a value.
<div role="alert" aria-live>Remember to be awesome!</div>
Inapplicable Example 4
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:
- For enumerated attributes, the attribute value is either the state of the attribute, or the keyword that maps to it; even for the default states. Thus
<input type="image" />
has an attribute value of eitherImage Button
(the state) orimage
(the keyword mapping to it), both formulations having the same meaning; similarly, “an input element with atype
attribute value ofText
” can be either<input type="text" />
,<input />
(missing value default), or<input type="invalid" />
(invalid value default). - For boolean attributes, the attribute value is
true
when the attribute is present andfalse
otherwise. Thus<button disabled>
,<button disabled="disabled">
and<button disabled="">
all have adisabled
attribute value oftrue
. - For attributes whose value is used in a case-insensitive context, the attribute value is the lowercase version of the value written in the HTML code.
- For attributes that accept numbers, the attribute value is the result of parsing the value written in the HTML code according to the rules for parsing this kind of number.
- For attributes that accept sets of tokens, whether space separated or comma separated, the attribute value is the set of tokens obtained after parsing the set and, depending on the case, converting its items to lowercase (if the set is used in a case-insensitive context).
- For
aria-*
attributes, the attribute value is computed as indicated in the WAI-ARIA specification and the HTML Accessibility API Mappings.
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:
- Inapplicable: No part of the test subject matches the applicability
- Passed: A test target meets all expectations
- Failed: A test target does not meet all expectations
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
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.