Frontend

Building Accessible Web Applications (a11y)

By Mohd Baquir Qureshi
Tech setup accessibility

Web accessibility (often abbreviated as a11y) ensures that everyone, including people with visual, auditory, motor, or cognitive disabilities, can use your application. It is not an "extra feature" to add at the end of a sprint; it is a fundamental requirement of professional software engineering.

The Foundation: Semantic HTML

The vast majority of accessibility issues stem from developers using <div> and <span> tags for everything. Screen readers (software used by visually impaired users) rely on semantic HTML tags to understand the page structure and navigate effectively.

<!-- BAD: Screen readers don't know what this is -->
<div class="nav-bar">
  <div class="nav-item" onclick="navigate()">Home</div>
</div>

<!-- GOOD: Built-in semantic meaning and keyboard navigation -->
<nav aria-label="Main Navigation">
  <a href="/">Home</a>
</nav>

Always use the correct tag for the job: <button> for actions, <a> for navigation, <header>, <main>, <article>, and <footer> for layout.

Forms and Labels

Forms are often completely broken for visually impaired users. Every <input> must have an associated <label>.

<!-- BAD: Placeholder is not a substitute for a label -->
<input type="email" placeholder="Email Address" />

<!-- GOOD: Explicitly linked via the 'for' and 'id' attributes -->
<label for="user-email">Email Address</label>
<input type="email" id="user-email" />

Understanding ARIA

ARIA (Accessible Rich Internet Applications) attributes help describe complex custom UI components to screen readers. However, the first rule of ARIA is: No ARIA is better than bad ARIA. Use semantic HTML whenever possible.

You use ARIA when you are building custom widgets, like an accordion or a modal.

<!-- Describing state to a screen reader -->
<button aria-expanded="false" aria-controls="dropdown-menu">
  Options
</button>
<ul id="dropdown-menu" aria-hidden="true">
  <li>Profile</li>
</ul>

When the user clicks the button, your JavaScript should toggle aria-expanded to "true" and aria-hidden to "false", so the screen reader announces the change to the user.

Keyboard Navigation

Many users with motor disabilities rely entirely on a keyboard to navigate. Put your mouse away and try to use your app using only the Tab, Enter, Space, and Arrow keys.

  1. Focus Indicators: Never remove the CSS outline property without providing a clear, high-contrast alternative. Users need to know which element is currently focused.
  2. Logical Tab Order: The DOM order should match the visual reading order. Avoid using tabindex greater than 0, as it creates unpredictable jumping.

Conclusion

Building accessible applications requires empathy and adherence to web standards. By utilizing semantic HTML, maintaining clear keyboard navigation, and strategically using ARIA attributes, you can create software that truly works for everyone.