ARIA 접근성 가이드

역할 · 라이브 리전

role="status"

작업 결과·진행 상황처럼 급하지 않은 안내 메시지를 담는 라이브 리전입니다. 하던 낭독이 끝난 뒤 공손하게(polite) 읽어 줍니다.

기초

한눈에 보기

분류
라이브 리전
대응 HTML
<output>
이름 정하는 방법
작성자 (author)
이름 필수
아니요
필수 상위 요소
없음
필수 하위 요소
없음

설명

status는 사용자에게 도움이 되지만 alert로 끼어들 만큼 중요하지는 않은 정보를 담습니다. “저장되었습니다”, “검색 결과 24건”, “장바구니에 담았습니다”, “3개 파일 업로드 중” 같은 메시지가 대표적입니다. WCAG 2.2의 4.1.3 상태 메시지 성공 기준을 충족하는 가장 일반적인 방법입니다.

암묵적 속성

status는 aria-live="polite"와 aria-atomic="true"를 암묵적으로 가집니다. 화면낭독기가 현재 읽던 내용을 마친 뒤 영역 전체를 읽습니다. 점자 단말기는 상태 표시에 칸 일부를 할애할 수도 있습니다.

HTML과의 관계

HTML <output> 요소의 암묵적 역할이 status입니다. 계산 결과처럼 양식 입력의 결과를 보여 줄 때 적합합니다. 다만 일부 브라우저·화면낭독기 조합에서는 <output>의 변경 알림이 일관되지 않아, 일반적인 상태 메시지에는 <div role="status">가 더 많이 쓰입니다.

지켜야 할 점

  • status 영역은 미리 페이지에 두고 내용만 바꿉니다. 페이지 로드 때 이미 있던 텍스트는 읽히지 않습니다.
  • status에 포커스를 옮기지 않습니다. 명세는 상태 변화로 포커스가 status로 이동하지 않게 하라고 정합니다.
  • 다른 요소가 status 내용을 제어한다면(예: 필터 버튼이 결과 수 안내를 바꿈) 그 요소에서 aria-controls로 관계를 밝힐 수 있습니다.
  • 입력할 때마다 status를 갱신하면(글자 수 안내 등) 낭독이 쌓입니다. 잠시 멈췄을 때 한 번만 갱신(디바운스)합니다.

테스터 관점

저장·검색·추가 같은 동작 뒤 결과 메시지가 포커스 이동 없이 읽히는지 확인합니다(4.1.3). 메시지가 화면에만 잠깐 나타나고 읽히지 않는다면 실패입니다. 자세한 동작은 라이브 리전 가이드를 참고하세요.

함께 쓰는 속성

전역 속성(이름·설명 등)은 모든 역할에 쓸 수 있어 생략했습니다.

사용 예

검색 결과 수 안내 (권장)

권장HTML
<label for="q">도서 검색</label>
<input id="q" type="search">
<div role="status" id="result-count"></div>

<script>
  // 결과를 그린 뒤
  document.getElementById('result-count').textContent = '검색 결과 24건';
</script>

계산 결과에 output

HTML
<form oninput="total.value = Number(days.value) * 100">
  <label for="days">연체 일수</label>
  <input id="days" type="number" value="0">
  <p>연체료: <output name="total" for="days">0</output>원</p>
</form>

메시지가 들어간 요소를 나중에 삽입 (비권장)

비권장JavaScript
// 화면낭독기가 영역을 인식하기 전에 내용이 함께 들어가 읽히지 않을 수 있습니다
document.body.insertAdjacentHTML('beforeend', '<div role="status">저장되었습니다</div>');

직접 해 보기

버튼을 눌러 보세요. 포커스는 버튼에 머물고, 상태 영역의 내용만 바뀌어 화면낭독기가 공손하게 읽습니다.

화면낭독기에서는

화면낭독기 안내 예시 (표현은 화면낭독기·브라우저·버전에 따라 조금씩 다릅니다)
상황들리는 안내 (예)
“장바구니에 담기” 실행 (포커스는 버튼에 그대로)장바구니에 담았습니다. 현재 1권
다시 실행장바구니에 담았습니다. 현재 2권

사용 지침

이렇게 쓰세요

  • 급하지 않은 결과·진행 안내에 씁니다.
  • 빈 status 영역을 미리 두고 내용만 바꿉니다.
  • 메시지는 짧고 완결된 문장으로 씁니다.

이렇게 쓰지 마세요

  • status로 포커스를 옮기지 않습니다.
  • 긴급한 오류에 status를 쓰지 않습니다(alert 사용).
  • 키 입력마다 status를 갱신해 낭독을 쌓지 않습니다.

이 역할을 쓰는 패턴

참고 자료