속성 · 위젯 상태
aria-readonly
값을 읽고 탐색할 수는 있지만 바꿀 수는 없음을 알립니다.
한눈에 보기
- 구분
- 속성 (Property)
- 분류
- 위젯 상태
- 값 형식
- true / false
- 기본값
false- 적용 범위
- 특정 역할에만 사용
- HTML 대체
<input>·<textarea>의readonly속성
설명
aria-readonly="true"는 요소가 조작 가능한 위젯이지만 값은 바꿀 수 없음을 알립니다. 포커스를 받고 값을 읽고 복사할 수 있다는 점에서 aria-disabled와 다릅니다. 화면낭독기는 “읽기 전용”이라고 알립니다.
textbox, checkbox, combobox, listbox, radiogroup, slider, spinbutton, grid, gridcell과 이를 상속하는 searchbox, switch, treegrid, columnheader, rowheader에 씁니다. 예를 들어 결제 확인 화면에서 앞 단계에 입력한 값을 보여 주는 필드, 권한이 없는 사용자에게 보여 주는 설정 값, 편집할 수 없는 열이 있는 데이터 그리드가 있습니다.
HTML <input readonly>와 <textarea readonly>는 읽기 전용 상태가 자동으로 전달되므로 이 속성을 쓰지 않습니다. 네이티브 체크 상자와 라디오 버튼에는 readonly 속성이 없어서, 사용자 정의 체크 상자나 그리드처럼 직접 만든 위젯에서 주로 필요합니다. 이 속성도 동작을 막지 않으므로, 스크립트에서 값 변경(클릭, Space, 방향키 입력)을 직접 무시해야 합니다.
grid에 설정하면 그 안의 모든 셀이 읽기 전용으로 간주되고, 개별 gridcell에 aria-readonly="false"를 주어 일부 셀만 편집 가능하게 할 수 있습니다. 읽기 전용임을 시각적으로도 구분(배경색, 잠금 아이콘 등)하는 것이 좋습니다.
테스트할 때는 Tab으로 포커스가 가는지, “읽기 전용”이 읽히는지, 값을 바꾸려 해도 바뀌지 않는지, 값 텍스트를 화면낭독기로 읽을 수 있는지 확인합니다.
값
| 값 | 의미 |
|---|---|
true | 값을 바꿀 수 없습니다. 포커스와 탐색은 가능합니다. |
false 기본값 | 값을 바꿀 수 있습니다. |
사용 예
네이티브 readonly (권장)
<label for="order-no">주문 번호</label>
<input id="order-no" type="text" value="2024-10-00128" readonly>읽기 전용 사용자 정의 체크 상자
<div role="checkbox" tabindex="0" aria-checked="true" aria-readonly="true">
자동 갱신 (관리자만 변경 가능)
</div>변경 시도를 막는 스크립트
function toggle(box) {
if (box.getAttribute('aria-readonly') === 'true') return; // 값 변경 무시
box.setAttribute('aria-checked', String(box.getAttribute('aria-checked') !== 'true'));
}네이티브 요소에 중복 사용 (비권장)
<input type="text" value="홍길동" aria-readonly="true">보조기술에는 읽기 전용이라고 알리지만 실제로는 편집됩니다. HTML readonly를 씁니다.
직접 해 보기
“편집 잠금”을 켜면 “알림 받기” 체크 상자가 읽기 전용이 됩니다. 포커스는 가지만 Space·클릭으로 값이 바뀌지 않습니다.
실시간 코드 — 조작하면 속성 값이 바뀌는 모습을 볼 수 있습니다
화면낭독기에서는
| 상황 | 들리는 안내 (예) |
|---|---|
| 읽기 전용 체크 상자에 포커스 | 알림 받기, 체크 상자, 읽기 전용, 선택됨 |
readonly 입력란에 포커스 | 주문 번호, 편집 창, 읽기 전용, 2024-10-00128 |
사용 지침
이렇게 쓰세요
- 값은 보여 주되 바꾸지 못하게 할 때 씁니다. 포커스와 복사는 허용합니다.
- 사용자 정의 위젯에서는 값 변경 동작을 스크립트로 직접 막습니다.
- 읽기 전용임을 시각적으로도 구분합니다.
이렇게 쓰지 마세요
<input>·<textarea>에는 쓰지 않고 HTMLreadonly를 씁니다.- 조작 자체가 불가능한 상태에 쓰지 않습니다. 그때는
aria-disabled입니다. - 버튼·링크처럼 값이 없는 요소에 쓰지 않습니다.
사용할 수 있는 역할
관련 속성·패턴
이 속성을 쓰는 패턴