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)
altis 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)
buttonimage must havealt(HTML)- Frame
srccontains 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
thheaders (HTML) - Complex header associations need
headersattribute (HTML) - Layout table contains data table markup (HTML)
- Layout table contains summary or caption (HTML)
fieldsetwithoutlegend(HTML)fieldsetwith invalidlegend(HTML)labelis blank (HTML)- PDF not tagged (PDF)
- PDF security blocks accessibility (PDF)
- Use
h1-h6instead of heading-like styles (HTML) - Use
h1-h6instead of heading-like images (HTML) - ARIA table has missing cells (HTML)
- HTML table has missing cells (HTML)
- Spaces used to simulate table layout (HTML)
- JavaScript simulated link (HTML)
fieldsetwith no interactive elements (HTML)- CSS
content:not available to all users (HTML) - Broken cell
headersID reference (HTML) - Data table hidden by
role=presentation(HTML) - Word table without row and column headers (Office documents)
tablecannot have ancestorcaption(HTML)maincannot have ancestora(HTML)maincannot have ancestoraddress(HTML)maincannot have ancestorarticle(HTML)maincannot have ancestoraside(HTML)maincannot have ancestoraudio(HTML)maincannot have ancestorblockquote(HTML)maincannot have ancestorcanvas(HTML)maincannot have ancestorcaption(HTML)maincannot have ancestordd(HTML)maincannot have ancestordel(HTML)maincannot have ancestordetails(HTML)maincannot have ancestordialog(HTML)maincannot have ancestordt(HTML)maincannot have ancestorfieldset(HTML)maincannot have ancestorfigure(HTML)maincannot have ancestorfooter(HTML)maincannot have ancestorheader(HTML)maincannot have ancestorins(HTML)maincannot have ancestorli(HTML)maincannot have ancestormain(HTML)maincannot have ancestormap(HTML)maincannot have ancestornav(HTML)maincannot have ancestornoscript(HTML)maincannot have ancestorobject(HTML)maincannot have ancestorsection(HTML)maincannot have ancestorslot(HTML)maincannot have ancestortd(HTML)maincannot have ancestorth(HTML)maincannot have ancestorvideo(HTML)role=captionmust be owned byrole=figureorgridortableortreegrid(HTML)role=cellmust be owned byrole=row(HTML)role=optionmust be owned byrole=listbox(HTML)role=menuitemmust be owned byrole=menuormenubar(HTML)role=menuitemcheckboxmust be owned byrole=menuormenubar(HTML)role=menuitemradiomust be owned byrole=menuormenubarorgroup(HTML)role=tabmust be owned byrole=tablist(HTML)role=treeitemmust be owned byrole=treeorgroup(HTML)role=listitemmust be owned byrole=list(HTML)role=gridcellmust be owned byrole=row(HTML)role=columnheadermust be owned byrole=row(HTML)role=rowheadermust be owned byrole=row(HTML)role=rowmust be owned byrole=gridorrowgrouportreegridortable(HTML)role=rowgroupmust be owned byrole=gridortreegridortable(HTML)- `role=feed` must contain `role=article` (HTML)
- `role=grid` must contain `role=row` or `rowgroup` (HTML)
- `ul` must contain `li` or `role=listitem` (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-activedescendantID reference (HTML) - Element
ddrequiresdlparent (HTML) - Element
dtrequiresdlparent (HTML) - Element
lirequiresolorulparent (HTML) - Element
optionrequiresselectoroptgroupparent (HTML) - Element
summaryrequires details` parent (HTML)
1.3.2 A Meaningful Sequence - 7 rules
- Right-to-left language without
dir(HTML) dir=ltrfor 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
iframewith interactive elements is excluded from tab order (HTML)- Scrollable element not keyboard accessible (HTML)
- Server-side image maps are inaccessible (HTML)
mouseuphandler without keyboard equivalent (HTML)mouseoverhandler without keyboard equivalent (HTML)mouseouthandler without keyboard equivalent (HTML)mousedownhandler without keyboard equivalent (HTML)clickhandler without keyboard equivalent (HTML)dblclickhandler 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)
mouseuphandler without keyboard equivalent (HTML)mouseoverhandler without keyboard equivalent (HTML)mouseouthandler without keyboard equivalent (HTML)mousedownhandler without keyboard equivalent (HTML)clickhandler without keyboard equivalent (HTML)dblclickhandler 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 - 6 rules
- CSS animation longer than 5 seconds (HTML)
- Scrolling
marqueeelement (HTML) - Flashing
blinkelement (HTML) - Animated image longer than 5 seconds (HTML)
- Autoplay video longer than 5 seconds (HTML)
- CSS causes blinking (HTML)
2.2.3 AAA No Timing - No rules
2.2.4 AAA Interruptions - 5 rules
- Timed meta tag page refresh (HTML)
- Meta tag has delayed 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
titleis 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
labelis 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
langis 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
selectchange 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 - 11 rules
- Timed meta tag page refresh (HTML)
- Meta tag has delayed refresh (HTML)
- Timed meta tag page redirect (HTML)
- Link
targetopens 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
fieldsetwithoutlegend(HTML)fieldsetwith 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
titleis frame file name (HTML) labelis 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)
inputbutton withoutvalueor 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
rolehides focusable children (HTML) - Clickable control without
tabindex(HTML) acannot have clickable ancestora(HTML)detailscannot have clickable ancestora(HTML)embedcannot have clickable ancestora(HTML)iframecannot have clickable ancestora(HTML)labelcannot have clickable ancestora(HTML)acannot have clickable ancestorbutton(HTML)detailscannot have clickable ancestorbutton(HTML)embedcannot have clickable ancestorbutton(HTML)iframecannot have clickable ancestorbutton(HTML)labelcannot have clickable ancestorbutton(HTML)buttoncannot have clickable ancestora(HTML)textareacannot have clickable ancestora(HTML)selectcannot have clickable ancestora(HTML)inputcannot have clickable ancestora(HTML)buttoncannot have clickable ancestorbutton(HTML)textareacannot have clickable ancestorbutton(HTML)selectcannot have clickable ancestorbutton(HTML)inputcannot have clickable ancestorbutton(HTML)videowithcontrolsmust not appear as a descendant ofa(HTML)audiowithcontrolsmust not appear as a descendant ofa(HTML)videowithcontrolsmust not appear as a descendant ofbutton(HTML)audiowithcontrolsmust not appear as a descendant ofbutton(HTML)acannot have ancestora(HTML)acannot have ancestorbutton(HTML)buttoncannot have ancestora(HTML)buttoncannot have ancestorbutton(HTML)detailscannot have ancestora(HTML)detailscannot have ancestorbutton(HTML)dialogcannot have ancestora(HTML)dialogcannot have ancestorbutton(HTML)embedcannot have ancestora(HTML)embedcannot have ancestorbutton(HTML)iframecannot have ancestora(HTML)iframecannot have ancestorbutton(HTML)labelcannot have ancestora(HTML)labelcannot have ancestorbutton(HTML)selectcannot have ancestora(HTML)selectcannot have ancestorbutton(HTML)textareacannot have ancestora(HTML)textareacannot have ancestorbutton(HTML)acannot have ancestor withrole=button(HTML)acannot have ancestor withrole=link(HTML)buttoncannot have ancestor withrole=button(HTML)buttoncannot have ancestor withrole=link(HTML)detailscannot have ancestor withrole=button(HTML)detailscannot have ancestor withrole=link(HTML)dialogcannot have ancestor withrole=button(HTML)dialogcannot have ancestor withrole=link(HTML)embedcannot have ancestor withrole=button(HTML)embedcannot have ancestor withrole=link(HTML)iframecannot have ancestor withrole=button(HTML)iframecannot have ancestor withrole=link(HTML)labelcannot have ancestor withrole=button(HTML)labelcannot have ancestor withrole=link(HTML)selectcannot have ancestor withrole=button(HTML)selectcannot have ancestor withrole=link(HTML)textareacannot have ancestor withrole=button(HTML)textareacannot have ancestor withrole=link(HTML)- Element with
tabindexcannot have ancestor withrole=button(HTML) - Element with
tabindexcannot have ancestor withrole=link(HTML) audiowithcontrolscannot have ancestor withrole=button(HTML)audiowithcontrolscannot have ancestor withrole=link(HTML)imgwithusemapcannot have ancestor withrole=button(HTML)imgwithusemapcannot have ancestor withrole=link(HTML)inputcannot have ancestor withrole=button(HTML)inputcannot have ancestor withrole=link(HTML)menuwithtoolbarcannot have ancestor withrole=button(HTML)menuwithtoolbarcannot have ancestor withrole=link(HTML)objectwithusemapcannot have ancestor withrole=button(HTML)objectwithusemapcannot have ancestor withrole=link(HTML)videowithcontrolscannot have ancestor withrole=button(HTML)videowithcontrolscannot have ancestor withrole=link(HTML)role=buttoncannot have ancestor withrole=button(HTML)role=buttoncannot have ancestor withrole=link(HTML)role=checkboxcannot have ancestor withrole=button(HTML)role=checkboxcannot have ancestor withrole=link(HTML)role=comboboxcannot have ancestor withrole=button(HTML)role=comboboxcannot have ancestor withrole=link(HTML)role=gridcannot have ancestor withrole=button(HTML)role=gridcannot have ancestor withrole=link(HTML)role=gridcellcannot have ancestor withrole=button(HTML)role=gridcellcannot have ancestor withrole=link(HTML)role=listboxcannot have ancestor withrole=button(HTML)role=listboxcannot have ancestor withrole=link(HTML)role=menucannot have ancestor withrole=button(HTML)role=menucannot have ancestor withrole=link(HTML)role=menubarcannot have ancestor withrole=button(HTML)role=menubarcannot have ancestor withrole=link(HTML)role=menuitemcannot have ancestor withrole=button(HTML)role=menuitemcannot have ancestor withrole=link(HTML)role=menuitemcheckboxcannot have ancestor withrole=button(HTML)role=menuitemcheckboxcannot have ancestor withrole=link(HTML)role=menuitemradiocannot have ancestor withrole=button(HTML)role=menuitemradiocannot have ancestor withrole=link(HTML)role=optioncannot have ancestor withrole=button(HTML)role=optioncannot have ancestor withrole=link(HTML)role=radiocannot have ancestor withrole=button(HTML)role=radiocannot have ancestor withrole=link(HTML)role=scrollbarcannot have ancestor withrole=link(HTML)role=searchboxcannot have ancestor withrole=button(HTML)role=searchboxcannot have ancestor withrole=link(HTML)role=slidercannot have ancestor withrole=button(HTML)role=slidercannot have ancestor withrole=link(HTML)role=spinbuttoncannot have ancestor withrole=button(HTML)role=spinbuttoncannot have ancestor withrole=link(HTML)role=switchcannot have ancestor withrole=button(HTML)role=switchcannot have ancestor withrole=link(HTML)role=tabcannot have ancestor withrole=button(HTML)role=tabcannot have ancestor withrole=link(HTML)role=textboxcannot have ancestor withrole=button(HTML)role=textboxcannot have ancestor withrole=link(HTML)role=treeitemcannot have ancestor withrole=button(HTML)role=treeitemcannot have ancestor withrole=link(HTML)- `aria-hidden` not allowed on elements with `hidden=until-found` (HTML)
- Focusable
role=separatormust havearia-valuenow(HTML) - Missing ARIA attribute (HTML)
- Invalid
aria-controlsvalue (HTML)