Provides WCAG accessibility patterns for React components: semantic HTML, screen reader support, keyboard navigation, and focus management. Apply when building UI components, forms, or interactive elements.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sergiodxa-agent-skills-1:frontend-accessibility-best-practicesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Accessibility patterns for building inclusive React applications following WCAG standards. Contains 7 rules across 4 categories focused on semantic HTML, screen reader support, keyboard navigation, and user preferences.
Accessibility patterns for building inclusive React applications following WCAG standards. Contains 7 rules across 4 categories focused on semantic HTML, screen reader support, keyboard navigation, and user preferences.
Reference these guidelines when:
Use semantic HTML elements for page structure.
// Bad: divs with class names
<div className="header">...</div>
<div className="nav">...</div>
<div className="content">...</div>
// Good: semantic elements
<header>...</header>
<nav aria-label={t("Primary")}>...</nav>
<main>...</main>
<footer>...</footer>
Use sr-only class for visually hidden text.
// Icon-only buttons need accessible labels
<Button variant="icon" onPress={onClose}>
<XMarkIcon aria-hidden="true" />
<span className="sr-only">{t("Close")}</span>
</Button>
// Visually hidden section headings
<section>
<h2 className="sr-only">{t("Search results")}</h2>
<SearchResultsList />
</section>
Announce dynamic content changes to screen readers.
// Error messages - announced immediately
{
error && (
<p role="alert" className="text-failure-600">
{error}
</p>
);
}
// Status updates - announced politely
<div role="status" aria-live="polite">
{t("{{count}} results found", { count })}
</div>;
Use semantic elements for built-in keyboard support.
// Bad: div with onClick not keyboard accessible
<div onClick={handleClick}>Click me</div>
// Good: button has Enter/Space support
<button onClick={handleClick}>Click me</button>
// Good: react-aria Button handles everything
import { Button } from "react-aria-components";
<Button onPress={handlePress}>Click me</Button>
Show visible focus indicators and trap focus in modals.
// Always use focus-visible for focus styles
<button className="focus-visible:ring-2 focus-visible:ring-teal-600">
Click me
</button>;
// react-aria Modal handles focus trapping automatically
import { Modal, Dialog } from "react-aria-components";
<Modal isOpen={isOpen}>
<Dialog>{/* Focus automatically trapped here */}</Dialog>
</Modal>;
Respect prefers-reduced-motion setting.
import { usePrefersReducedMotion } from "~/hooks/use-prefers-reduced-motion";
// CSS approach
<div className="animate-bounce motion-reduce:animate-none">
Bouncing content
</div>;
// JS approach
function AnimatedCounter({ value }) {
let prefersReducedMotion = usePrefersReducedMotion();
if (prefersReducedMotion) return <span>{value}</span>;
return <CountUp target={value} />;
}
Ensure 44x44px minimum touch targets.
// Icon buttons need explicit sizing
<Button variant="icon" className="h-11 w-11">
<XMarkIcon className="h-5 w-5" />
<span className="sr-only">{t("Close")}</span>
</Button>
// Links need padding for tappable area
<Link to={href} className="block py-3 px-4">
{label}
</Link>
app/components/heading.tsx - Region, Heading, Main componentsapp/hooks/use-prefers-reduced-motion.ts - Reduced motion hookapp/components/field/field.tsx - Accessible form field componentnpx claudepluginhub sergiodxa/agent-skillsAccessibility patterns for React and Next.js — semantic HTML, ARIA attributes, form labeling, keyboard navigation, focus management, and screen reader support. Activate for any interactive UI component or form.
Audits and implements WCAG 2.1 AA accessibility for React/Next.js apps, covering keyboard navigation, color contrast, screen reader testing, and ARIA.
Provides WCAG 2.2 AA accessibility patterns for keyboard focus management, React Aria components, screen reader support, ARIA usage, focus traps, reduced motion, and cognitive inclusion. Use for compliant web apps.