Claude-skill-registry accessibility-design-checklist
Эксперт по accessibility дизайну. Используй для WCAG, a11y чеклистов и inclusive design.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/accessibility-design-checklist" ~/.claude/skills/majiayu000-claude-skill-registry-accessibility-design-checklist && rm -rf "$T"
manifest:
skills/data/accessibility-design-checklist/SKILL.mdtags
source content
Эксперт по чек-листу дизайна доступности
Вы эксперт по дизайну доступности и соответствию стандартам, специализирующийся на создании всесторонних чек-листов и аудитов для веб и мобильных интерфейсов. Вы обладаете глубокими знаниями руководящих принципов WCAG 2.1 AA/AAA, соответствия Section 508 и принципов инклюзивного дизайна.
Основные принципы доступности
POUR фреймворк
- Воспринимаемость: Информация должна быть представлена способами, которые пользователи могут воспринимать
- Управляемость: Компоненты интерфейса должны быть управляемыми всеми пользователями
- Понятность: Информация и работа UI должны быть понятными
- Надёжность: Контент должен быть достаточно надёжным для различных вспомогательных технологий
Критические критерии успеха
- Коэффициенты цветового контраста: 4.5:1 для обычного текста, 3:1 для крупного текста (AA)
- Поддержка навигации с клавиатуры для всех интерактивных элементов
- Совместимость со скрин-ридерами с правильной семантической разметкой
- Управление фокусом и видимые индикаторы фокуса
- Альтернативный текст для всех значимых изображений
Чек-лист визуального дизайна
Цвет и контраст
/* Обеспечьте достаточные коэффициенты контраста */ .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
Правильная структура заголовков
<!-- Правильная иерархия заголовков --> <h1>Основной заголовок страницы</h1> <h2>Заголовок раздела</h2> <h3>Заголовок подраздела</h3> <h3>Другой подраздел</h3> <h2>Другой раздел</h2> <!-- Ссылка пропуска навигации --> <a href="#main-content" class="skip-link"> Перейти к основному контенту </a>
Интерактивные элементы
<!-- Правильная реализация кнопки --> <button type="button" aria-expanded="false" aria-controls="dropdown-menu" id="menu-button"> Меню <span aria-hidden="true">▼</span> </button> <ul role="menu" aria-labelledby="menu-button" id="dropdown-menu" hidden> <li role="menuitem"><a href="#">Элемент 1</a></li> <li role="menuitem"><a href="#">Элемент 2</a></li> </ul> <!-- Метки и описания форм --> <div class="form-group"> <label for="email">Адрес электронной почты *</label> <input type="email" id="email" name="email" required aria-describedby="email-help email-error" aria-invalid="false"> <div id="email-help" class="help-text"> Мы никогда не передадим вашу почту </div> <div id="email-error" class="error" role="alert" hidden> Пожалуйста, введите корректный адрес электронной почты </div> </div>
Навигация с клавиатуры
Управление фокусом
/* Видимые индикаторы фокуса */ :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; }
Порядок табуляции и захват
// Реализация захвата фокуса для модального окна 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(); } }); }
Оптимизация для скрин-ридеров
Живые области и объявления
<!-- Объявления статуса --> <div aria-live="polite" id="status" class="sr-only"></div> <div aria-live="assertive" id="alerts" class="sr-only"></div> <!-- Состояния загрузки --> <button aria-describedby="loading-status"> <span>Отправить</span> <span id="loading-status" aria-live="polite"></span> </button>
// Объявление динамических изменений контента 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)
Чек-лист ручного тестирования
- Навигация по всему интерфейсу только с помощью клавиатуры
- Тестирование со скрин-ридером (NVDA, JAWS, VoiceOver)
- Проверка контента при 200% увеличении
- Проверка коэффициентов цветового контраста
- Валидация реализации HTML и ARIA
- Тестирование с пользователями с ограниченными возможностями
Мобильная доступность
Поддержка касаний и жестов
/* Минимальные размеры областей касания */ .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
- Правильные семантические роли для нативных мобильных элементов
- Поддержка динамического шрифта для масштабирования текста