diff --git a/a11y/role-log/demos/chat-w-log/index.html b/a11y/role-log/demos/chat-w-log/index.html new file mode 100644 index 0000000000..28e32eb5de --- /dev/null +++ b/a11y/role-log/demos/chat-w-log/index.html @@ -0,0 +1,283 @@ + + + + Чат с ролью log — log — Дока + + + + + + + + +
+
+
+

Дока

+

Привет, я Дока — дружелюбный справочник для фронтендеров на понятном языке 🐶 Давай дружить?

+ +
+
+
+
+ + +
+ +
+
+ + + + diff --git a/a11y/role-log/index.md b/a11y/role-log/index.md index c8a0cc52cd..e8e767b817 100644 --- a/a11y/role-log/index.md +++ b/a11y/role-log/index.md @@ -2,49 +2,116 @@ title: "`log`" description: "Роль для области с логами." authors: - - doka-dog + - tatianafokina keywords: - - доступность + - a11y - ARIA - - ARIA-атрибут - live region - - живая область - интерактивная область + - доступный чат related: - a11y/role-marquee - a11y/role-alert - a11y/aria-live tags: - doka - - placeholder --- ## Кратко -[Роль изменяющихся областей](/a11y/aria-roles/#roli-izmenyayushchihsya-oblastey). Делает часть страницы live region или «живой» областью. `log` нужна для областей с логами. +[Роль изменяющихся областей](/a11y/aria-roles/#roli-izmenyayushchihsya-oblastey) из [WAI-ARIA](/a11y/aria-intro/#specifikaciya). Делает область с логами изменяющейся или «живой» областью. + +_Логи_ — это отдельный документ или часть страницы, где выводятся данные или информация о действиях пользователей в определённой последовательности. Старая информация обычно скрывается по мере добавления новой. ## Пример ```html +

История сообщений

-

История сообщений

``` ## Как пишется -Добавьте к тегу атрибут `role="log"`. Роль можно использовать для всех тегов. +Добавьте к элементу `role="log"`. Роль можно использовать для всех тегов и [ARIA-ролей](/a11y/aria-roles/). -У `log` по умолчанию есть свойство [`aria-live="polite"`](/a11y/aria-live/). +Подходящие ситуации для `log`: -[Скринридер](/a11y/screenreaders/) объявит сообщения с ролью `log` после другой, более важной информации. +- чаты; +- логи с ошибками; +- история изменений документа; +- любые другие логи. -## Как понять +По умолчанию роли заданы свойство [`aria-live="polite"`](/a11y/aria-live/) и состояние [`aria-atomic="false"`](/a11y/aria-atomic/). Это значит, что [скринридеры](/a11y/screenreaders/) не сразу расскажут об изменениях внутри такой области. + +Если это **крайне важные** изменения, задайте логам `aria-live="assertive"`. Делайте это с большой осторожностью, так как в этом случае скринридеры будут быстро зачитывать изменившееся содержимое и прерывать действия пользователей. + +Когда нужно, чтобы пользователи узнали обо всех изменениях в логах, в том числе о старых записях, не обойтись без `aria-atomic="true"`. + +Из-за значения `polite` у `aria-live` скринридеры будут зачитывать всё добавившееся содержимое. Это может сыграть против вас в чатах. Вспомогательные технологии будут читать не только сообщения от собеседников, но и те, которые отправил сам пользователь. Можно оставить всё как есть. В случае небольших чатов это не проблема. Например, если это чат с техподдержкой сервиса. + +Чтобы улучшить опыт пользователей в длинных чатах как в мессенджерах, можно использовать трюк с удалением роли `log` после отправки пользователем его сообщения на несколько секунд. + +Давайте посмотрим на `log` на примере чата с Докой. + +```html +
+
+

Дока

+

+ Привет, я Дока — дружелюбный справочник для фронтендеров + на понятном языке 🐶 Давай дружить? +

+ +
+
+

Пользователь Доки

+ +
+
+``` -«Живая» область — это область страницы, в которой что-то постоянно обновляется из-за внешних событий. Например, появляется уведомление или ошибка, когда пользователь сделал что-то неправильно. Так пользователи скринридеров могут узнать об изменениях автоматически, без перехода к этой части страницы. +Так как у контейнера с ролью есть [свойство `overflow="auto"`](/css/overflow/), добавили его в порядок фокуса с помощью [`tabindex`](/html/tabindex/). Так пользователи клавиатуры смогут прокрутить его стрелками. + +Чтобы скринридеры не зачитывали сообщения, которые отправили читатели, удалим на секунду `role="log"` и вернём её после этого обратно. С этим поможет [`setTimeout()`](/js/settimeout/). + +```javascript +const chatLog = document.getElementById('chat-log') + +chatLog.removeAttribute('role') + +setTimeout(() => { + chatLog.setAttribute('role', 'log') +}, 100) +``` + + + + + +Элементам с `role="log"` можно задавать подписи. Для видимой подойдёт атрибут [`aria-labelledby`](/a11y/aria-labelledby/), а для невидимой — [`aria-label`](/a11y/aria-label/). Только помните, что хоть на практике и можно добавлять подписи ко всем элементам, спецификация не рекомендует подписывать [`
`](/html/div/), [``](/html/span/) и другие неинтерактивные элементы. + +## Как понять -Роль `log` используют для истории сообщений, списков ошибок и похожей информации. Для логов важна последовательность, в которой появляется новая информация. Старая информация обычно скрывается по мере добавления новой. +_Изменяющаяся область_ — это область страницы, в которой содержимое обновляется из-за внешних событий или действий пользователей. Благодаря изменяющимся областям вспомогательные технологии узнают об обновлениях на странице и автоматически рассказывают о них пользователям. diff --git a/a11y/role-log/video/closed-captions.vtt b/a11y/role-log/video/closed-captions.vtt new file mode 100644 index 0000000000..20b4f62953 --- /dev/null +++ b/a11y/role-log/video/closed-captions.vtt @@ -0,0 +1,16 @@ +WEBVTT + +00:00:00.000 --> 00:00:04.649 +(NVDA) +Блэнк. П, р, и, в, е, т, восклицательный знак. + +00:00:04.650 --> 00:00:05.737 +(Пауза) + +00:00:05.738 --> 00:00:10.195 +Дока, надеюсь, тебе у нас понравится, +и ты даже напишешь + +00:00:10.196 --> 00:00:15.507 +свою собственную статью. 18 часов +3 минуты. diff --git a/a11y/role-log/video/nvda-log-reading.mp4 b/a11y/role-log/video/nvda-log-reading.mp4 new file mode 100644 index 0000000000..cc5771d2ca Binary files /dev/null and b/a11y/role-log/video/nvda-log-reading.mp4 differ