역할 · 라이브 리전
role="log"
채팅·이벤트 기록처럼 새 항목이 순서대로 끝에 추가되는 라이브 리전입니다. 추가된 항목을 공손하게(polite) 읽어 줍니다.
중급
한눈에 보기
- 분류
- 라이브 리전
- 대응 HTML
- 없음
- 이름 정하는 방법
- 작성자 (author)
- 이름 필수
- 아니요
- 필수 상위 요소
- 없음
- 필수 하위 요소
- 없음
설명
log는 새로운 정보가 의미 있는 순서로 추가되고 오래된 정보는 사라질 수 있는 영역입니다. 채팅 메시지, 고객 상담 대화, 게임 진행 기록, 오류 로그 등이 해당합니다. 다른 라이브 리전과 달리 항목이 들어온 순서와 읽는 순서가 관련이 있으며, 새 항목은 항상 끝에 추가됩니다.
암묵적 속성
log는 aria-live="polite"를 암묵적으로 가집니다. aria-relevant 기본값(additions text)에 따라 새로 추가된 항목만 읽고, aria-atomic은 기본값 false여서 전체 기록을 다시 읽지 않습니다.
설계 요령
- 보이는 제목이나
aria-label(예: “상담 대화”)로 이름을 줍니다. - 항목마다 보낸 사람·시각처럼 맥락을 텍스트로 포함합니다. 아이콘이나 색으로만 구분하지 않습니다.
- 사용자가 직접 보낸 메시지까지 다시 읽히는 것이 번거롭다면, 다른 사람이 보낸 메시지만 알리는 방식(별도 라이브 리전)도 고려합니다.
- 자동으로 끝없이 쌓이는 로그는 너무 많은 낭독을 일으킬 수 있습니다. 알림 끄기 옵션을 제공하는 것이 좋습니다.
log와 feed
feed는 사용자가 읽어 가며 글을 불러오는 구조로, 자동 낭독이 없습니다. 새 항목을 자동으로 알려야 하면 log입니다.
함께 쓰는 속성
전역 속성(이름·설명 등)은 모든 역할에 쓸 수 있어 생략했습니다.
사용 예
채팅 기록
<h2 id="chat-h">상담 대화</h2>
<div role="log" aria-labelledby="chat-h">
<p><b>상담원</b> 10:02 무엇을 도와드릴까요?</p>
<p><b>나</b> 10:03 대출 연장 방법이 궁금합니다.</p>
</div>중간에 끼워 넣거나 전체를 다시 그리기 (비권장)
// 매번 innerHTML 전체를 다시 쓰면 기존 메시지까지 다시 읽힐 수 있습니다
log.innerHTML = renderAll(messages);새 항목만 끝에 appendChild로 추가합니다.
직접 해 보기
“새 메시지 받기”를 누르면 기록 끝에 항목이 추가됩니다. 화면낭독기는 추가된 항목만 읽습니다.
상담 대화
상담원 무엇을 도와드릴까요?
실시간 코드 — 조작하면 속성 값이 바뀌는 모습을 볼 수 있습니다
화면낭독기에서는
| 상황 | 들리는 안내 (예) |
|---|---|
| 새 메시지가 추가됨 | 상담원 대출 연장은 반납일 전까지 1회 가능합니다. |
사용 지침
이렇게 쓰세요
- 새 항목은 끝에만 추가합니다.
- 항목에 보낸 사람 등 맥락을 텍스트로 넣습니다.
- log에 이름을 붙입니다.
이렇게 쓰지 마세요
- 항목을 추가할 때마다 전체 내용을 다시 렌더링하지 않습니다.
- 정렬 순서가 바뀌는 목록에 log를 쓰지 않습니다.
관련 역할·패턴
이 역할을 쓰는 패턴