# Accessible Design Patterns Library Reference implementations and best practices for common UI patterns with accessibility built-in. ## Navigation Patterns ### Skip Links **Purpose:** Allow keyboard users to bypass repetitive navigation and jump to main content. **HTML:** ```html
``` **CSS:** ```css .skip-link { position: absolute; top: -40px; left: 0; background: #000; color: #fff; padding: 8px; z-index: 100; } .skip-link:focus { top: 0; } ``` **Accessibility:** - Must be first focusable element - Visible on keyboard focus - Jumps to main content area with `id="main-content"` ### Responsive Navigation Menu **HTML:** ```html ``` **JavaScript:** ```javascript const menuToggle = document.querySelector('.menu-toggle'); const menu = document.querySelector('#main-menu'); menuToggle.addEventListener('click', () => { const isExpanded = menuToggle.getAttribute('aria-expanded') === 'true'; menuToggle.setAttribute('aria-expanded', !isExpanded); menu.hidden = isExpanded; }); // Close on Escape key document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && !menu.hidden) { menuToggle.setAttribute('aria-expanded', 'false'); menu.hidden = true; menuToggle.focus(); } }); ``` **Accessibility:** - `aria-label` on nav for multiple navigation regions - `aria-expanded` indicates menu state - `aria-current="page"` for current page - Escape key closes menu - Focus returns to toggle button when closed ### Breadcrumbs **HTML:** ```html ``` **CSS:** ```css .breadcrumb { display: flex; gap: 0.5rem; list-style: none; } .breadcrumb li:not(:last-child)::after { content: '/'; margin-left: 0.5rem; color: #666; } .breadcrumb [aria-current="page"] { font-weight: bold; color: #333; } ``` **Accessibility:** - Use `