Как компоненты Astra относятся к доступности и что становится вашей зоной ответственности, когда код уже в проекте.
Компоненты Astra копируются к вам в проект, а значит доступность — общая ответственность. Компоненты приезжают с разумными ролями и подписями там, где намерение однозначно, но компонент не может знать, для чего кнопка в вашем приложении. Эта часть — ваша.
На этой странице — что вы получаете по умолчанию и что проверить перед релизом.
Уменьшение движения
Astra — библиотека анимаций, поэтому уважать эту настройку важнее всего. Пользователь, включивший «Уменьшение движения» на уровне системы, говорит вам, что движение вызывает у него дискомфорт: вестибулярные расстройства и чувствительность к движению встречаются часто.
React Native отдаёт эту настройку через AccessibilityInfo:
У Reanimated есть и свой хук — обычно это более короткий путь:
Пользуйтесь им, чтобы укоротить или пропустить переход, а не чтобы убрать отклик целиком — мгновенная смена состояния всё равно сообщает, что произошло:
Лучше растворять, чем двигать
Когда переход под уменьшением движения всё-таки нужен, прозрачность намного безопаснее сдвига, масштаба или поворота. Дискомфорт вызывают именно крупные движущиеся поверхности.
Подписи и роли
Всему, с чем пользователь может что-то сделать, нужны роль и доступное имя. Элементам из одной иконки имя нужно больше всех: у экранного диктора нет текста, на который можно опереться.
Роли, которые стоит знать:
| Роль | Для чего |
|---|---|
button | всё нажимаемое, что выполняет действие |
link | переход на другой экран или внешний адрес |
header | заголовки разделов, чтобы между ними можно было прыгать |
image | осмысленные картинки — в паре с accessibilityLabel |
switch / checkbox | переключатели — в паре с accessibilityState |
adjustable | бегунки и степперы — в паре с accessibilityValue |
Декоративную графику лучше скрывать, а не подписывать, чтобы она не создавала шум:
Состояние
Элемент, который меняется, должен объявлять новое состояние, а не только выглядеть иначе:
Для всего, что имеет диапазон, число несёт accessibilityValue:
Размер зоны нажатия
Обе платформы советуют минимальную область нажатия — 44×44 pt на iOS, 48×48 dp на Android. Маленькой иконке не обязательно расти ради этого; расширьте вместо неё саму зону:
Цвет и контраст
Компоненты Astra наследуют цвет из пропсов, которые вы передаёте, так что контраст целиком в ваших руках. WCAG AA требует 4,5:1 к фону для основного текста и 3:1 для крупного текста и значимых элементов интерфейса.
Два места, за которыми стоит следить в интерфейсе, насыщенном анимацией:
- Градиентные и шейдерные фоны — проверяйте контраст в самой светлой и самой тёмной точке градиента, а не в среднем.
- Цвет как единственный сигнал — если состояние передаётся только цветом, добавьте иконку, подпись или форму, чтобы оно пережило дальтонизм.
Проверка
Включите экранные дикторы и походите по приложению, не глядя на него:
- iOS — Настройки → Универсальный доступ → VoiceOver
- Android — Настройки → Специальные возможности → TalkBack
Затем проверьте путь с движением: Настройки → Универсальный доступ → Движение → Уменьшение движения (iOS) или Настройки → Специальные возможности → Убрать анимации (Android).
Сообщить о пробеле
Если компонент приехал без подписи, с недостижимым элементом или с анимацией, которая игнорирует уменьшение движения, — это ошибка. Пожалуйста, напишите в Telegram-канал Astra (ссылка на сайте) и укажите имя компонента и то, какой вспомогательной технологией вы пользовались.
Сделано в Astra