ARIA Changes
v5 adds ARIA 1.3 support and changes the default ARIA version to 1.3. The wai-aria rule option is also renamed.
What changed
| Change | Who is affected |
|---|---|
| ARIA 1.3 support added (now default) | All users |
generic role becomes transparent in 1.3 | All users |
<aside> conditional role mapping in 1.3 | All users |
image / img role synonym in 1.3 | All users |
wai-aria option renamed | Users with checkingRequiredOwnedElements in config |
ARIA version configuration
The default ARIA version is now "1.3". If you need the previous behavior, set ariaVersion globally via ruleCommonSettings. See the Config migration guide for details on this new property.
{
"ruleCommonSettings": {
"ariaVersion": "1.2"
}
}
You can also set it per rule:
{
"rules": {
"wai-aria": {
"options": {
"version": "1.2"
}
}
}
}
The default is "1.3". You only need to change your config if you want ARIA 1.2 behavior.
Generic role transparency (ARIA 1.3)
This is the most significant change in ARIA 1.3. Elements with the generic role -- including bare <div> and <span> -- become transparent in accessibility tree traversal.
Before (ARIA 1.2)
A <div> wrapper between a tablist and its tab children breaks the parent-child role relationship:
<!-- ARIA 1.2: Error -- <div> blocks the tablist > tab relationship -->
<div role="tablist">
<div class="wrapper">
<button role="tab">Tab 1</button>
</div>
</div>
After (ARIA 1.3)
The same HTML passes. ARIA 1.3 says user agents must ignore elements with the generic or none role:
<!-- ARIA 1.3: OK -- <div> (generic) is transparent -->
<div role="tablist">
<div class="wrapper">
<button role="tab">Tab 1</button>
</div>
</div>
Version comparison
| Behavior | '1.1' / '1.2' | '1.3' |
|---|---|---|
generic transparent for child roles | No | Yes |
generic transparent for parent role | No | Yes |
presentation / none transparent for child roles | Yes | Yes |
presentation / none transparent for parent role | No | Yes |
<aside> conditional role mapping (ARIA 1.3)
The <aside> element now uses conditional role mapping per the ARIA 1.3 spec:
- When
<aside>is not a descendant of<article>,<aside>,<main>,<nav>, or<section>→ role iscomplementary - When
<aside>is a descendant of one of those sectioning elements → role isgeneric
The landmark-roles rule has been updated accordingly: complementary is no longer checked as a top-level landmark.
Since ARIA 1.3 is now the default, this change affects all users immediately. If your markup uses <aside> inside sectioning elements, you may see new or different lint results.
image / img role synonym (ARIA 1.3)
In ARIA 1.3, image is the primary role name and img is a synonym. When either appears in an element's permitted roles, both are accepted:
<!-- ARIA 1.2: permitted roles include only "img" -->
<!-- ARIA 1.3: permitted roles include both "image" and "img" -->
<img alt="photo" />
Rule option renamed
The wai-aria rule option checkingRequiredOwnedElements has been renamed:
| v5 (new) | v4 (deprecated) |
|---|---|
checkingAllowedAccessibilityChildRoles | checkingRequiredOwnedElements |
The old name still works. Update it when convenient -- there is no rush.
{
"rules": {
"wai-aria": {
"options": {
"checkingAllowedAccessibilityChildRoles": false
}
}
}
}
Terminology changes (for custom rule authors)
This section covers internal API changes. If you only configure ARIA rules, you can skip it.
ARIA 1.3 renames several internal concepts. The ARIARole type exposes both old and new property names:
| ARIA 1.3 (new) | ARIA 1.2 (deprecated) |
|---|---|
requiredAccessibilityParentRole | requiredContextRole |
allowedAccessibilityChildRoles | requiredOwnedElements |
Both properties hold the same values. The old names are kept as @deprecated aliases.