Why Accessibility Is a Developer Responsibility
Accessibility (a11y) is often treated as an afterthought or a checkbox for compliance. In reality, accessible interfaces are simply better interfaces — they load faster, work across more devices, are easier to maintain, and are usable by the widest possible audience. Frontend developers are the ones who write the HTML, CSS, and JavaScript that either makes or breaks the experience for users with disabilities.
Start with Semantic HTML
The single most impactful thing you can do for accessibility is use HTML elements for their intended purpose. Screen readers and assistive technologies rely on the semantic meaning of elements to understand page structure.
- Use
<button>for interactive controls, not<div onClick> - Use
<nav>,<main>,<header>,<footer>, and<aside>as landmark regions - Use heading tags (
h1–h6) in a logical, hierarchical order - Use
<label>elements properly associated with every form input - Use
<table>with<th>andscopeattributes for tabular data
Correct semantics give you keyboard navigation, screen reader announcements, and focus management almost for free.
Colour Contrast
WCAG 2.1 requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text. Low contrast is one of the most common accessibility failures and affects users with low vision, colour blindness, and even those reading in bright sunlight.
Tools to check contrast:
- WebAIM Contrast Checker — paste in your hex values for an instant result
- Colour & Contrast section in Chrome DevTools — hover any element to see its contrast ratio
- axe DevTools browser extension — automated auditing across entire pages
Keyboard Navigation
Every interactive element on your page must be reachable and operable with a keyboard alone. Tab through your own UI regularly. Ask yourself:
- Can I reach every button, link, and form control with Tab?
- Is the focus indicator visible? (Don't remove
outlinewithout replacing it with a clear custom style.) - Do modal dialogs trap focus inside and return focus to the trigger on close?
- Do dropdown menus and custom components support arrow key navigation where expected?
ARIA — Use It Carefully
ARIA (Accessible Rich Internet Applications) attributes let you add semantic meaning to elements that HTML alone can't convey. But the first rule of ARIA is: don't use ARIA if you can use native HTML instead.
Common, well-supported ARIA patterns:
aria-label— provide a text alternative when there's no visible labelaria-expanded— communicate open/closed state of accordions and dropdownsaria-live— announce dynamic content updates (e.g., form validation messages) to screen readersrole="dialog"witharia-modal="true"— mark modal overlays correctly
Images and Alternative Text
Every <img> must have an alt attribute. The value depends on the image's purpose:
- Informative images: describe what the image conveys, not what it looks like
- Decorative images: use
alt=""so screen readers skip it entirely - Functional images (icons used as buttons): describe the action, not the icon
Test With Real Tools
Automated tools catch roughly 30–40% of accessibility issues. For the rest, you need manual testing:
- Use a screen reader — NVDA (Windows, free) or VoiceOver (macOS/iOS, built-in)
- Run Lighthouse in Chrome DevTools for a quick accessibility score
- Use the axe DevTools extension for more detailed issue reports
Accessibility is a practice, not a project. Build the habit of checking as you code, and it becomes second nature.