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