Accessibility Resources
Official Documentation
WCAG 2.1
WAI-ARIA
html
<!-- ARIA Pattern Examples -->
<div role="alert" aria-live="assertive">Important Message</div>
<button aria-expanded="false" aria-controls="menu">Open Menu</button>
Training and Tutorials
- Online Courses
- Udacity Web Accessibility
- Google Web Accessibility
- EdX Introduction to Web Accessibility
- Practical Tutorials
- MDN Web Docs Accessibility
- Web.dev Accessibility
- A11Y Project
Tools and Libraries
Accessible React Libraries
javascript
// Example with @reach/dialog
import { Dialog } from '@reach/dialog'
function AccessibleDialog() {
return (
<Dialog aria-label="Confirmation">
<h2>Confirmation Required</h2>
<p>Are you sure you want to continue?</p>
<button>Confirm</button>
</Dialog>
)
}
Testing Tools
- WAVE
- axe DevTools
- Lighthouse
- Pa11y
- NVDA
- VoiceOver
Community and Support
Forums and Groups
- WebAIM Forum
- A11Y Slack
- Accessibility Developers Guide
Conferences
- CSUN Assistive Technology Conference
- AccessU
- A11yTO
Recommended Reading
- Books
- "Inclusive Design Patterns" by Heydon Pickering
- "A Web for Everyone" by Sarah Horton
- "Accessibility for Everyone" by Laura Kalbag
- Blogs
- The Paciello Group Blog
- WebAIM Blog
- A11y With Lindsey
Development Tools
bash
# Essential tools installation
npm install -D eslint-plugin-jsx-a11y
npm install -D axe-core
npm install -D jest-axe
Patterns and Templates
html
<!-- Accessible Modal Dialog Template -->
<div role="dialog" aria-labelledby="dialog-title" aria-describedby="dialog-desc">
<h2 id="dialog-title">Dialog Title</h2>
<p id="dialog-desc">Dialog Description</p>
<button>Close</button>
</div>
Audit and Consulting Services
- Deque Systems
- Level Access
- The Paciello Group
- WebAIM
Updates and Monitoring
- Follow @A11Y on Twitter
- Subscribe to accessibility newsletters
- Participate in webinars