Accessibility Checker
Automatically check code and elements for accessibility issues.
Accessibility Philosophy
Accessibility is not a checklist—it's a mindset of inclusive design.
Core Beliefs
- •Universal Design: Build for everyone from the start, not as an afterthought
- •Progressive Enhancement: Core functionality works for all, enhancements are optional
- •Semantic First: Meaningful HTML structure over ARIA workarounds
- •Real Users: Test with actual assistive technology users when possible
Scope Balance
- •Quick checks (this skill): Fast feedback on specific components (60-70% of issues)
- •Comprehensive audits (
/audit-a11ycommand): Full site analysis with parallel specialists (85-90% coverage) - •Manual testing: Keyboard, screen readers, user testing (catches remaining 10-15%, irreplaceable)
This skill provides rapid feedback during development. For production readiness, use comprehensive audits + manual testing.
When to Use This Skill
Activate this skill when the user:
- •Asks "is this accessible?"
- •Shows an element and asks "does this meet WCAG?"
- •Mentions "accessibility issue", "a11y", or "screen reader"
- •Asks "will this work for keyboard users?"
- •Questions contrast, ARIA, alt text, or form labels
- •Says "check this for accessibility"
Decision Framework
Before checking accessibility, assess:
What Element Type Is This?
- •Interactive (buttons, links, forms) → Check keyboard access, focus indicators, ARIA
- •Content (text, headings, images) → Check contrast, hierarchy, alt text
- •Structure (navigation, landmarks) → Check semantic HTML, skip links
- •Dynamic (modals, dropdowns, tabs) → Check keyboard traps, ARIA states
- •Media (images, video, audio) → Check captions, transcripts, alt text
What WCAG Level Is Required?
WCAG 2.1 Level AA (industry standard):
- •✅ Color contrast: 4.5:1 (normal text), 3:1 (large text)
- •✅ Keyboard navigation: All functionality accessible
- •✅ Focus indicators: Visible on all interactive elements
- •✅ Form labels: All inputs have associated labels
- •✅ Alt text: Meaningful for content images, empty for decorative
WCAG AAA (enhanced):
- •Higher contrast ratios (7:1 for normal text)
- •More stringent requirements
What's the Scope?
- •Single element - User shows specific component → Check that element
- •Page section - User mentions component → Check related elements
- •Entire page - User says "check this page" → Full page audit
- •Interactive flow - User shows user journey → Test keyboard flow
What Are Common Issues?
Quick wins (easy to fix):
- •Missing alt text on images
- •Low contrast text
- •Missing form labels
- •Missing focus indicators
Complex issues (need design changes):
- •Keyboard traps
- •Complex ARIA patterns
- •Dynamic content announcements
- •Touch target sizes
What Testing Method?
- •Code review → Check semantic HTML, ARIA attributes
- •Manual keyboard test → Tab through page, test interactions
- •Contrast calculation → Calculate exact ratios
- •Screen reader test → Test with VoiceOver/NVDA (if comprehensive audit)
- •Automated tools → Run axe-core or pa11y (for full audits)
Decision Tree
User asks about accessibility
↓
Identify element type (interactive/content/structure)
↓
Determine WCAG level (AA standard)
↓
Check specific criteria (contrast/keyboard/ARIA)
↓
Test manually if needed
↓
Report issues with confidence scores
↓
Provide exact fixes (colors, ARIA, HTML)
Best Practices
DO:
- •✅ Use semantic HTML5 elements first (header, nav, main, article, button, etc.)
- •✅ Provide visible labels for all form controls (label element, not placeholder)
- •✅ Ensure 4.5:1 contrast for normal text, 3:1 for large text (WCAG AA)
- •✅ Make all interactive elements keyboard accessible (tab, enter, space, arrows)
- •✅ Provide text alternatives for non-text content (alt, aria-label, captions)
- •✅ Test with keyboard only (no mouse) before submitting
- •✅ Use ARIA to enhance, not replace, semantic HTML
- •✅ Ensure focus indicators are visible (2px minimum, high contrast)
- •✅ Structure content with proper heading hierarchy (h1 → h2 → h3)
DON'T:
- •❌ Use div/span with click handlers instead of button/link
- •❌ Rely on color alone to convey information
- •❌ Use placeholder as label replacement
- •❌ Trap keyboard focus in modals without escape mechanism
- •❌ Hide content with display:none when it should be screen-reader accessible
- •❌ Use positive tabindex (tabindex="1", "2", etc.) - breaks natural tab order
- •❌ Add ARIA when semantic HTML would suffice
- •❌ Remove focus outlines without providing alternative indicators
- •❌ Auto-play media without user control
- •❌ Use complex ARIA patterns when simple alternatives exist
Quick Checks
This skill performs focused accessibility checks on specific elements, unlike /audit-a11y which does comprehensive site-wide audits.
Common Checks
Button Accessibility:
- •Has accessible name (text, aria-label, or aria-labelledby)
- •Keyboard focusable
- •Proper ARIA role if custom button
- •Sufficient color contrast
Form Accessibility:
- •All inputs have associated labels
- •Error messages properly linked
- •Required fields indicated
- •Fieldsets for related inputs
Image Accessibility:
- •Alt text present and descriptive
- •Decorative images have alt=""
- •Complex images have detailed descriptions
Link Accessibility:
- •Descriptive link text (not "click here")
- •Links distinguishable from text
- •Keyboard accessible
Response Format
## Accessibility Check: [Element Type] ### ✅ Passes - Has proper ARIA label - Keyboard accessible - Sufficient color contrast (4.8:1) ### ❌ Issues Found 1. **Missing focus indicator** (WCAG 2.4.7 Level AA) - Current: No visible focus state - Fix: Add `:focus` styles with outline 2. **Low contrast** (WCAG 1.4.3 Level AA) - Current: 3.2:1 - Required: 4.5:1 - Fix: Use darker text color #333 ### Suggested Code [Provide fixed code example]
Common Issues by Component Type
Forms
- •Missing <label> elements (use for attribute)
- •Placeholder as label (violates 3.3.2 Labels or Instructions)
- •No error messages associated (use aria-describedby)
- •Required fields not marked (use required + aria-required)
Modals/Dialogs
- •No focus trap (keyboard escapes modal)
- •No ESC key handler (violates 2.1.2 No Keyboard Trap)
- •Missing role="dialog" or role="alertdialog"
- •No aria-labelledby pointing to title
- •Focus not moved to modal on open
Buttons/Links
- •Div/span with onClick (use <button> or <a>)
- •No visible label (use text content or aria-label)
- •Button used for navigation (use <a>)
- •Link used for action (use <button>)
Images
- •Missing alt attribute (violates 1.1.1 Non-text Content)
- •Decorative images with alt text (should be alt="")
- •Complex images without long description (use aria-describedby)
- •Icon buttons without text alternative (use aria-label)
Integration with /audit-a11y Command
- •
This Skill: Quick element-specific checks
- •"Is this button accessible?"
- •"Check this form for a11y"
- •Single component analysis
- •
/audit-a11yCommand: Comprehensive site audit- •Full WCAG 2.1 Level AA audit
- •Multiple pages analyzed
- •Detailed compliance reports
Resources
- •WCAG 2.1 Guidelines: https://www.w3.org/WAI/WCAG21/quickref/
- •WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- •WebAIM Keyboard Testing: https://webaim.org/articles/keyboard/