Календарь может быть «доступным» с клавиатуры — и всё равно ломаться на iPhone с VoiceOver.
В issue по Vaadin DatePicker описали неприятную штуку: с iOS VoiceOver пользователь не может нормально уйти дальше текущего месяца. Список месяцев не прокручивается как нужно, следующий календарь не получает фокус, а при движении по датам VoiceOver читает только число: «10», «11», «12». Без месяца и контекста это почти бесполезно.
Почему так вышло: компонент опирается на обычный DOM-фокус и roving tabindex. Но iOS VoiceOver в календарной сетке может двигаться своим способом, не передвигая DOM-фокус туда, где его ждёт компонент. В итоге часть календарей остаётся `aria-hidden`, хотя визуально интерфейс вроде бы есть.
Это важно не только для незрячих пользователей. Дата — частый шаг в бронировании, оплате, записи к врачу, выборе дедлайна. Если человек пользуется VoiceOver, увеличением, внешней клавиатурой или просто не может точно тыкать по экрану, «красивый календарь» превращается в стену.
Что проверять командам:
• реальные жесты VoiceOver на iOS, а не одни Tab/стрелки на десктопе;
• можно ли перейти на следующий месяц без визуального контроля;
• объявляется ли дата целиком, а не один день месяца;
• не прячете ли вы `aria-hidden` то, куда экранный доступ должен попасть;
• есть ли запасной путь: обычные select-поля месяца/года или текстовый ввод даты.
Roving tabindex — не гарантия доступности. Он работает только пока assistive technology действительно следует вашей модели фокуса. Если платформа навигирует иначе, нужен тест на реальном устройстве, а не только «правильная ARIA-схема» в коде.
Post #241
4