Accessibility Checklist
- Follow semantics properly, use landmarks (landmark and semantic example).
- Ensure correct heading levels.
- Use different screen readers and test regularly.
- Make sure, everything is responsive - use mostly the
rem
unit. - Make everything accessible for keyboard navigation only and handle focus management properly.
- Group form elements inside
<fieldset />
and<legend />
. The FieldBlock is doing this by default. - Do never expose a form element as
disabled
to the user. Use good UX instead. - Have a Skip Link in place if the user has to tab many times to reach the main content.
- Use the SkipContent helper to let the user skip large parts of content, while using keyboard navigation.
- Use the AriaLive component to automatically inform users using a screen reader, about changes on the screen that they didn't initiate.
- Make good use of
aria-label
andaria-hidden
, e.g. of decorative content. - Make images and illustrations accessible.
- Have
aria-live
in place for dynamic content, like updates coming from the server. - Hide invisible content with
display: none;
or with thehidden
attribute, or remove the markup entirely (with React States). - Properly use the
for="#id"
attribute on labels. Every form component is supporting internal label usage, like<Input label="Input label:" />
. - Allow viewport zooming in web pages. Example below.
Viewport
Allow zooming in web pages, especially important on touch devices.
<metaname="viewport"content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=yes"/>
Landmark- and semantics example
Example usage of HTML5 landmarks
(e.g. <nav>
or <section>
etc.):
<body><header>Header</header><nav>Main navigation landmark</nav><main><section aria-label="I need a label to be a region landmark"><h1 class="dnb-h--large">h1 styled as h2</h1><p class="dnb-o">text</p></section><article aria-labelledby="article-1"><h2 id="article-1" class="dnb-h--xx-large">h2 styled as h1</h2><h3 class="dnb-h--medium">h3</h2><h4 class="dnb-h--basis">h4</h2>...</article><article aria-labelledby="article-2"><header>I'm not a landmark anymore, because I'm inside article</header><h2 id="article-2" class="dnb-h--large">Another article h2</h2>...<footer>I'm not a landmark anymore, because I'm inside article</footer></article></main><aside>Aside the main landmark</aside><footer>Footer landmark</footer></body>
Read more about HTML landmarks and sectioning elements.
Practical Support of ARIA labels
You may be interested to read more about aria labels in the Screen readers section.