ARIA 접근성 가이드

상태 · 위젯 상태

aria-disabled

요소가 보이고 포커스도 받지만 지금은 조작할 수 없음을 알립니다.

기초

한눈에 보기

구분
상태 (State)
분류
위젯 상태
값 형식
true / false
기본값
false
적용 범위
특정 역할에만 사용
HTML 대체
<button>·<input>·<select>·<textarea>·<fieldset>의 disabled 속성

설명

aria-disabled="true"는 요소가 화면에 있고 인식할 수는 있지만 지금은 편집하거나 실행할 수 없음을 보조기술에 알립니다. 화면낭독기는 “사용 불가” 또는 “흐리게 표시됨”처럼 읽습니다.

HTML disabled 속성과 가장 큰 차이는 동작을 막지 않는다는 점입니다. disabled는 클릭을 막고 Tab 순서에서 제외하지만, aria-disabled는 상태만 알릴 뿐 포커스, 클릭, 키 입력이 모두 그대로 동작합니다. 그래서 스크립트에서 이벤트를 직접 무시해야 합니다. 반대로 이 특성 덕분에 비활성 버튼에 포커스가 머물러 “왜 누를 수 없는지” 설명(aria-describedby)을 들려줄 수 있습니다. 필수 항목을 다 채우기 전의 “다음” 버튼, 메뉴 안의 쓸 수 없는 항목(APG는 비활성 메뉴 항목도 방향키로 포커스할 수 있게 권장합니다)이 대표적인 쓰임입니다.

WAI-ARIA 1.2에서 aria-disabled는 button, link, menuitem, tab, gridcell, group, scrollbar, separator, application과 입력·복합 위젯 역할(체크 상자, 콤보 상자, 목록 상자, 라디오 그룹, 슬라이더, 텍스트 상자, 그리드, 트리 등)에서 쓸 수 있습니다. 복합 위젯이나 group에 설정하면 그 안의 하위 요소도 모두 비활성으로 간주됩니다.

전역 사용은 ARIA 1.2에서 사용 중단

WAI-ARIA 1.1까지 aria-disabled은 모든 요소에 쓸 수 있는 전역 속성이었지만, WAI-ARIA 1.2에서 전역 사용이 사용 중단(deprecated)되어 아래 “사용할 수 있는 역할”에 나열된 역할(과 그 역할을 상속하는 역할)에만 쓰도록 바뀌었습니다.

비활성 상태도 눈으로 알 수 있어야 하므로 [aria-disabled="true"] 선택자로 흐린 스타일을 주되, 텍스트 대비가 너무 낮아 읽을 수 없게 만들지는 않습니다(비활성 요소는 WCAG 1.4.3 대비 요구에서 예외이지만, 읽을 수 있으면 더 좋습니다). 테스트할 때는 키보드로 포커스한 뒤 Enter·Space를 눌러도 실제 동작이 실행되지 않는지, “사용 불가”가 읽히는지, 활성화 조건이 충족되면 속성이 제거되는지 확인합니다.

값

값
값의미
true요소와 그 하위 요소가 비활성 상태입니다. 인식할 수 있지만 편집·실행할 수 없습니다.
false 기본값요소가 활성 상태입니다.

사용 예

네이티브 disabled (상호작용까지 막을 때)

HTML
<button type="submit" disabled>제출</button>

Tab 순서에서 빠지고 클릭도 막힙니다. 포커스할 이유가 없다면 이 방법이 가장 단순합니다.

포커스는 유지하고 이유를 알려 줄 때

권장HTML
<button type="button" aria-disabled="true" aria-describedby="next-hint">다음</button>
<p id="next-hint">필수 항목을 모두 입력하면 다음 단계로 넘어갈 수 있습니다.</p>

이벤트를 직접 막는 스크립트

JavaScript
btn.addEventListener('click', function (e) {
  if (btn.getAttribute('aria-disabled') === 'true') {
    e.preventDefault();          // form 제출 등 기본 동작 차단
    return;                      // 실제 동작 실행 안 함
  }
  goNext();
});
// 조건 충족 시
btn.removeAttribute('aria-disabled');

상태만 표시하고 동작은 막지 않은 경우 (비권장)

비권장HTML
<a href="/checkout" aria-disabled="true" class="btn is-disabled">결제하기</a>

링크가 여전히 동작해 결제 페이지로 이동합니다. href를 제거하거나 클릭을 막아야 합니다.

직접 해 보기

약관 동의 전에 “가입하기”를 Tab으로 포커스하고 Enter를 눌러 보세요. 포커스는 가지만 동작하지 않고 이유를 알려 줍니다.

이용 약관에 동의해야 가입할 수 있습니다.

화면낭독기에서는

화면낭독기 안내 예시 (표현은 화면낭독기·브라우저·버전에 따라 조금씩 다릅니다)
상황들리는 안내 (예)
aria-disabled="true" 버튼에 포커스가입하기, 버튼, 사용 불가, 이용 약관에 동의해야 가입할 수 있습니다.
조건 충족 후 같은 버튼에 포커스가입하기, 버튼
네이티브 disabled 버튼 (Tab으로는 이동하지 않음, 가상 커서로 읽기)제출, 버튼, 사용 불가

사용 지침

이렇게 쓰세요

  • 포커스는 유지하면서 사용할 수 없는 이유를 알려 주고 싶을 때 씁니다.
  • 클릭·Enter·Space 등 모든 동작을 스크립트에서 직접 막습니다.
  • [aria-disabled="true"]로 시각적 비활성 스타일을 함께 적용합니다.
  • 조건이 충족되면 속성을 제거하거나 false로 바꿉니다.

이렇게 쓰지 마세요

  • 속성만 붙이고 동작을 막지 않은 채로 두지 않습니다.
  • 1.2에서 지원하지 않는 역할(일반 텍스트, generic 등)에 쓰지 않습니다.
  • 네이티브 disabled와 동시에 쓰지 않습니다. 둘 중 하나만 씁니다.
  • 읽기만 가능한 값 표시에 쓰지 않습니다. 값을 읽을 수 있고 바꿀 수만 없다면 aria-readonly입니다.

사용할 수 있는 역할

이 속성을 쓰는 패턴

참고 자료