Как создать WCAG‑доступный DatePicker на React: пошаговое руководство
Создать WCAG‑доступный DatePicker в React можно за 5‑7 шагов: использовать ARIA‑метки, обеспечить клавиатурную навигацию и протестировать с экранным считывателем.
Создать WCAG‑доступный DatePicker в React можно за 5‑7 шагов — добавьте нужные ARIA‑атрибуты, реализуйте полную клавиатурную навигацию и проверьте работу с популярными скрин‑ридерами. В результате компонент будет соответствовать требованиям WCAG 2.2 AA и удовлетворит пользователей с ограниченными возможностями.
Как добавить базовые ARIA‑метки к полю ввода?
Для начала необходимо снабдить <input> атрибутами aria-label и aria-describedby, чтобы скрин‑ридер чётко озвучивал назначение и подсказку.
- 1. Добавьте
aria-label="Выберите дату"к элементуinput. - 2. Создайте скрытый элемент
<div id="date-help" class="sr-only">Формат даты: ДД/ММ/ГГГГ</div>и привяжите его черезaria-describedby="date-help". - 3. Установите
role="combobox"иaria-expanded="false"до открытия календаря.
Почему важна клавиатурная навигация и как её реализовать?
Клавиатурная навигация — обязательный пункт WCAG 2.2, потому что 27 % пользователей в России используют только клавиатуру или специальные устройства ввода.
- 1. Обработайте событие
onKeyDownдля клавиш ArrowUp/Down, PageUp/PageDown, Home/End. - 2. При открытии календаря автоматически ставьте фокус на текущий день (
tabIndex="0"). - 3. Позвольте закрыть виджет клавишей Escape, возвращая фокус в поле ввода.
- 4. Обеспечьте цикл‑перемещение: после последнего дня переход к первому и наоборот.
Что делать, если пользователь выбирает дату с помощью мыши?
Мышиный ввод должен синхронно обновлять ARIA‑атрибуты, иначе скрин‑ридер будет показывать устаревшую информацию.
- 1. При клике по дню вызывайте функцию
setSelectedDate(date). - 2. Обновляйте
aria-selected="true"у выбранного элемента и сбрасывайте у остальных. - 3. Обновляйте значение
inputи атрибутaria-live="polite"для озвучивания выбранной даты.
Как протестировать DatePicker на соответствие WCAG 2026?
Для проверки используйте автоматические и ручные методы: Axe Core, Lighthouse и реальное прослушивание с NVDA 2026‑01‑15.
- 1. Запустите
npm i axe-coreи выполнитеaxe.run(document)— исправьте все найденные нарушения. - 2. В Chrome DevTools включите Lighthouse, выберите категорию "Accessibility" и добейтесь оценки ≥ 95.
- 3. Откройте страницу в NVDA, произнесите «Focus on date picker», проверьте, что озвучивается формат, выбранный день и доступные клавиши.
- 4. Зафиксируйте результаты в отчёте, где указаны проценты улучшения (например, 87 % → 96 % соответствия).
Почему стоит использовать готовый пакет и как адаптировать его под WCAG?
Библиотеки вроде react-datepicker уже покрывают 70 % требований, но без доработки они не проходят полную проверку.
- 1. Установите пакет:
npm i react-datepicker. - 2. Переопределите стили, добавив визуальный фокус с контрастом ≥ 4.5:1 (например, #005FCC).
- 3. Добавьте собственные ARIA‑атрибуты через проп
customInputRefиaria-label. - 4. Интегрируйте
useEffect, который синхронно обновляетaria-liveпри выборе даты.
Что делать, если обнаружены ошибки в мобильных скрин‑ридерах?
Мобильные платформы часто игнорируют role="dialog", поэтому замените его на role="application" при открытии календаря.
- 1. Добавьте медиазапрос
@media (pointer: coarse)для увеличения размеров элементов до минимум 44 px. - 2. Установите
aria-modal="true"иaria-hidden="true"для фоновых элементов. - 3. Проверьте работу с VoiceOver на iOS 16.5 (дата релиза 2026‑03‑10) и Android TalkBack 13.
Воспользуйтесь бесплатным инструментом WCAG‑Checker на toolbox-online.ru — работает онлайн, без регистрации.
Теги