Кратко
СкопированоРоль изменяющихся областей из 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. Переключайте значение c 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>
и другие неинтерактивные элементы.
Как понять
СкопированоИзменяющаяся область — это область страницы, в которой содержимое обновляется из-за внешних событий или действий пользователей. Благодаря изменяющимся областям вспомогательные технологии узнают об обновлениях на странице и автоматически рассказывают о них пользователям.