Rules

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

Rule ID WCAG Level Description
accesslint-001 2.4.2 A Documents must have a element to provide users with an overview of content.</td> </tr> <tr> <td><code>accesslint-002</code></td> <td>Best practice</td> <td>A</td> <td>Page must have a mechanism to bypass repeated blocks of content.</td> </tr> <tr> <td><code>accesslint-003</code></td> <td>Best practice</td> <td>A</td> <td>Page should contain a level-one heading.</td> </tr> <tr> <td><code>accesslint-004</code></td> <td>4.1.2</td> <td>A</td> <td>Frames must have an accessible name.</td> </tr> <tr> <td><code>accesslint-005</code></td> <td>4.1.2</td> <td>A</td> <td>Frame titles should be unique.</td> </tr> <tr> <td><code>accesslint-006</code></td> <td>1.4.4</td> <td>AA</td> <td>Viewport meta tag must not disable user scaling.</td> </tr> <tr> <td><code>accesslint-007</code></td> <td>2.2.1</td> <td>A</td> <td>Meta refresh must not redirect or refresh automatically.</td> </tr> <tr> <td><code>accesslint-008</code></td> <td>2.2.1</td> <td>A</td> <td>Meta refresh must not be used with a delay (no exceptions).</td> </tr> <tr> <td><code>accesslint-009</code></td> <td>2.2.2</td> <td>A</td> <td>The <blink> element must not be used.</td> </tr> <tr> <td><code>accesslint-010</code></td> <td>2.2.2</td> <td>A</td> <td>The <marquee> element must not be used.</td> </tr> <tr> <td><code>accesslint-011</code></td> <td>1.1.1</td> <td>A</td> <td>Images 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'.</td> </tr> <tr> <td><code>accesslint-012</code></td> <td>1.1.1</td> <td>A</td> <td>SVG elements with an img, graphics-document, or graphics-symbol role must have an accessible name via a <title> element, aria-label, or aria-labelledby.</td> </tr> <tr> <td><code>accesslint-013</code></td> <td>1.1.1, 4.1.2</td> <td>A</td> <td>Image inputs (<input type="image">) must have alternate text via alt, aria-label, or aria-labelledby. The text should describe the button action, not the image.</td> </tr> <tr> <td><code>accesslint-014</code></td> <td>Best practice</td> <td>A</td> <td>Image alt text should not duplicate adjacent link or button text. When alt text repeats surrounding text, screen reader users hear the same information twice.</td> </tr> <tr> <td><code>accesslint-015</code></td> <td>Best practice</td> <td>A</td> <td>Image alt text should not contain words like 'image', 'photo', or 'picture' — screen readers already announce the element type.</td> </tr> <tr> <td><code>accesslint-016</code></td> <td>1.1.1, 4.1.2</td> <td>A</td> <td>Image map <area> elements must have alternative text.</td> </tr> <tr> <td><code>accesslint-017</code></td> <td>1.1.1</td> <td>A</td> <td><object> elements must have alternative text.</td> </tr> <tr> <td><code>accesslint-018</code></td> <td>1.1.1</td> <td>A</td> <td>Elements with role='img' must have an accessible name.</td> </tr> <tr> <td><code>accesslint-019</code></td> <td>2.1.1</td> <td>A</td> <td>Server-side image maps must not be used.</td> </tr> <tr> <td><code>accesslint-020</code></td> <td>4.1.2</td> <td>A</td> <td>Form elements must have labels. Use <label>, aria-label, or aria-labelledby.</td> </tr> <tr> <td><code>accesslint-021</code></td> <td>Best practice</td> <td>A</td> <td>Form fields should not have multiple label elements.</td> </tr> <tr> <td><code>accesslint-022</code></td> <td>4.1.2</td> <td>A</td> <td>Select elements must have a programmatically associated label via <label>, aria-label, or aria-labelledby.</td> </tr> <tr> <td><code>accesslint-023</code></td> <td>4.1.2</td> <td>A</td> <td>Input buttons must have discernible text via value, aria-label, or aria-labelledby.</td> </tr> <tr> <td><code>accesslint-024</code></td> <td>1.3.5</td> <td>AA</td> <td>Autocomplete attribute must use valid values from the HTML specification.</td> </tr> <tr> <td><code>accesslint-025</code></td> <td>Best practice</td> <td>A</td> <td>Interactive elements with visible text must have accessible names that contain that text.</td> </tr> <tr> <td><code>accesslint-026</code></td> <td>Best practice</td> <td>A</td> <td>Form elements should not use title attribute as the only accessible name.</td> </tr> <tr> <td><code>accesslint-027</code></td> <td>Best practice</td> <td>A</td> <td>Elements should not have tabindex greater than 0, which disrupts natural tab order.</td> </tr> <tr> <td><code>accesslint-028</code></td> <td>Best practice</td> <td>A</td> <td>Elements that receive keyboard focus must have an appropriate role so assistive technologies can convey their purpose. Non-interactive elements with tabindex='0' need a valid interactive ARIA role.</td> </tr> <tr> <td><code>accesslint-029</code></td> <td>4.1.2</td> <td>A</td> <td>Interactive controls must not be nested inside each other.</td> </tr> <tr> <td><code>accesslint-030</code></td> <td>2.1.1</td> <td>A</td> <td>Scrollable regions must be keyboard accessible.</td> </tr> <tr> <td><code>accesslint-031</code></td> <td>Best practice</td> <td>A</td> <td>Accesskey attribute values must be unique.</td> </tr> <tr> <td><code>accesslint-032</code></td> <td>2.4.7</td> <td>AA</td> <td>Elements in sequential focus order must have a visible focus indicator.</td> </tr> <tr> <td><code>accesslint-033</code></td> <td>Best practice</td> <td>A</td> <td>Heading levels should increase by one; skipping levels (e.g. h2 to h4) makes navigation harder.</td> </tr> <tr> <td><code>accesslint-034</code></td> <td>Best practice</td> <td>A</td> <td>Headings must have discernible text.</td> </tr> <tr> <td><code>accesslint-035</code></td> <td>Best practice</td> <td>A</td> <td>Paragraphs should not be styled to look like headings.</td> </tr> <tr> <td><code>accesslint-036</code></td> <td>Best practice</td> <td>A</td> <td>Page should have exactly one main landmark.</td> </tr> <tr> <td><code>accesslint-037</code></td> <td>Best practice</td> <td>A</td> <td>Page should not have more than one banner landmark.</td> </tr> <tr> <td><code>accesslint-038</code></td> <td>Best practice</td> <td>A</td> <td>Page should not have more than one contentinfo landmark.</td> </tr> <tr> <td><code>accesslint-039</code></td> <td>Best practice</td> <td>A</td> <td>Page should not have more than one main landmark.</td> </tr> <tr> <td><code>accesslint-040</code></td> <td>Best practice</td> <td>A</td> <td>Banner landmark should not be nested within another landmark.</td> </tr> <tr> <td><code>accesslint-041</code></td> <td>Best practice</td> <td>A</td> <td>Contentinfo landmark should not be nested within another landmark.</td> </tr> <tr> <td><code>accesslint-042</code></td> <td>Best practice</td> <td>A</td> <td>Main landmark should not be nested within another landmark.</td> </tr> <tr> <td><code>accesslint-043</code></td> <td>Best practice</td> <td>A</td> <td>Aside (complementary) landmark should be top-level or directly inside main.</td> </tr> <tr> <td><code>accesslint-044</code></td> <td>Best practice</td> <td>A</td> <td>Landmarks should have unique labels when there are multiple of the same type.</td> </tr> <tr> <td><code>accesslint-045</code></td> <td>Best practice</td> <td>A</td> <td>All page content should be contained within landmarks.</td> </tr> <tr> <td><code>accesslint-046</code></td> <td>1.3.1</td> <td>A</td> <td><ul> and <ol> must only contain <li>, <script>, or <template> as direct children.</td> </tr> <tr> <td><code>accesslint-047</code></td> <td>1.3.1</td> <td>A</td> <td><li> elements must be contained in a <ul>, <ol>, or <menu>.</td> </tr> <tr> <td><code>accesslint-048</code></td> <td>1.3.1</td> <td>A</td> <td><dt> and <dd> elements must be contained in a <dl>.</td> </tr> <tr> <td><code>accesslint-049</code></td> <td>1.3.1</td> <td>A</td> <td><dl> elements must only contain <dt>, <dd>, <div>, <script>, or <template>.</td> </tr> <tr> <td><code>accesslint-050</code></td> <td>1.4.12</td> <td>AA</td> <td>Letter spacing set with !important in style attributes must be at least 0.12em.</td> </tr> <tr> <td><code>accesslint-051</code></td> <td>1.4.12</td> <td>AA</td> <td>Line height set with !important in style attributes must be at least 1.5.</td> </tr> <tr> <td><code>accesslint-052</code></td> <td>1.4.12</td> <td>AA</td> <td>Word spacing set with !important in style attributes must be at least 0.16em.</td> </tr> <tr> <td><code>accesslint-053</code></td> <td>1.3.4</td> <td>AA</td> <td>Page orientation must not be restricted using CSS transforms.</td> </tr> <tr> <td><code>accesslint-054</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA role values must be valid.</td> </tr> <tr> <td><code>accesslint-055</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA attributes must be valid (correctly spelled).</td> </tr> <tr> <td><code>accesslint-056</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA attributes must have valid values.</td> </tr> <tr> <td><code>accesslint-057</code></td> <td>4.1.2</td> <td>A</td> <td>Elements with ARIA roles must have all required ARIA attributes.</td> </tr> <tr> <td><code>accesslint-058</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA attributes must be allowed for the element's role.</td> </tr> <tr> <td><code>accesslint-059</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA role must be appropriate for the element.</td> </tr> <tr> <td><code>accesslint-060</code></td> <td>1.3.1</td> <td>A</td> <td>Certain ARIA roles require specific child roles to be present.</td> </tr> <tr> <td><code>accesslint-061</code></td> <td>1.3.1</td> <td>A</td> <td>Certain ARIA roles must be contained within specific parent roles.</td> </tr> <tr> <td><code>accesslint-062</code></td> <td>4.1.2</td> <td>A</td> <td>aria-hidden='true' must not be present on the document body.</td> </tr> <tr> <td><code>accesslint-063</code></td> <td>4.1.2</td> <td>A</td> <td>Elements with aria-hidden='true' must not contain focusable elements.</td> </tr> <tr> <td><code>accesslint-064</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA commands must have an accessible name.</td> </tr> <tr> <td><code>accesslint-065</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA input fields must have an accessible name.</td> </tr> <tr> <td><code>accesslint-066</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA toggle fields must have an accessible name.</td> </tr> <tr> <td><code>accesslint-067</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA meter elements must have an accessible name.</td> </tr> <tr> <td><code>accesslint-068</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA progressbar elements must have an accessible name.</td> </tr> <tr> <td><code>accesslint-069</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA dialogs must have an accessible name.</td> </tr> <tr> <td><code>accesslint-070</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA tooltips must have an accessible name.</td> </tr> <tr> <td><code>accesslint-071</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA treeitem elements must have an accessible name.</td> </tr> <tr> <td><code>accesslint-072</code></td> <td>4.1.2</td> <td>A</td> <td>ARIA attributes must not be prohibited for the element's role.</td> </tr> <tr> <td><code>accesslint-073</code></td> <td>4.1.2</td> <td>A</td> <td>Elements with role='presentation' or role='none' must not be focusable or have global ARIA attributes.</td> </tr> <tr> <td><code>accesslint-074</code></td> <td>4.1.2</td> <td>A</td> <td>Elements with a role that makes children presentational must not contain focusable content.</td> </tr> <tr> <td><code>accesslint-075</code></td> <td>4.1.2</td> <td>A</td> <td>Buttons must have discernible text.</td> </tr> <tr> <td><code>accesslint-076</code></td> <td>4.1.2</td> <td>A</td> <td><summary> elements must have an accessible name.</td> </tr> <tr> <td><code>accesslint-077</code></td> <td>2.4.4, 4.1.2</td> <td>A</td> <td>Links must have discernible text via content, aria-label, or aria-labelledby.</td> </tr> <tr> <td><code>accesslint-078</code></td> <td>2.4.1</td> <td>A</td> <td>Skip links must point to a valid target on the page.</td> </tr> <tr> <td><code>accesslint-079</code></td> <td>1.4.1</td> <td>A</td> <td>Links within text blocks must be distinguishable by more than color alone.</td> </tr> <tr> <td><code>accesslint-080</code></td> <td>3.1.1</td> <td>A</td> <td>The <html> element must have a lang attribute.</td> </tr> <tr> <td><code>accesslint-081</code></td> <td>3.1.1</td> <td>A</td> <td>The lang attribute on <html> must have a valid value.</td> </tr> <tr> <td><code>accesslint-082</code></td> <td>3.1.2</td> <td>AA</td> <td>The lang attribute must have a valid value on all elements.</td> </tr> <tr> <td><code>accesslint-083</code></td> <td>3.1.1</td> <td>A</td> <td>The lang and xml:lang attributes on <html> must match.</td> </tr> <tr> <td><code>accesslint-084</code></td> <td>1.3.1</td> <td>A</td> <td>All cells in a table using headers attribute must reference valid header IDs.</td> </tr> <tr> <td><code>accesslint-085</code></td> <td>1.3.1</td> <td>A</td> <td>Table headers should be associated with data cells.</td> </tr> <tr> <td><code>accesslint-086</code></td> <td>1.3.1</td> <td>A</td> <td>Data cells in tables larger than 3x3 should have associated headers.</td> </tr> <tr> <td><code>accesslint-087</code></td> <td>1.3.1</td> <td>A</td> <td>The scope attribute on table headers must have a valid value.</td> </tr> <tr> <td><code>accesslint-088</code></td> <td>Best practice</td> <td>A</td> <td>Table header cells should have visible text.</td> </tr> <tr> <td><code>accesslint-089</code></td> <td>4.1.2</td> <td>A</td> <td>IDs used in ARIA and label associations must be unique to avoid broken references.</td> </tr> <tr> <td><code>accesslint-090</code></td> <td>1.2.2</td> <td>A</td> <td>Video elements must have captions via <track kind='captions'>.</td> </tr> <tr> <td><code>accesslint-091</code></td> <td>1.2.1</td> <td>A</td> <td>Audio elements should have a text alternative or transcript.</td> </tr> <tr> <td><code>accesslint-092</code></td> <td>1.4.3</td> <td>AA</td> <td>Text elements must have sufficient color contrast against the background.</td> </tr> <tr> <td><code>accesslint-093</code></td> <td>1.4.6</td> <td>AAA</td> <td>Text elements must have enhanced color contrast against the background (WCAG AAA).</td> </tr> </tbody></table> </section> </article> </main> <footer> <p>Original source: <a href="https://www.accesslint.com/core/docs/rules">https://www.accesslint.com/core/docs/rules</a></p> </footer> </body> </html>