원클릭으로
accessibility-ui-design
When designing and implementing web interfaces to ensure they are usable by everyone.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
When designing and implementing web interfaces to ensure they are usable by everyone.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
When improving read performance and reducing database load.
When designing loosely coupled systems that react to state changes asynchronously.
When setting up telemetry, debugging distributed systems, or standardizing application output.
When creating or extending an HTTP API for client consumption.
When addressing slow application endpoints, high database CPU usage, or standardizing data access patterns.
When designing how a system recovers from and reports failures.
| name | accessibility-ui-design |
| description | When designing and implementing web interfaces to ensure they are usable by everyone. |
| version | 2.0.0 |
| category | ui-ux |
| tags | ["ui-ux","a11y","inclusive-design","wcag"] |
| skill_type | architecture |
| author | skiLLM |
| license | MIT |
| compatible_agents | ["claude-code","cursor","copilot","codex"] |
| estimated_context_tokens | 1900 |
| dangerous | false |
| requires_review | true |
| security_level | safe |
| dependencies | ["dom-security-hardening"] |
| triggers | ["a11y","accessibility","wcag","screen reader","keyboard navigation"] |
| permissions | {"filesystem":{"read":true,"write":true},"network":{"outbound":false},"shell":{"execute":false}} |
| input_requirements | ["HTML markup","interactive components"] |
| output_contract | ["semantic html","keyboard navigable","screen reader compatible","wcag aa compliant"] |
| failure_conditions | ["missing alt attributes","focus trap broken","color-only distinction","non-semantic components"] |
| last_updated | "2026-05-15T00:00:00.000Z" |
Accessible interfaces are NOT optional extras—they're legal requirements (ADA, WCAG). This skill ensures web interfaces work for everyone: keyboard users, screen reader users, color-blind users, and users with cognitive disabilities. Accessible design is better design for all users.
<button>, <nav>, <dialog>, <form>) instead of building from <div>aria-* attributes ONLY when native HTML is insufficientalt attributes to images; provide captions for videos<label> elements with form inputsalt="" for decorative images)<label> elements<div onClick={...}> instead of <button><label> elementsoutline: none; without providing custom focus statesplaceholder attribute instead of <label> elementrole="button" on divs instead of <button>outline: none)alt="" if decorative)<label> elementsrole="button" on divs, use placeholder for labels, trap keyboard❌ Anti-pattern (Non-semantic, no labels, color-only error, no focus):
// BAD: DIV button, no accessibility
<div onClick={() => submit()} style={{ outline: 'none', cursor: 'pointer' }}>
Submit
</div>
// BAD: Input without label
<input type="email" placeholder="Email address" />
// BAD: Error shown only in red
<div style={{ color: 'red' }}>Password too short</div>
// BAD: Modal with focus trap
<div role="dialog">
<input />
{/* User can Tab outside modal */}
</div>
✅ Correct pattern (Semantic, labeled, accessible errors, focus managed):
// GOOD: Semantic button
<button onClick={() => submit()} type="button">
Submit
</button>
// GOOD: Label explicitly associated
<label htmlFor="email-input">Email address</label>
<input id="email-input" type="email" required />
// GOOD: Error shown with icon and text (not just color)
<div className="error" role="alert" aria-live="polite">
<Icon name="error" />
Password too short (minimum 8 characters)
</div>
// GOOD: Modal with focus trap and keyboard handling
const Modal = ({ isOpen, onClose, children }) => {
const modalRef = useRef(null);
useEffect(() => {
if (!isOpen) return;
const handleKeyDown = (e) => {
if (e.key === 'Escape') onClose();
};
// Focus first interactive element in modal
const firstFocusable = modalRef.current?.querySelector('button, [href], input');
firstFocusable?.focus();
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, [isOpen]);
return (
<dialog
ref={modalRef}
open={isOpen}
role="dialog"
aria-modal="true"
aria-labelledby="modal-title"
>
<h1 id="modal-title">Modal Title</h1>
{children}
<button onClick={onClose}>Close</button>
</dialog>
);
};