Кратко
СкопированоРоль изменяющихся областей из WAI-ARIA. Делает часть страницы изменяющейся или «живой» областью. timer пригодится для областей, где идёт отсчёт времени в обычном или обратном порядке.
Пример
Скопировано
<div role="timer"> <span id="timer-hours">00</span> <span id="timer-mins">00</span></div>
<div role="timer">
<span id="timer-hours">00</span>
<span id="timer-mins">00</span>
</div>
Как пишется
СкопированоДобавьте к элементу атрибут role. Роль можно использовать для всех тегов и ARIA-ролей.
Внутри контейнера с ролью таймера не обязательно использовать <time> и указывать время в машиночитаемом формате. Это могут быть обычные цифры и текст.
По умолчанию у timer есть свойство aria. Так что скринридеры не расскажут об изменениях до того, как пользователь сделает на фокус на области с этой ролью.
Чтобы изменить поведение роли, используйте aria со значением polite и JavaScript. Переключайте значение с polite на off или удаляйте весь атрибут через нужные интервалы времени. Например, каждые 60 минут. Так объявления не будут навязчивыми. В большинстве случаев лучше не изменять поведение timer. Например, постоянно рассказывать о том, сколько часов, минут и секунд осталось до Чёрной пятницы, — не самая лучшая идея. Пользователям скринридеров будет мучительно это слушать 😫 Другое дело — отсчёт времени до конца теста или на выполнение банковской операции. В этом случае пользователям важно знать, сколько у них осталось времени.
Атрибут aria поможет улучшить таймер. Благодаря ему вспомогательные технологии расскажут про всё содержимое таймера, а не только про изменившиеся часы, секунды или минуты. Например, таймер отсчитывает две минуты в обратном направлении. Когда остаётся 59 секунд, без aria скринридер расскажет только о минутах: «Ноль минут». Так что пользователи могут подумать, что время вышло, хотя у них осталась ещё пара секунд. Чтобы объявления не были назойливыми, устанавливайте интервалы между объявлениями. Это удобно делать функцией set. Так можно добавлять и удалять aria через нужные промежутки времени.
В примере элементу, в котором отсчитывается время, заданы role и aria. После того как время вышло, появляется сообщение «Время вышло!». aria удаляется и добавляется через секунду после начала отсчёта, потом через минуту и затем за 10 секунд до завершения.
Подсказки про то, минуты это или секунды, добавлены с помощью псевдоэлемента : и content. Скринридеры всегда зачитывают текст из этого CSS-свойства.
<h2>Оставшееся время</h2><div role="timer" id="timer" aria-atomic="true"> <span id="min">02</span> <span id="sec">00</span></div><div id="message" aria-live="polite"></div>
<h2>Оставшееся время</h2>
<div
role="timer"
id="timer"
aria-atomic="true"
>
<span id="min">02</span>
<span id="sec">00</span>
</div>
<div id="message" aria-live="polite"></div>
Элементам с role можно задавать подписи. Для видимой подойдёт атрибут aria, а для невидимой — aria. Только помните, что хоть на практике и можно добавлять подписи ко всем элементам, спецификация не рекомендует подписывать <div>, <span> и другие неинтерактивные элементы.
Как понять
СкопированоИзменяющаяся область — это область страницы, в которой содержимое обновляется из-за внешних событий или действий пользователей. Благодаря изменяющимся областям вспомогательные технологии узнают об обновлениях на странице и автоматически рассказывают о них пользователям.