상태 · 위젯 상태
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 기본값 | 체크할 수 있는 요소가 아닙니다. |
사용 예
네이티브 체크 상자 (권장)
<label><input type="checkbox" name="agree"> 마케팅 정보 수신에 동의합니다</label>체크 상태가 자동으로 전달되므로 aria-checked가 필요 없습니다.
사용자 정의 체크 상자
<div role="checkbox" aria-checked="false" tabindex="0">
<span class="box" aria-hidden="true"></span> 마케팅 정보 수신에 동의합니다
</div>클릭·Space로 상태 바꾸기
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); } // 스크롤 방지
});네이티브 요소에 중복 사용 (비권장)
<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를 쓰지 않습니다.
사용할 수 있는 역할
관련 속성·패턴
이 속성을 쓰는 패턴