@koddsson/accessbility-scanner
v0.1.3
Published
A accessbility scanner
Downloads
23
Readme
accessbility-scanner
AXE Rules
WCAG 2.0 Level A & AA Rules
| Implemented | Rule ID | Description | Impact | Tags | Issue Type | ACT Rules | | :---------- | :------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------- | :-------------------------------------------------------------------------------- | :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ✅ | area-alt | Ensures <area> elements of image maps have alternate text | Critical | cat.text-alternatives, wcag2a, wcag244, wcag412, section508, section508.22.a, ACT | failure, needs review | c487ae | | ✅ | aria-allowed-attr | Ensures ARIA attributes are allowed for an element's role | Serious, Critical | cat.aria, wcag2a, wcag412 | failure, needs review | 5c01ea | | ❌ | aria-command-name | Ensures every ARIA button, link and menuitem has an accessible name | Serious | cat.aria, wcag2a, wcag412, ACT | failure, needs review | 97a4e1 | | ✅ | aria-hidden-body | Ensures aria-hidden='true' is not present on the document body. | Critical | cat.aria, wcag2a, wcag412 | failure | | | ❌ | aria-hidden-focus | Ensures aria-hidden elements are not focusable nor contain focusable elements | Serious | cat.name-role-value, wcag2a, wcag412 | failure, needs review | 6cfa84 | | ❌ | aria-input-field-name | Ensures every ARIA input field has an accessible name | Moderate, Serious | cat.aria, wcag2a, wcag412, ACT | failure, needs review | e086e5 | | ❌ | aria-meter-name | Ensures every ARIA meter node has an accessible name | Serious | cat.aria, wcag2a, wcag111 | failure, needs review | | | ❌ | aria-progressbar-name | Ensures every ARIA progressbar node has an accessible name | Serious | cat.aria, wcag2a, wcag111 | failure, needs review | | | ✅ | aria-required-attr | Ensures elements with ARIA roles have all required ARIA attributes | Critical | cat.aria, wcag2a, wcag412 | failure | 4e8ab6 | | ❌ | aria-required-children | Ensures elements with an ARIA role that require child roles contain them | Critical | cat.aria, wcag2a, wcag131 | failure, needs review | bc4a75 | | ❌ | aria-required-parent | Ensures elements with an ARIA role that require parent roles are contained by them | Critical | cat.aria, wcag2a, wcag131 | failure | ff89c9 | | ❌ | aria-roledescription | Ensure aria-roledescription is only used on elements with an implicit or explicit role | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | | | ✅ | aria-roles | Ensures all elements with a role attribute use a valid value | Minor, Serious, Critical | cat.aria, wcag2a, wcag412 | failure | 674b10 | | ❌ | aria-toggle-field-name | Ensures every ARIA toggle field has an accessible name | Moderate, Serious | cat.aria, wcag2a, wcag412, ACT | failure, needs review | e086e5 | | ❌ | aria-tooltip-name | Ensures every ARIA tooltip node has an accessible name | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | | | ✅ | aria-valid-attr-value | Ensures all ARIA attributes have valid values | Serious, Critical | cat.aria, wcag2a, wcag412 | failure, needs review | 6a7281 | | ✅ | aria-valid-attr | Ensures attributes that begin with aria- are valid ARIA attributes | Critical | cat.aria, wcag2a, wcag412 | failure | 5f99a7 | | ✅ | audio-caption | Ensures <audio> elements have captions | Critical | cat.time-and-media, wcag2a, wcag121, section508, section508.22.a | needs review | 2eb176, afb423 | | ❌ | blink | Ensures <blink> elements are not used | Serious | cat.time-and-media, wcag2a, wcag222, section508, section508.22.j | failure | | | ✅ | button-name | Ensures buttons have discernible text | Critical | cat.name-role-value, wcag2a, wcag412, section508, section508.22.a, ACT | failure, needs review | 97a4e1, m6b1q3 | | ❌ | bypass | Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content | Serious | cat.keyboard, wcag2a, wcag241, section508, section508.22.o | needs review | cf77f2, 047fe0, b40fd1, 3e12e1, ye5d6e | | ❌ | color-contrast | Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds | Serious | cat.color, wcag2aa, wcag143, ACT | failure, needs review | afw4f7 | | ❌ | definition-list | Ensures <dl> elements are structured correctly | Serious | cat.structure, wcag2a, wcag131 | failure | | | ❌ | dlitem | Ensures <dt> and <dd> elements are contained by a <dl> | Serious | cat.structure, wcag2a, wcag131 | failure | | | ❌ | document-title | Ensures each HTML document contains a non-empty <title> element | Serious | cat.text-alternatives, wcag2a, wcag242, ACT | failure | 2779a5 | | ❌ | duplicate-id-active | Ensures every id attribute value of active elements is unique | Serious | cat.parsing, wcag2a, wcag411 | failure | 3ea0c8 | | ✅ | duplicate-id-aria | Ensures every id attribute value used in ARIA and in labels is unique | Critical | cat.parsing, wcag2a, wcag411 | failure | 3ea0c8 | | ❌ | duplicate-id | Ensures every id attribute value is unique | Minor | cat.parsing, wcag2a, wcag411 | failure | 3ea0c8 | | ❌ | form-field-multiple-labels | Ensures form field does not have multiple label elements | Moderate | cat.forms, wcag2a, wcag332 | needs review | | | ❌ | frame-focusable-content | Ensures <frame> and <iframe> elements with focusable content do not have tabindex=-1 | Serious | cat.keyboard, wcag2a, wcag211 | failure, needs review | akn7bn | | ❌ | frame-title-unique | Ensures <iframe> and <frame> elements contain a unique title attribute | Serious | cat.text-alternatives, wcag412, wcag2a | needs review | 4b1c6c | | ❌ | frame-title | Ensures <iframe> and <frame> elements have an accessible name | Serious | cat.text-alternatives, wcag2a, wcag412, section508, section508.22.i | failure, needs review | cae760 | | ❌ | html-has-lang | Ensures every HTML document has a lang attribute | Serious | cat.language, wcag2a, wcag311, ACT | failure | b5c3f8 | | ❌ | html-lang-valid | Ensures the lang attribute of the <html> element has a valid value | Serious | cat.language, wcag2a, wcag311, ACT | failure | bf051a | | ❌ | html-xml-lang-mismatch | Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page | Moderate | cat.language, wcag2a, wcag311, ACT | failure | 5b7ae0 | | ✅ | image-alt | Ensures <img> elements have alternate text or a role of none or presentation | Critical | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | 23a2a8 | | ✅ | input-button-name | Ensures input buttons have discernible text | Critical | cat.name-role-value, wcag2a, wcag412, section508, section508.22.a, ACT | failure, needs review | 97a4e1 | | ✅ | input-image-alt | Ensures <input type="image"> elements have alternate text | Critical | cat.text-alternatives, wcag2a, wcag111, wcag412, section508, section508.22.a, ACT | failure, needs review | 59796f | | ✅ | label | Ensures every form element has a label | Minor, Critical | cat.forms, wcag2a, wcag412, section508, section508.22.n, ACT | failure, needs review | e086e5 | | ❌ | link-name | Ensures links have discernible text | Serious | cat.name-role-value, wcag2a, wcag412, wcag244, section508, section508.22.a, ACT | failure, needs review | c487ae | | ❌ | list | Ensures that lists are structured correctly | Serious | cat.structure, wcag2a, wcag131 | failure | | | ❌ | listitem | Ensures <li> elements are used semantically | Serious | cat.structure, wcag2a, wcag131 | failure | | | ❌ | marquee | Ensures <marquee> elements are not used | Serious | cat.parsing, wcag2a, wcag222 | failure | | | ✅ | meta-refresh | Ensures <meta http-equiv="refresh"> is not used for delayed refresh | Critical | cat.time-and-media, wcag2a, wcag221 | failure | bc659a | | ✅ | nested-interactive | Ensures interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies | Serious | cat.keyboard, wcag2a, wcag412 | failure, needs review | 307n5z | | ❌ | no-autoplay-audio | Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio | Moderate | cat.time-and-media, wcag2a, wcag142, ACT | needs review | 80f0bf | | ❌ | object-alt | Ensures <object> elements have alternate text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a | failure, needs review | 8fc3b6 | | ❌ | role-img-alt | Ensures [role='img'] elements have alternate text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | 23a2a8 | | ❌ | scrollable-region-focusable | Ensure elements that have scrollable content are accessible by keyboard | Moderate | cat.keyboard, wcag2a, wcag211 | failure | 0ssw9k | | ✅ | select-name | Ensures select element has an accessible name | Minor, Critical | cat.forms, wcag2a, wcag412, section508, section508.22.n, ACT | failure, needs review | e086e5 | | ❌ | server-side-image-map | Ensures that server-side image maps are not used | Minor | cat.text-alternatives, wcag2a, wcag211, section508, section508.22.f | needs review | | | ❌ | svg-img-alt | Ensures <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | 7d6734 | | ❌ | td-headers-attr | Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table | Serious | cat.tables, wcag2a, wcag131, section508, section508.22.g | failure, needs review | a25f45 | | ❌ | th-has-data-cells | Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe | Serious | cat.tables, wcag2a, wcag131, section508, section508.22.g | failure, needs review | d0f69e | | ❌ | valid-lang | Ensures lang attributes have valid values | Serious | cat.language, wcag2aa, wcag312, ACT | failure | de46e4 | | ✅ | video-caption | Ensures <video> elements have captions | Critical | cat.text-alternatives, wcag2a, wcag122, section508, section508.22.a | needs review | eac66b |
WCAG 2.1 Level A & AA Rules
| Implemented | Rule ID | Description | Impact | Tags | Issue Type | ACT Rules | | :---------- | :----------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :------ | :------------------------------------------- | :--------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | | ❌ | autocomplete-valid | Ensure the autocomplete attribute is correct and suitable for the form field | Serious | cat.forms, wcag21aa, wcag135, ACT | failure | 73f2c2 | | ❌ | avoid-inline-spacing | Ensure that text spacing set through style attributes can be adjusted with custom stylesheets | Serious | cat.structure, wcag21aa, wcag1412, ACT | failure | 24afc2, 9e45ec, 78fd32 | | ❌ | target-size | Ensure touch target have sufficient size and space | Serious | wcag22aa, sc258, cat.sensory-and-visual-cues | failure | |
Best Practices Rules
Rules that do not necessarily conform to WCAG success criterion but are industry accepted practices that improve the user experience.
| Implemented | Rule ID | Description | Impact | Tags | Issue Type | ACT Rules | | :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------- | :----------------- | :---------------------------------------------- | :------------------------- | :------------------------------------------------- | | ❌ | accesskeys | Ensures every accesskey attribute value is unique | Serious | cat.keyboard, best-practice | failure | | | ❌ | aria-allowed-role | Ensures role attribute has an appropriate value for the element | Minor | cat.aria, best-practice | failure, needs review | | | ❌ | aria-dialog-name | Ensures every ARIA dialog and alertdialog node has an accessible name | Serious | cat.aria, best-practice | failure, needs review | | | ❌ | aria-text | Ensures "role=text" is used on elements with no focusable descendants | Serious | cat.aria, best-practice | failure, needs review | | | ❌ | aria-treeitem-name | Ensures every ARIA treeitem node has an accessible name | Serious | cat.aria, best-practice | failure, needs review | | | ❌ | empty-heading | Ensures headings have discernible text | Minor | cat.name-role-value, best-practice | failure, needs review | ffd0e9 | | ❌ | empty-table-header | Ensures table headers have discernible text | Minor | cat.name-role-value, best-practice | failure, needs review | | | ❌ | frame-tested | Ensures <iframe> and <frame> elements contain the axe-core script | Critical | cat.structure, review-item, best-practice | failure, needs review | | | ❌ | heading-order | Ensures the order of headings is semantically correct | Moderate | cat.semantics, best-practice | failure, needs review | | | ❌ | image-redundant-alt | Ensure image alternative is not repeated as text | Minor | cat.text-alternatives, best-practice | failure | | | ❌ | label-title-only | Ensures that every form element has a visible label and is not solely labeled using hidden labels, or the title or aria-describedby attributes | Serious | cat.forms, best-practice | failure | | | ❌ | landmark-banner-is-top-level | Ensures the banner landmark is at top level | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-complementary-is-top-level | Ensures the complementary landmark or aside is at top level | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-contentinfo-is-top-level | Ensures the contentinfo landmark is at top level | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-main-is-top-level | Ensures the main landmark is at top level | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-no-duplicate-banner | Ensures the document has at most one banner landmark | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-no-duplicate-contentinfo | Ensures the document has at most one contentinfo landmark | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-no-duplicate-main | Ensures the document has at most one main landmark | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-one-main | Ensures the document has a main landmark | Moderate | cat.semantics, best-practice | failure | | | ❌ | landmark-unique | Landmarks should have a unique role or role/label/title (i.e. accessible name) combination | Moderate | cat.semantics, best-practice | failure | | | ❌ | meta-viewport-large | Ensures <meta name="viewport"> can scale a significant amount | Minor | cat.sensory-and-visual-cues, best-practice | failure | | | ✅ | meta-viewport | Ensures <meta name="viewport"> does not disable text scaling and zooming | Critical | cat.sensory-and-visual-cues, best-practice, ACT | failure | b4f0c3 | | ❌ | page-has-heading-one | Ensure that the page, or at least one of its frames contains a level-one heading | Moderate | cat.semantics, best-practice | failure | | | ❌ | presentation-role-conflict | Flags elements whose role is none or presentation and which cause the role conflict resolution to trigger. | Minor | cat.aria, best-practice, ACT | failure | 46ca7f | | ❌ | region | Ensures all page content is contained by landmarks | Moderate | cat.keyboard, best-practice | failure | | | ✅ | scope-attr-valid | Ensures the scope attribute is used correctly on tables | Moderate, Critical | cat.tables, best-practice | failure | | | ❌ | skip-link | Ensure all skip links have a focusable target | Moderate | cat.keyboard, best-practice | failure, needs review | | | ❌ | tabindex | Ensures tabindex attribute values are not greater than 0 | Serious | cat.keyboard, best-practice | failure | | | ❌ | table-duplicate-name | Ensure the <caption> element does not contain the same text as the summary attribute | Minor | cat.tables, best-practice | failure, needs review | |
WCAG 2.0 and 2.1 level AAA rules
Rules that check for conformance to WCAG AAA success criteria that can be fully automated. These are disabled by default in axe-core.
| Implemented | Rule ID | Description | Impact | Tags | Issue Type | ACT Rules | | :---------- | :--------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------- | :------ | :--------------------------------------------- | :------------------------- | :------------------------------------------------- | | ❌ | color-contrast-enhanced | Ensures the contrast between foreground and background colors meets WCAG 2 AAA contrast ratio thresholds | Serious | cat.color, wcag2aaa, wcag146, ACT | failure, needs review | 09o5cg | | ❌ | identical-links-same-purpose | Ensure that links with the same accessible name serve a similar purpose | Minor | cat.semantics, wcag2aaa, wcag249 | needs review | b20e66 | | ❌ | meta-refresh-no-exceptions | Ensures <meta http-equiv="refresh"> is not used for delayed refresh | Minor | cat.time-and-media, wcag2aaa, wcag224, wcag325 | failure | bisz58 |
Experimental Rules
Rules we are still testing and developing. They are disabled by default in axe-core, but are enabled for the axe browser extensions.
| Implemented | Rule ID | Description | Impact | Tags | Issue Type | ACT Rules | | :---------- | :------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- | :------- | :--------------------------------------------------------------------- | :------------------------- | :------------------------------------------------- | | ❌ | css-orientation-lock | Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations | Serious | cat.structure, wcag134, wcag21aa, experimental | failure, needs review | b33eff | | ❌ | focus-order-semantics | Ensures elements in the focus order have a role appropriate for interactive content | Minor | cat.keyboard, best-practice, experimental | failure | | | ❌ | hidden-content | Informs users about hidden content. | Minor | cat.structure, experimental, review-item, best-practice | failure, needs review | | | ❌ | label-content-name-mismatch | Ensures that elements labelled through their content must have their visible text as part of their accessible name | Serious | cat.semantics, wcag21a, wcag253, experimental | failure | 2ee8b8 | | ❌ | link-in-text-block | Ensure links are distinguished from surrounding text in a way that does not rely on color | Serious | cat.color, experimental, wcag2a, wcag141 | failure, needs review | | | ❌ | p-as-heading | Ensure bold, italic text and font-size is not used to style <p> elements as a heading | Serious | cat.semantics, wcag2a, wcag131, experimental | failure, needs review | | | ❌ | table-fake-caption | Ensure that tables with a caption use the <caption> element. | Serious | cat.tables, experimental, wcag2a, wcag131, section508, section508.22.g | failure | | | ❌ | td-has-header | Ensure that each non-empty data cell in a <table> larger than 3 by 3 has one or more table headers | Critical | cat.tables, experimental, wcag2a, wcag131, section508, section508.22.g | failure | |