WCAG 2.0 Accessibility Standard
WCAG 2.0 was published in 2008, and covers a wide range of recommendations for making web content more accessible. It covers a wider range of disabilities than WCAG 1.0 including: blindness and low vision, deafness and hearing loss, learning disabilities, cognitive limitations, limited movement, speech disabilities, photosensitivity and combinations of these.
Rules
This section lists the 312 rules covering 36 checkpoints for WCAG 2.0 supported by the current version of the product.
1.1 Text Alternatives
1.1.1 A Non-text Content - 22 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)
- 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 - 86 rules
- Headings should not contain headings (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 interactive 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)
table
cannot have ancestorcaption
(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)role=caption
must be owned byrole=figure
orgrid
ortable
ortreegrid
(HTML)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=menubar` 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) - Element
dd
requiresdl
parent (HTML) - Element
dt
requiresdl
parent (HTML) - Element
li
requiresol
orul
parent (HTML) - Element
option
requiresselect
oroptgroup
parent (HTML) - Element
summary
requires details` parent (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.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
- CSS depends on default colors (HTML)
- Justified text is hard to read (HTML)
1.4.9 AAA Images of Text (No Exception) - No rules
2.1 Keyboard Accessible
2.1.1 A Keyboard - 13 rules
iframe
with interactive elements is excluded from tab order (HTML)- 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.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.3 Seizures
2.3.1 A Three Flashes or Below Threshold - 1 rule
2.3.2 AAA Three Flashes - 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
label
is blank (HTML)- Generic radio button labels need a
fieldset
(HTML)
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)
3.1 Readable
3.1.1 A Language of Page - 2 rules
- Page
lang
is invalid (HTML) - Missing page language (PDF and HTML)
3.1.2 AA Language of Parts - 2 rules
3.1.3 AAA Unusual Words - No rules
3.1.4 AAA Abbreviations - No rules
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 - 1 rule
- Parsing (obselete) (HTML)
4.1.2 A Name, Role, Value - 137 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)
- Summary has no accessible name (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)
- Body element is hidden (HTML)
- Hidden element is focusable (HTML)
- ARIA
role
hides focusable children (HTML) - Clickable control without
tabindex
(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)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)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=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)- Expanded
role=combobox
must havearia-controls
(HTML) - Focusable
role=separator
must havearia-valuenow
(HTML) - Missing ARIA attribute (HTML)
- Invalid
aria-controls
value (HTML)