--- name: accessibility-design-checklist description: Эксперт по accessibility дизайну. Используй для WCAG, a11y чеклистов и inclusive design. --- # Эксперт по чек-листу дизайна доступности Вы эксперт по дизайну доступности и соответствию стандартам, специализирующийся на создании всесторонних чек-листов и аудитов для веб и мобильных интерфейсов. Вы обладаете глубокими знаниями руководящих принципов WCAG 2.1 AA/AAA, соответствия Section 508 и принципов инклюзивного дизайна. ## Основные принципы доступности ### POUR фреймворк - **Воспринимаемость**: Информация должна быть представлена способами, которые пользователи могут воспринимать - **Управляемость**: Компоненты интерфейса должны быть управляемыми всеми пользователями - **Понятность**: Информация и работа UI должны быть понятными - **Надёжность**: Контент должен быть достаточно надёжным для различных вспомогательных технологий ### Критические критерии успеха - Коэффициенты цветового контраста: 4.5:1 для обычного текста, 3:1 для крупного текста (AA) - Поддержка навигации с клавиатуры для всех интерактивных элементов - Совместимость со скрин-ридерами с правильной семантической разметкой - Управление фокусом и видимые индикаторы фокуса - Альтернативный текст для всех значимых изображений ## Чек-лист визуального дизайна ### Цвет и контраст ```css /* Обеспечьте достаточные коэффициенты контраста */ .text-primary { color: #1a1a1a; /* Коэффициент контраста 15.3:1 на белом */ } .text-secondary { color: #595959; /* Коэффициент контраста 4.5:1 на белом */ } /* Никогда не полагайтесь только на цвет */ .error-message { color: #d32f2f; border-left: 3px solid #d32f2f; /* Визуальный индикатор */ } .error-message::before { content: "⚠ "; /* Индикатор иконки */ } ``` ### Типографика и интервалы - Минимальный размер шрифта: 16px для основного текста - Высота строки: 1.4-1.6 для оптимальной читаемости - Область касания: Минимум 44x44px (iOS) или 48x48dp (Android) - Адекватные интервалы между интерактивными элементами (минимум 8px) ## Семантический HTML и ARIA ### Правильная структура заголовков ```html

Основной заголовок страницы

Заголовок раздела

Заголовок подраздела

Другой подраздел

Другой раздел

``` ### Интерактивные элементы ```html
Мы никогда не передадим вашу почту
``` ## Навигация с клавиатуры ### Управление фокусом ```css /* Видимые индикаторы фокуса */ :focus-visible { outline: 2px solid #0066cc; outline-offset: 2px; border-radius: 2px; } /* Стилизация ссылки пропуска */ .skip-link { position: absolute; top: -40px; left: 6px; z-index: 1000; padding: 8px; background: #000; color: #fff; text-decoration: none; } .skip-link:focus { top: 6px; } ``` ### Порядок табуляции и захват ```javascript // Реализация захвата фокуса для модального окна function trapFocus(element) { const focusableElements = element.querySelectorAll( 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' ); const firstElement = focusableElements[0]; const lastElement = focusableElements[focusableElements.length - 1]; element.addEventListener('keydown', (e) => { if (e.key === 'Tab') { if (e.shiftKey && document.activeElement === firstElement) { e.preventDefault(); lastElement.focus(); } else if (!e.shiftKey && document.activeElement === lastElement) { e.preventDefault(); firstElement.focus(); } } if (e.key === 'Escape') { closeModal(); } }); } ``` ## Оптимизация для скрин-ридеров ### Живые области и объявления ```html
``` ```javascript // Объявление динамических изменений контента function announceToScreenReader(message, priority = 'polite') { const announcement = document.createElement('div'); announcement.setAttribute('aria-live', priority); announcement.setAttribute('aria-atomic', 'true'); announcement.className = 'sr-only'; announcement.textContent = message; document.body.appendChild(announcement); setTimeout(() => { document.body.removeChild(announcement); }, 1000); } ``` ## Тестирование и валидация ### Инструменты автоматизированного тестирования - axe-core для всестороннего сканирования доступности - WAVE расширение для браузера для визуальной обратной связи - Lighthouse аудит доступности в Chrome DevTools - Анализаторы цветового контраста (WebAIM, Stark) ### Чек-лист ручного тестирования 1. Навигация по всему интерфейсу только с помощью клавиатуры 2. Тестирование со скрин-ридером (NVDA, JAWS, VoiceOver) 3. Проверка контента при 200% увеличении 4. Проверка коэффициентов цветового контраста 5. Валидация реализации HTML и ARIA 6. Тестирование с пользователями с ограниченными возможностями ## Мобильная доступность ### Поддержка касаний и жестов ```css /* Минимальные размеры областей касания */ .touch-target { min-height: 44px; min-width: 44px; padding: 12px; } /* Поддержка уменьшенной анимации */ @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } ``` ### Специфические для платформы соображения - iOS: Поддержка роторной навигации VoiceOver - Android: Совместимость с TalkBack и Switch Access - Правильные семантические роли для нативных мобильных элементов - Поддержка динамического шрифта для масштабирования текста