HTML & CSS Accessibility Best Practices
Complete HTML and CSS accessibility guide for WCAG 2.1 AA compliance. Semantic HTML5, ARIA patterns, focus management, and accessible CSS techniques.
Introduction
Native HTML and CSS provide the strongest accessibility foundation available on the web. Semantic HTML5 elements communicate meaning to assistive technologies without requiring ARIA. When accessibility is built into HTML and CSS from the start, compliance is achievable with minimal additional effort.
Hand-coded HTML/CSS sites are held to the same WCAG 2.1 AA standard as any other website. The ADA covers all public-facing websites regardless of how they're built. Custom HTML gives you the most control to achieve and maintain full accessibility compliance.
Common Accessibility Issues
Using div and span for all layout instead of article, section, nav, main, header, footer semantic elements.
CSS resets that remove :focus outline without providing a replacement focus indicator.
Custom dropdown menus, accordions, and tabs built with div/span without ARIA roles and keyboard support.
Error states, required fields, or data categories communicated by color only without text or icon.
How to Fix Common Issues
Semantic HTML Structure
<div id="header"><div id="nav">...</div></div>
<div id="main">...</div>
<div id="footer">...</div><header>
<nav aria-label="Main navigation">...</nav>
</header>
<main id="main-content">...</main>
<footer>...</footer>Replace generic divs with semantic HTML5 elements. <main> is the primary content landmark. <nav> needs aria-label if multiple navs exist. Screen readers expose these as navigation landmarks.
Accessible Focus Styles
* { outline: none; } /* CSS reset */:focus-visible {
outline: 2px solid #2563eb;
outline-offset: 2px;
border-radius: 2px;
}Never remove :focus outlines without providing a replacement. Use :focus-visible to show focus only for keyboard navigation (not mouse clicks). 2px minimum outline width, 3:1 contrast with adjacent colors.
HTML & CSS-Specific Notes
Native HTML has the best accessibility support of any approach. Use the ARIA Authoring Practices Guide (APG) at w3.org/WAI/ARIA/apg for widget patterns. Semantic HTML first, ARIA second. Don't use ARIA to fix bad HTML. Test with keyboard-only navigation and at least one screen reader (NVDA free, VoiceOver built-in).
Accessibility Statistics
400+
Lawsuits per year
55%
Sites non-compliant
30-60 hours
Avg fix time
Frequently Asked Questions
When should I use ARIA vs semantic HTML?
What's the most important accessibility fix for HTML sites?
Do I need to test with a real screen reader?
Check your website for free
Get your ADA, WCAG, privacy & security score in 90 seconds.
Related guides
React Accessibility: Building WCAG 2.1 AA Compliant Components
Build accessible React components following WCAG 2.1 AA standards. Include proper ARIA, keyboard navigation, and focus management in React apps.
Vue.js Accessibility & WCAG 2.1 Compliance Guide
Build accessible Vue.js apps meeting WCAG 2.1 AA and ADA standards. Vue accessibility patterns, ARIA, focus management, and keyboard navigation.