ARIA 접근성 가이드

상태 · 위젯 상태

aria-checked

체크 상자·라디오 버튼·스위치가 체크되었는지, 해제되었는지, 일부만 체크되었는지 알립니다.

기초

한눈에 보기

구분
상태 (State)
분류
위젯 상태
값 형식
삼중 상태 (true / false / mixed / undefined)
기본값
undefined
적용 범위
특정 역할에만 사용
HTML 대체
<input type="checkbox">·<input type="radio">의 checked, 체크 상자의 indeterminate

설명

aria-checked는 체크할 수 있는 위젯의 현재 체크 상태를 나타냅니다. checkbox, radio, switch, menuitemcheckbox, menuitemradio, option, treeitem에 쓰며, 특히 checkbox, radio, switch, menuitemcheckbox, menuitemradio 역할에는 필수입니다. 화면낭독기는 이 값을 읽어 “선택됨”, “선택 안 됨”, “부분 선택됨” 등으로 알려 줍니다.

HTML <input type="checkbox">와 <input type="radio">는 체크 상태가 자동으로 전달되므로 aria-checked를 붙이지 않습니다. 오히려 네이티브 요소에 붙이면 실제 checked 상태와 어긋날 위험만 생깁니다. 디자인 때문에 <div>·<span>으로 체크 상자를 직접 만들어야 하는 경우에만 role, tabindex="0", Space 키 처리와 함께 씁니다.

mixed는 “일부만 체크됨”입니다. 하위 항목 중 일부만 체크된 “전체 선택” 체크 상자가 대표적이며, HTML에서는 스크립트로 input.indeterminate = true를 설정하면 같은 의미가 됩니다. 명세상 mixed는 radio, menuitemradio, switch에서 지원되지 않으며 브라우저는 이를 false로 처리해야 합니다.

aria-selected, aria-pressed와 혼동하기 쉽습니다. 체크는 “켜고 끄는 선택지”, 선택(selected)은 목록·탭에서 “고른 항목”, 눌림(pressed)은 “토글 버튼”입니다. 값은 반드시 화면의 체크 표시와 함께 바꿔야 하며, 클릭과 Space 키 모두에서 상태가 바뀌어야 합니다.

테스트할 때는 Tab으로 포커스가 가는지, Space로 상태가 바뀌는지, 바뀐 상태가 즉시 읽히는지, 체크 표시 아이콘이 화면낭독기에 따로 읽히지 않는지(aria-hidden) 확인합니다.

값

값
값의미
true체크되어 있습니다.
false체크할 수 있지만 체크되어 있지 않습니다.
mixed일부만 체크된 상태입니다. checkbox, menuitemcheckbox, option, treeitem에서만 의미가 있고, radio·menuitemradio·switch에서는 false로 처리됩니다.
undefined 기본값체크할 수 있는 요소가 아닙니다.

사용 예

네이티브 체크 상자 (권장)

권장HTML
<label><input type="checkbox" name="agree"> 마케팅 정보 수신에 동의합니다</label>

체크 상태가 자동으로 전달되므로 aria-checked가 필요 없습니다.

사용자 정의 체크 상자

HTML
<div role="checkbox" aria-checked="false" tabindex="0">
  <span class="box" aria-hidden="true"></span> 마케팅 정보 수신에 동의합니다
</div>

클릭·Space로 상태 바꾸기

JavaScript
function toggle(box) {
  var checked = box.getAttribute('aria-checked') === 'true';
  box.setAttribute('aria-checked', String(!checked));
}
box.addEventListener('click', function () { toggle(box); });
box.addEventListener('keydown', function (e) {
  if (e.key === ' ') { e.preventDefault(); toggle(box); }   // 스크롤 방지
});

네이티브 요소에 중복 사용 (비권장)

비권장HTML
<input type="checkbox" aria-checked="true">

사용자가 체크를 해제해도 aria-checked="true"가 남아 있으면 상태가 어긋납니다.

직접 해 보기

“전체 선택”과 각 토핑을 클릭하거나 Tab으로 이동한 뒤 Space를 눌러 보세요. 일부만 체크하면 “전체 선택”이 mixed가 됩니다.

피자 토핑

화면낭독기에서는

화면낭독기 안내 예시 (표현은 화면낭독기·브라우저·버전에 따라 조금씩 다릅니다)
상황들리는 안내 (예)
체크되지 않은 체크 상자에 포커스버섯, 체크 상자, 선택 안 됨
Space를 눌러 체크선택됨
일부만 체크된 “전체 선택”에 포커스전체 선택, 체크 상자, 부분 선택됨
사용자 정의 스위치에 포커스 (role="switch" aria-checked="true")알림, 스위치, 켬

사용 지침

이렇게 쓰세요

  • 가능하면 <input type="checkbox">, <input type="radio">를 씁니다.
  • 사용자 정의 체크 상자는 role, tabindex="0", Space 키 처리와 함께 만듭니다.
  • 클릭과 키보드 조작 모두에서 값과 화면 표시를 동시에 바꿉니다.
  • 하위 항목 일부만 체크된 상위 체크 상자에는 mixed를 씁니다.

이렇게 쓰지 마세요

  • 네이티브 체크 상자·라디오 버튼에 aria-checked를 붙이지 않습니다.
  • 목록·탭에서 고른 항목에 쓰지 않습니다. 이 경우 aria-selected를 씁니다.
  • 토글 버튼에 쓰지 않습니다. button 역할의 켬/끔은 aria-pressed입니다.
  • radio, switch에 mixed를 쓰지 않습니다.

사용할 수 있는 역할

이 속성을 쓰는 패턴

참고 자료