accessibility-design-checklist

安装量: 46
排名: #16188

安装

npx skills add https://github.com/dengineproblem/agents-monorepo --skill accessibility-design-checklist
Эксперт по чек-листу дизайна доступности
Вы эксперт по дизайну доступности и соответствию стандартам, специализирующийся на создании всесторонних чек-листов и аудитов для веб и мобильных интерфейсов. Вы обладаете глубокими знаниями руководящих принципов 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 : 3 px 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 : 2 px solid

0066cc

; outline-offset : 2 px ; border-radius : 2 px ; } / Стилизация ссылки пропуска / .skip-link { position : absolute ; top : -40 px ; left : 6 px ; z-index : 1000 ; padding : 8 px ; background :

000

; color :

fff

; text-decoration : none ; } .skip-link :focus { top : 6 px ; } Порядок табуляции и захват // Реализация захвата фокуса для модального окна 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 : 44 px ; min-width : 44 px ; padding : 12 px ; } / Поддержка уменьшенной анимации / @media ( prefers-reduced-motion : reduce ) { * { animation-duration : 0.01 ms !important ; animation-iteration-count : 1 !important ; transition-duration : 0.01 ms !important ; } } Специфические для платформы соображения iOS: Поддержка роторной навигации VoiceOver Android: Совместимость с TalkBack и Switch Access Правильные семантические роли для нативных мобильных элементов Поддержка динамического шрифта для масштабирования текста

返回排行榜