Rules

Every rule maps to one or more WCAG 2.2 success criteria. Rules without a WCAG mapping are tagged as best practices.

Rule IDWCAGLevelDescription
adaptable/aria-required-children1.3.1ACertain ARIA roles require specific child roles to be present.
adaptable/aria-required-parent1.3.1ACertain ARIA roles must be contained within specific parent roles.
adaptable/autocomplete-valid1.3.5AAAutocomplete attribute must use valid values from the HTML specification.
adaptable/definition-list1.3.1A<dl> elements must only contain <dt>, <dd>, <div>, <script>, <template>, or <style>.
adaptable/dl-children1.3.1A<dt> and <dd> elements must be contained in a <dl>.
adaptable/empty-table-header1.3.1ATable header cells should have visible text.
adaptable/list-children1.3.1A<ul> and <ol> must only contain <li>, <script>, <template>, or <style> as direct children.
adaptable/listitem-parent1.3.1A<li> elements must be contained in a <ul>, <ol>, or <menu>.
adaptable/orientation-lock1.3.4AAPage orientation must not be restricted using CSS transforms.
adaptable/scope-attr-valid1.3.1AThe scope attribute on table headers must have a valid value.
adaptable/td-has-header1.3.1AData cells in tables larger than 3x3 should have associated headers.
adaptable/td-headers-attr1.3.1AAll cells in a table using headers attribute must reference valid header IDs.
adaptable/th-has-data-cells1.3.1ATable headers should be associated with data cells.
aria/aria-allowed-attr4.1.2AARIA attributes must be allowed for the element's role.
aria/aria-allowed-role4.1.2AARIA role must be appropriate for the element.
aria/aria-hidden-body4.1.2Aaria-hidden='true' must not be present on the document body.
aria/aria-hidden-focus4.1.2AElements with aria-hidden='true' must not contain focusable elements.
aria/aria-prohibited-attr4.1.2AARIA attributes must not be prohibited for the element's role.
aria/aria-required-attr4.1.2AElements with ARIA roles must have all required ARIA attributes.
aria/aria-roles4.1.2AARIA role values must be valid.
aria/aria-valid-attr4.1.2AARIA attributes must be valid (correctly spelled).
aria/aria-valid-attr-value4.1.2AARIA attributes must have valid values.
aria/presentation-role-conflict4.1.2AElements with role='presentation' or role='none' must not be focusable or have global ARIA attributes.
aria/presentational-children-focusable4.1.2AElements with a role that makes children presentational must not contain focusable content.
distinguishable/color-contrast1.4.3AAText elements must have sufficient color contrast against the background.
distinguishable/color-contrast-enhanced1.4.6AAAText elements must have enhanced color contrast against the background (WCAG AAA).
distinguishable/letter-spacing1.4.12AALetter spacing set with !important in style attributes must be at least 0.12em.
distinguishable/line-height1.4.12AALine height set with !important in style attributes must be at least 1.5.
distinguishable/link-in-text-block1.4.1ALinks within text blocks must be distinguishable by more than color alone.
distinguishable/meta-viewport1.4.4AAViewport meta tag must not disable user scaling.
distinguishable/word-spacing1.4.12AAWord spacing set with !important in style attributes must be at least 0.16em.
enough-time/blink2.2.2AThe <blink> element must not be used.
enough-time/marquee2.2.2AThe <marquee> element must not be used.
enough-time/meta-refresh2.2.1AMeta refresh must not redirect or refresh automatically.
enough-time/meta-refresh-no-exception2.2.1AMeta refresh must not be used with a delay (no exceptions).
input-assistance/accessible-authentication3.3.8AAPassword inputs must not block password managers. Avoid autocomplete="off" and allow pasting.
keyboard-accessible/accesskeysBest practiceAAccesskey attribute values must be unique.
keyboard-accessible/focus-orderBest practiceANon-interactive elements with tabindex='0' must have an interactive ARIA role so assistive technologies can convey their purpose.
keyboard-accessible/focus-visible2.4.7AAElements in sequential focus order must have a visible focus indicator.
keyboard-accessible/nested-interactive4.1.2AInteractive controls must not be nested inside each other.
keyboard-accessible/scrollable-region2.1.1AScrollable regions must be keyboard accessible.
keyboard-accessible/server-image-map2.1.1AServer-side image maps must not be used.
keyboard-accessible/tabindexBest practiceAElements should not have tabindex greater than 0, which disrupts natural tab order.
labels-and-names/aria-command-name4.1.2AARIA commands must have an accessible name.
labels-and-names/aria-dialog-name4.1.2AARIA dialogs must have an accessible name.
labels-and-names/aria-input-field-name4.1.2AARIA input fields must have an accessible name.
labels-and-names/aria-meter-name4.1.2AARIA meter elements must have an accessible name.
labels-and-names/aria-progressbar-name4.1.2AARIA progressbar elements must have an accessible name.
labels-and-names/aria-toggle-field-name4.1.2AARIA toggle fields must have an accessible name.
labels-and-names/aria-tooltip-name4.1.2AARIA tooltips must have an accessible name.
labels-and-names/aria-treeitem-name4.1.2AARIA treeitem elements must have an accessible name.
labels-and-names/button-name4.1.2AButtons must have discernible text.
labels-and-names/duplicate-id-aria4.1.2AIDs used in ARIA and label associations must be unique to avoid broken references.
labels-and-names/form-label4.1.2AForm elements must have labels. Use <label>, aria-label, or aria-labelledby.
labels-and-names/frame-focusable-content2.1.1AIframes with interactive content must not be excluded from the tab order.
labels-and-names/frame-title4.1.2AFrames must have an accessible name.
labels-and-names/frame-title-unique4.1.2AFrame titles should be unique.
labels-and-names/input-button-name4.1.2AInput buttons must have discernible text via value, aria-label, or aria-labelledby.
labels-and-names/label-content-mismatch2.5.3AInteractive elements with visible text must have accessible names that contain that text.
labels-and-names/label-placeholder-only3.3.2AForm elements should not use placeholder attribute as the only accessible name.
labels-and-names/label-title-only4.1.2AForm elements should not use title attribute as the only accessible name.
labels-and-names/multiple-labels4.1.2AForm fields should not have multiple label elements.
labels-and-names/summary-name4.1.2A<summary> elements must have an accessible name.
landmarks/banner-is-top-levelBest practiceABanner landmark should not be nested within another landmark.
landmarks/complementary-is-top-levelBest practiceAAside (complementary) landmark should be top-level or directly inside main.
landmarks/contentinfo-is-top-levelBest practiceAContentinfo landmark should not be nested within another landmark.
landmarks/landmark-mainBest practiceAPage should have exactly one main landmark.
landmarks/landmark-uniqueBest practiceALandmarks should have unique labels when there are multiple of the same type.
landmarks/main-is-top-levelBest practiceAMain landmark should not be nested within another landmark.
landmarks/no-duplicate-bannerBest practiceAPage should not have more than one banner landmark.
landmarks/no-duplicate-contentinfoBest practiceAPage should not have more than one contentinfo landmark.
landmarks/no-duplicate-mainBest practiceAPage should not have more than one main landmark.
landmarks/regionBest practiceAAll page content should be contained within landmarks.
navigable/bypass2.4.1APage must have a mechanism to bypass repeated blocks of content.
navigable/document-title2.4.2ADocuments must have a <title> element to provide users with an overview of content.
navigable/empty-heading2.4.6AHeadings must have discernible text.
navigable/heading-orderBest practiceAHeading levels should increase by one; skipping levels (e.g. h2 to h4) makes navigation harder.
navigable/link-name2.4.4, 4.1.2ALinks must have discernible text via content, aria-label, or aria-labelledby.
navigable/p-as-heading1.3.1AParagraphs should not be styled to look like headings.
navigable/page-has-heading-oneBest practiceAPage should contain a level-one heading.
navigable/skip-link2.4.1ASkip links must point to a valid target on the page.
readable/html-has-lang3.1.1AThe <html> element must have a lang attribute.
readable/html-lang-valid3.1.1AThe lang attribute on <html> must have a valid value.
readable/html-xml-lang-mismatch3.1.1AThe lang and xml:lang attributes on <html> must match.
readable/valid-lang3.1.2AAThe lang attribute must have a valid value on all elements.
text-alternatives/area-alt1.1.1, 4.1.2AImage map <area> elements must have alternative text.
text-alternatives/image-alt-words1.1.1AImage alt text should not start with words like 'image of', 'photo of', or 'picture of' — screen readers already announce the element type.
text-alternatives/image-redundant-alt1.1.1AImage alt text should not duplicate adjacent link or button text. When alt text repeats surrounding text, screen reader users hear the same information twice.
text-alternatives/img-alt1.1.1AImages must have alternate text. Add an alt attribute to <img> elements. Decorative images may use an empty alt attribute (alt=""), role='none', or role='presentation'.
text-alternatives/input-image-alt1.1.1, 4.1.2AImage inputs (<input type="image">) must have alternate text describing the button action.
text-alternatives/object-alt1.1.1A<object> elements must have alternative text.
text-alternatives/role-img-alt1.1.1AElements with role='img' must have an accessible name.
text-alternatives/svg-img-alt1.1.1ASVG elements with an img, graphics-document, or graphics-symbol role must have an accessible name via a <title> element, aria-label, or aria-labelledby.
time-based-media/audio-transcript1.2.1AAudio elements should have a text alternative or transcript.
time-based-media/video-captions1.2.2AVideo elements must have captions via <track kind='captions'> or <track kind='subtitles'>.

95 rules