WCAG 2.1 Accessibility Standard
WCAG 2.1 was published in June 2018, and extends WCAG 2.0 by adding mobile accessibility plus additional success criteria for people with low vision, cognitive and learning disabilities.
Rules
This section lists the 370 rules covering 43 checkpoints for WCAG 2.1 supported by the current version of the product.
1.1 Text Alternatives
1.1.1 A Non-text Content - 23 rules
- Applet with no fallback content (HTML)
- Image map has no accessible name (HTML)
- ARIA image has no accessible name (HTML)
- Image has no accessible name (HTML)
alt
is image file name (PDF and HTML)- Graphic button has no accessible name (HTML)
- Object with no fallback content (HTML)
- ASCII art used for text alternative (HTML)
- Image accessible name uses placeholder (HTML)
- PDF graphic has no accessible name (PDF)
button
image must havealt
(HTML)- Frame
src
contains an image instead of HTML (HTML) - Server-side image maps are inaccessible (HTML)
- Alt text does not convey color information (HTML)
- Alt text not updated (HTML)
- Object has no accessible name (HTML)
- Placeholder for timed media (HTML)
- Decorative image missing null alt attribute (HTML)
- Spacer image has descriptive
alt
(HTML) - Decorative image with accessible name (HTML)
- SVG has no accessible name (HTML)
- Unicode lookalike characters used (HTML)
- Word graphic has no accessible name (Office documents)
1.2 Time Based Media
1.2.1 A Audio-only and Video-only (Prerecorded) - 2 rules
1.2.2 A Captions (Prerecorded) - No rules
1.2.3 A Audio Description or Media Alternative (Prerecorded) - No rules
1.2.4 AA Captions (Live) - No rules
1.2.5 AA Audio Description (Prerecorded) - No rules
1.2.6 AAA Sign Language (Prerecorded) - No rules
1.2.7 AAA Extended Audio Description (Prerecorded) - No rules
1.2.8 AAA Media Alternative (Prerecorded) - No rules
1.2.9 AAA Audio-only (Live) - No rules
1.3 Adaptable
1.3.1 A Info and Relationships - 56 rules
- Headings should not contain headings (HTML)
- HTML heading is blank (HTML)
- Mark up lists and list items properly (HTML)
- Data table without
th
headers (HTML) - Complex header associations need
headers
attribute (HTML) - Layout table contains data table markup (HTML)
- Layout table contains summary or caption (HTML)
fieldset
withoutlegend
(HTML)fieldset
with invalidlegend
(HTML)label
is blank (HTML)- PDF not tagged (PDF)
- PDF security blocks accessibility (PDF)
- Use
h1-h6
instead of heading-like styles (HTML) - Use
h1-h6
instead of heading-like images (HTML) - Use
strong
instead of CSSfont-weight
(HTML) - ARIA table has missing cells (HTML)
- HTML table has missing cells (HTML)
- Spaces used to simulate table layout (HTML)
- JavaScript simulated link (HTML)
fieldset
with no form elements (HTML)- CSS
content:
not available to all users (HTML) - Broken cell
headers
ID reference (HTML) - Data table hidden by
role=presentation
(HTML) - Word table without row and column headers (Office documents)
role=cell
must be owned byrole=row
(HTML)role=option
must be owned byrole=listbox
(HTML)role=menuitem
must be owned byrole=menu
ormenubar
(HTML)role=menuitemcheckbox
must be owned byrole=menu
ormenubar
(HTML)role=menuitemradio
must be owned byrole=menu
ormenubar
orgroup
(HTML)role=tab
must be owned byrole=tablist
(HTML)role=treeitem
must be owned byrole=tree
orgroup
(HTML)role=listitem
must be owned byrole=list
(HTML)role=gridcell
must be owned byrole=row
(HTML)role=columnheader
must be owned byrole=row
(HTML)role=rowheader
must be owned byrole=row
(HTML)role=row
must be owned byrole=grid
orrowgroup
ortreegrid
ortable
(HTML)role=rowgroup
must be owned byrole=grid
ortreegrid
ortable
(HTML)- `role=feed` must contain `role=article` (HTML)
- `role=grid` must contain `role=row` or `rowgroup` (HTML)
- `role=list` must contain `role=listitem` (HTML)
- `role=listbox` must contain `role=option` (HTML)
- `role=menu` must contain `role=menuitem` or `menuitemcheckbox` or `menuitemradio` (HTML)
- `role=radiogroup` must contain `role=radio` (HTML)
- `role=row` must contain `role=cell` or `columnheader` or `gridcell` or `rowheader` (HTML)
- `role=rowgroup` must contain `role=row` (HTML)
- `role=table` must contain `role=row` or `rowgroup` (HTML)
- `role=tablist` must contain `role=tab` (HTML)
- `role=tree` must contain `role=treeitem` (HTML)
- `role=treegrid` must contain `role=row` or `rowgroup` (HTML)
- Broken
aria-activedescendant
ID reference (HTML) - Broken
aria-controls
ID reference (HTML) - Broken
aria-describedby
ID reference (HTML) - Broken
aria-flowto
ID reference (HTML) - Broken
aria-labelledby
ID reference (HTML) - Broken
aria-owns
ID reference (HTML) - ARIA role is invalid (HTML)
1.3.2 A Meaningful Sequence - 7 rules
- Right-to-left language without
dir
(HTML) dir=ltr
for right-to-left language (HTML)- CSS
position:
causes meaningless sequence (HTML) - Word has spaces between each letter (HTML)
- Spaces used to simulate table layout (HTML)
- Table contains a nested table (HTML)
- Word graphic not inline (Office documents)
1.3.3 A Sensory Characteristics - 1 rule
1.3.4 AA Orientation (new in 2.1) - 1 rule
- Screen orientation locked (HTML)
1.3.5 AA Identify Input Purpose (new in 2.1) - 2 rules
1.3.6 AAA Identify Purpose (new in 2.1) - No rules
1.4 Distinguishable
1.4.1 A Use of Color - 2 rules
1.4.2 A Audio Control - 2 rules
1.4.3 AA Contrast (Minimum) - 2 rules
- CSS depends on default colors (HTML)
- Text contrast below minimum (HTML)
1.4.4 AA Resize Text - 2 rules
1.4.5 AA Images of Text - No rules
1.4.6 AAA Contrast (Enhanced) - 3 rules
- CSS depends on default colors (HTML)
- Text contrast below minimum (HTML)
- Text contrast ratio below 7:1 (HTML)
1.4.7 AAA Low or No Background Audio - No rules
1.4.8 AAA Visual Presentation - 2 rules
1.4.9 AAA Images of Text (No Exception) - No rules
1.4.10 AA Reflow (new in 2.1) - No rules
1.4.11 AA Non-Text Contrast (new in 2.1) - 2 rules
1.4.12 AA Text Spacing (new in 2.1) - 3 rules
- CSS
line-height
cannot be resized (HTML) - CSS
letter-spacing
cannot be resized (HTML) - CSS
word-spacing
cannot be resized (HTML)
1.4.13 AA Content on Hover or Focus (new in 2.1) - No rules
2.1 Keyboard Accessible
2.1.1 A Keyboard - 12 rules
- Scrollable element not keyboard accessible (HTML)
- Server-side image maps are inaccessible (HTML)
mouseup
handler without keyboard equivalent (HTML)mouseover
handler without keyboard equivalent (HTML)mouseout
handler without keyboard equivalent (HTML)mousedown
handler without keyboard equivalent (HTML)click
handler without keyboard equivalent (HTML)dblclick
handler without keyboard equivalent (HTML)- Keyboard handler without
tabindex
(HTML) - JavaScript simulated link (HTML)
- Field blurs when focused (HTML)
- Clickable control with no role (HTML)
2.1.2 A No Keyboard Trap - No rules
2.1.3 AAA Keyboard (No Exception) - 11 rules
- Scrollable element not keyboard accessible (HTML)
- Server-side image maps are inaccessible (HTML)
mouseup
handler without keyboard equivalent (HTML)mouseover
handler without keyboard equivalent (HTML)mouseout
handler without keyboard equivalent (HTML)mousedown
handler without keyboard equivalent (HTML)click
handler without keyboard equivalent (HTML)dblclick
handler without keyboard equivalent (HTML)- Keyboard handler without
tabindex
(HTML) - JavaScript simulated link (HTML)
- Field blurs when focused (HTML)
2.1.4 A Character Key Shortcuts (new in 2.1) - No rules
2.2 Enough Time
2.2.1 A Timing Adjustable - 4 rules
- Timed meta tag page refresh (HTML)
- Timed meta tag page redirect (HTML)
- Timed HTTP page redirect (HTML)
- Timed HTTP page refresh (HTML)
2.2.2 A Pause, Stop, Hide - 7 rules
- CSS animation longer than 5 seconds (HTML)
- Scrolling
marquee
element (HTML) - Flashing
blink
element (HTML) - Animated image longer than 5 seconds (HTML)
- Autoplay video longer than 5 seconds (HTML)
- CSS causes blinking (HTML)
- JavaScript causes blinking (HTML)
2.2.3 AAA No Timing - No rules
2.2.4 AAA Interruptions - 4 rules
- Timed meta tag page refresh (HTML)
- Timed meta tag page redirect (HTML)
- Timed HTTP page redirect (HTML)
- Timed HTTP page refresh (HTML)
2.2.5 AAA Re-authenticating - No rules
2.2.6 AAA Timeouts (new in 2.1) - No rules
2.3 Seizures and Physical Reactions
2.3.1 A Three Flashes or Below Threshold - 1 rule
2.3.2 AAA Three Flashes - 1 rule
2.3.3 AAA Animation from Interactions (new in 2.1) - 1 rule
2.4 Navigable
2.4.1 A Bypass Blocks - 2 rules
- Frame
title
is frame file name (HTML) - Broken skip link (HTML)
2.4.2 A Page Titled - 4 rules
- Document title missing (PDF and HTML)
- Document title is blank (PDF and HTML)
- Document title is placeholder (PDF and HTML)
- Document title used on multiple pages (HTML)
2.4.3 A Focus Order - 1 rule
- Tab order wrong (HTML)
2.4.4 A Link Purpose (In Context) - 4 rules
- Image map has no accessible name (HTML)
- HTML link has no accessible name (HTML)
- Same link text in same context goes to different pages (HTML)
- Ambiguous link text with no context (HTML)
2.4.5 AA Multiple Ways - 1 rule
2.4.6 AA Headings and Labels - 2 rules
2.4.7 AA Focus Visible - 2 rules
2.4.8 AAA Location - No rules
2.4.9 AAA Link Purpose (Link Only) - 6 rules
- Image map has no accessible name (HTML)
- HTML link has no accessible name (HTML)
- Ambiguous link text (PDF and HTML)
- Same link text goes to different pages (HTML)
- Same link text in same context goes to different pages (HTML)
- Ambiguous link text with no context (HTML)
2.4.10 AAA Section Headings - 1 rule
- Page with no headings (PDF and HTML)
2.5 Input Modalities
2.5.1 A Pointer Gestures (new in 2.1) - No rules
2.5.2 A Pointer Cancellation (new in 2.1) - No rules
2.5.3 A Label in Name (new in 2.1) - 1 rule
2.5.4 A Motion Actuation (new in 2.1) - No rules
2.5.5 AAA Target Size (new in 2.1) - No rules
2.5.6 AAA Concurrent Input Mechanisms (new in 2.1) - No rules
3.1 Readable
3.1.1 A Language of Page - 3 rules
- Page
lang
is invalid (HTML) - Missing page language (PDF and HTML)
- Page languages do not match (HTML)
3.1.2 AA Language of Parts - 2 rules
3.1.3 AAA Unusual Words - No rules
3.1.4 AAA Abbreviations - 1 rule
3.1.5 AAA Reading Level - 1 rule
- Page is hard to read (HTML)
3.1.6 AAA Pronunciation - No rules
3.2 Predictable
3.2.1 A On Focus - 2 rules
- Unexpected popup on page load (HTML)
- Field blurs when focused (HTML)
3.2.2 A On Input - 3 rules
select
change event blocks keyboard navigation (HTML)- Form submits on focus change (HTML)
- Script opens new window without warning (HTML)
3.2.3 AA Consistent Navigation - No rules
3.2.4 AA Consistent Identification - No rules
3.2.5 AAA Change on Request - 10 rules
- Timed meta tag page refresh (HTML)
- Timed meta tag page redirect (HTML)
- Link
target
opens new window without warning (HTML) - JavaScript opens new window without warning (HTML)
- Form auto-submits when tabbing (HTML)
- Unexpected popup on page load (HTML)
- Timed HTTP page refresh (HTML)
- Popup appears when control value changes (HTML)
- Timed JavaScript page refresh (HTML)
- Unexpected JavaScript popup (HTML)
3.3 Input Assistance
3.3.1 A Error Identification - No rules
3.3.2 A Labels or Instructions - 3 rules
fieldset
withoutlegend
(HTML)fieldset
with invalidlegend
(HTML)- Grouped fields need a label or instructions (HTML)
3.3.3 AA Error Suggestion - No rules
3.3.4 AA Error Prevention (Legal, Financial, Data) - No rules
3.3.5 AAA Help - No rules
3.3.6 AAA Error Prevention (All) - No rules
4.1 Robust
4.1.1 A Parsing - 194 rules
- HTML nesting error (HTML)
- Page has duplicate IDs (HTML)
a
cannot have clickable ancestora
(HTML)details
cannot have clickable ancestora
(HTML)embed
cannot have clickable ancestora
(HTML)iframe
cannot have clickable ancestora
(HTML)label
cannot have clickable ancestora
(HTML)a
cannot have clickable ancestorbutton
(HTML)details
cannot have clickable ancestorbutton
(HTML)embed
cannot have clickable ancestorbutton
(HTML)iframe
cannot have clickable ancestorbutton
(HTML)label
cannot have clickable ancestorbutton
(HTML)button
cannot have clickable ancestora
(HTML)textarea
cannot have clickable ancestora
(HTML)select
cannot have clickable ancestora
(HTML)input
cannot have clickable ancestora
(HTML)button
cannot have clickable ancestorbutton
(HTML)textarea
cannot have clickable ancestorbutton
(HTML)select
cannot have clickable ancestorbutton
(HTML)input
cannot have clickable ancestorbutton
(HTML)video
withcontrols
must not appear as a descendant ofa
(HTML)audio
withcontrols
must not appear as a descendant ofa
(HTML)video
withcontrols
must not appear as a descendant ofbutton
(HTML)audio
withcontrols
must not appear as a descendant ofbutton
(HTML)form
cannot have ancestorform
(HTML)progress
cannot have ancestorprogress
(HTML)meter
cannot have ancestormeter
(HTML)dfn
cannot have ancestordfn
(HTML)noscript
cannot have ancestornoscript
(HTML)label
cannot have ancestorlabel
(HTML)address
cannot have ancestoraddress
(HTML)section
cannot have ancestoraddress
(HTML)nav
cannot have ancestoraddress
(HTML)article
cannot have ancestoraddress
(HTML)header
cannot have ancestorheader
(HTML)header
cannot have ancestorfooter
(HTML)header
cannot have ancestoraddress
(HTML)footer
cannot have ancestorheader
(HTML)footer
cannot have ancestorfooter
(HTML)header
cannot have ancestordt
(HTML)footer
cannot have ancestordt
(HTML)article
cannot have ancestordt
(HTML)nav
cannot have ancestordt
(HTML)section
cannot have ancestordt
(HTML)h1
cannot have ancestordt
(HTML)h2
cannot have ancestordt
(HTML)h3
cannot have ancestordt
(HTML)h4
cannot have ancestordt
(HTML)h5
cannot have ancestordt
(HTML)h6
cannot have ancestordt
(HTML)hgroup
cannot have ancestordt
(HTML)header
cannot have ancestorth
(HTML)footer
cannot have ancestorth
(HTML)article
cannot have ancestorth
(HTML)nav
cannot have ancestorth
(HTML)section
cannot have ancestorth
(HTML)h1
cannot have ancestorth
(HTML)h2
cannot have ancestorth
(HTML)h3
cannot have ancestorth
(HTML)h4
cannot have ancestorth
(HTML)h5
cannot have ancestorth
(HTML)h6
cannot have ancestorth
(HTML)hgroup
cannot have ancestorth
(HTML)footer
cannot have ancestoraddress
(HTML)h1
cannot have ancestoraddress
(HTML)h2
cannot have ancestoraddress
(HTML)h3
cannot have ancestoraddress
(HTML)h4
cannot have ancestoraddress
(HTML)h5
cannot have ancestoraddress
(HTML)h6
cannot have ancestoraddress
(HTML)table
cannot have ancestorcaption
(HTML)a
cannot have ancestora
(HTML)a
cannot have ancestorbutton
(HTML)button
cannot have ancestora
(HTML)button
cannot have ancestorbutton
(HTML)details
cannot have ancestora
(HTML)details
cannot have ancestorbutton
(HTML)dialog
cannot have ancestora
(HTML)dialog
cannot have ancestorbutton
(HTML)embed
cannot have ancestora
(HTML)embed
cannot have ancestorbutton
(HTML)iframe
cannot have ancestora
(HTML)iframe
cannot have ancestorbutton
(HTML)label
cannot have ancestora
(HTML)label
cannot have ancestorbutton
(HTML)select
cannot have ancestora
(HTML)select
cannot have ancestorbutton
(HTML)textarea
cannot have ancestora
(HTML)textarea
cannot have ancestorbutton
(HTML)main
cannot have ancestora
(HTML)main
cannot have ancestoraddress
(HTML)main
cannot have ancestorarticle
(HTML)main
cannot have ancestoraside
(HTML)main
cannot have ancestoraudio
(HTML)main
cannot have ancestorblockquote
(HTML)main
cannot have ancestorcanvas
(HTML)main
cannot have ancestorcaption
(HTML)main
cannot have ancestordd
(HTML)main
cannot have ancestordel
(HTML)main
cannot have ancestordetails
(HTML)main
cannot have ancestordialog
(HTML)main
cannot have ancestordt
(HTML)main
cannot have ancestorfieldset
(HTML)main
cannot have ancestorfigure
(HTML)main
cannot have ancestorfooter
(HTML)main
cannot have ancestorheader
(HTML)main
cannot have ancestorins
(HTML)main
cannot have ancestorli
(HTML)main
cannot have ancestormain
(HTML)main
cannot have ancestormap
(HTML)main
cannot have ancestornav
(HTML)main
cannot have ancestornoscript
(HTML)main
cannot have ancestorobject
(HTML)main
cannot have ancestorsection
(HTML)main
cannot have ancestorslot
(HTML)main
cannot have ancestortd
(HTML)main
cannot have ancestorth
(HTML)main
cannot have ancestorvideo
(HTML)a
cannot have ancestor withrole=button
(HTML)a
cannot have ancestor withrole=link
(HTML)button
cannot have ancestor withrole=button
(HTML)button
cannot have ancestor withrole=link
(HTML)details
cannot have ancestor withrole=button
(HTML)details
cannot have ancestor withrole=link
(HTML)dialog
cannot have ancestor withrole=button
(HTML)dialog
cannot have ancestor withrole=link
(HTML)embed
cannot have ancestor withrole=button
(HTML)embed
cannot have ancestor withrole=link
(HTML)iframe
cannot have ancestor withrole=button
(HTML)iframe
cannot have ancestor withrole=link
(HTML)label
cannot have ancestor withrole=button
(HTML)label
cannot have ancestor withrole=link
(HTML)select
cannot have ancestor withrole=button
(HTML)select
cannot have ancestor withrole=link
(HTML)textarea
cannot have ancestor withrole=button
(HTML)textarea
cannot have ancestor withrole=link
(HTML)- Element with
tabindex
cannot have ancestor withrole=button
(HTML) - Element with
tabindex
cannot have ancestor withrole=link
(HTML) audio
withcontrols
cannot have ancestor withrole=button
(HTML)audio
withcontrols
cannot have ancestor withrole=link
(HTML)img
withusemap
cannot have ancestor withrole=button
(HTML)img
withusemap
cannot have ancestor withrole=link
(HTML)input
cannot have ancestor withrole=button
(HTML)input
cannot have ancestor withrole=link
(HTML)menu
withtoolbar
cannot have ancestor withrole=button
(HTML)menu
withtoolbar
cannot have ancestor withrole=link
(HTML)object
withusemap
cannot have ancestor withrole=button
(HTML)object
withusemap
cannot have ancestor withrole=link
(HTML)video
withcontrols
cannot have ancestor withrole=button
(HTML)video
withcontrols
cannot have ancestor withrole=link
(HTML)role=button
cannot have ancestor withrole=button
(HTML)role=button
cannot have ancestor withrole=link
(HTML)role=checkbox
cannot have ancestor withrole=button
(HTML)role=checkbox
cannot have ancestor withrole=link
(HTML)role=combobox
cannot have ancestor withrole=button
(HTML)role=combobox
cannot have ancestor withrole=link
(HTML)role=grid
cannot have ancestor withrole=button
(HTML)role=grid
cannot have ancestor withrole=link
(HTML)role=gridcell
cannot have ancestor withrole=button
(HTML)role=gridcell
cannot have ancestor withrole=link
(HTML)role=listbox
cannot have ancestor withrole=button
(HTML)role=listbox
cannot have ancestor withrole=link
(HTML)role=menu
cannot have ancestor withrole=button
(HTML)role=menu
cannot have ancestor withrole=link
(HTML)role=menubar
cannot have ancestor withrole=button
(HTML)role=menubar
cannot have ancestor withrole=link
(HTML)role=menuitem
cannot have ancestor withrole=button
(HTML)role=menuitem
cannot have ancestor withrole=link
(HTML)role=menuitemcheckbox
cannot have ancestor withrole=button
(HTML)role=menuitemcheckbox
cannot have ancestor withrole=link
(HTML)role=menuitemradio
cannot have ancestor withrole=button
(HTML)role=menuitemradio
cannot have ancestor withrole=link
(HTML)role=option
cannot have ancestor withrole=button
(HTML)role=option
cannot have ancestor withrole=link
(HTML)role=radio
cannot have ancestor withrole=button
(HTML)role=radio
cannot have ancestor withrole=link
(HTML)role=scrollbar
cannot have ancestor withrole=button
(HTML)role=scrollbar
cannot have ancestor withrole=link
(HTML)role=searchbox
cannot have ancestor withrole=button
(HTML)role=searchbox
cannot have ancestor withrole=link
(HTML)role=slider
cannot have ancestor withrole=button
(HTML)role=slider
cannot have ancestor withrole=link
(HTML)role=spinbutton
cannot have ancestor withrole=button
(HTML)role=spinbutton
cannot have ancestor withrole=link
(HTML)role=switch
cannot have ancestor withrole=button
(HTML)role=switch
cannot have ancestor withrole=link
(HTML)role=tab
cannot have ancestor withrole=button
(HTML)role=tab
cannot have ancestor withrole=link
(HTML)role=textbox
cannot have ancestor withrole=button
(HTML)role=textbox
cannot have ancestor withrole=link
(HTML)role=treeitem
cannot have ancestor withrole=button
(HTML)role=treeitem
cannot have ancestor withrole=link
(HTML)- HTML parsing error (HTML)
img
innoscript
beforebody
(HTML)
4.1.2 A Name, Role, Value - 22 rules
- Image map has no accessible name (HTML)
- Graphic button has no accessible name (HTML)
- Frame has no accessible name (HTML)
- Frame
title
is frame file name (HTML) label
is blank (HTML)- HTML link has no accessible name (HTML)
- Alt text not updated (HTML)
- JavaScript simulated link (HTML)
- JavaScript control with no ARIA role (HTML)
- ARIA control has no label (HTML)
- HTML form control has no accessible name (HTML)
- ARIA label references empty element (HTML)
input
button withoutvalue
or label (HTML)- ARIA button is blank (HTML)
- HTML button has no accessible name (HTML)
- ARIA menuitem is blank (HTML)
- Hidden element is focusable (HTML)
- ARIA
role
hides focusable children (HTML) - Clickable control without
tabindex
(HTML) - Focusable
role=separator
must havearia-valuenow
(HTML) - Missing ARIA attribute (HTML)
- Invalid
aria-controls
value (HTML)
4.1.3 AA Status Messages (new in 2.1) - No rules