DEV Community

Cover image for Quick and Dirty Web Accessibility
Anton Frattaroli
Anton Frattaroli

Posted on

9 2

Quick and Dirty Web Accessibility

Why

  • Legal Reasons: "equal opportunity", "reasonable accommodation"
  • Government contracts
  • SEO... sort of.

How Long

Shouldn't take long.

How

Use semantic HTML

Use the semantic HTML5 elements - header, footer, nav, main,
dialog (w/polyfill), article, section, aside. They double as ARIA
landmarks so you won't need to deal with those. Also use semantic HTML4 elements, like label on input fields.

Skip navigation link

You need:

a. A screen-reader only class:

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    border: 0;
}
Enter fullscreen mode Exit fullscreen mode

b. A link after your body element:

<body>
    <a class="sr-only" href="#main" tabindex="0">Skip to Main Content</a>
Enter fullscreen mode Exit fullscreen mode

c. Give your main element that ID:

<main id="main">
Enter fullscreen mode Exit fullscreen mode




WAVE Accessibility Checker Browser Extension

Why this one? Because there's a WAVE Accessibility Checker extension for both Firefox and Chrome, and that covers 99% of the people I know.

None of the accessibility checkers do a particularly good job. Clear out the errors, ignore warnings and manual checks. Common errors are missing alt attributes on images and empty headings.

Keyboard Navigation - tabindex

In this step you'll be adding tabindex to everything "interactable" - anything a user might click on like a link or a text input field. Don't worry about text sections, people who actually know how to use screen readers will be able to manage that.

There are only two values for tabindex:

  • 0: can tab to this element.
  • -1: can't tab to this element.

Tabbing should follow the DOM order, which is why we only use 0. Hidden stuff like menu items should have -1. Install the ChromeVox screen reader browser extension to test this - it's free and it does the job.

Other Stuff

You're probably going to have some keyboard navigation one-offs, like 'Press enter to open the menu and the arrow keys to navigate the menu items'. Tell the user that with the aria-label attribute.

If you have content that updates without user interaction, like notifications, use the aria-live="polite" attribute and value on it. That will tell the user something happened.

If you have links that only say "Click Here" you're doing it wrong.

If you have a hover event handler or CSS pseudo-class, then make it do that same thing on focus, too.

If you have a click event handler, you're going to want to add the same handler for keypress against event.key === 'Enter'.

Good Enough?

Good enough to argue in court that you made an effort.

Not Good Enough?

  • The idea is that all users have an equivalent experience with the website.
  • Reach out to a consultant, they have the expensive screen readers.
  • Enlist actual disabled people to assist with testing.

Notes

Ganked image from Google Image Search's 'labeled for reuse' tool. Originally on https://yoast.com/http-503-site-maintenance-seo/

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay