ARIA 접근성 가이드

상태 · 위젯 상태

aria-invalid

입력한 값이 요구 형식에 맞지 않음을 알립니다. 오류 메시지와 함께 씁니다.

기초

한눈에 보기

구분
상태 (State)
분류
위젯 상태
값 형식
토큰 (true / false / grammar / spelling)
기본값
false
적용 범위
특정 역할에만 사용
HTML 대체
required·pattern·type="email" 등 HTML 제약 검증의 :invalid 상태 (브라우저 기본 오류 말풍선 사용 시)

설명

aria-invalid는 입력 요소의 값이 유효성 검사를 통과하지 못했음을 알립니다. 화면낭독기는 필드에 포커스가 갈 때 “잘못된 입력”처럼 읽어, 사용자가 어떤 필드를 고쳐야 하는지 알 수 있게 합니다. 시각적으로 빨간 테두리로만 오류를 표시하면 색을 구분하기 어려운 사용자와 화면낭독기 사용자는 오류를 알 수 없으므로(WCAG 3.3.1 오류 식별), 이 속성과 텍스트 오류 메시지를 함께 제공해야 합니다.

오류 메시지 자체는 aria-describedby(또는 aria-errormessage)로 필드에 연결합니다. 이 속성은 “틀렸다”는 사실만 알리고, “무엇이 왜 틀렸는지”는 메시지가 전달합니다. 제출 버튼을 눌렀을 때 오류가 여러 개라면 첫 번째 오류 필드로 포커스를 옮기거나 오류 요약을 보여 주는 것이 좋습니다.

언제 true로 바꿀지가 중요합니다. 사용자가 아직 입력하지 않은 빈 필수 항목을 페이지 로드 시점부터 true로 표시하면 안 됩니다. 보통 제출 시점이나 필드를 떠날 때(blur) 검사해 설정하고, 사용자가 값을 고쳐 유효해지면 즉시 제거하거나 false로 바꿉니다. grammar와 spelling은 문법·맞춤법 오류를 감지하는 편집기용 값이며, 지원하는 화면낭독기가 많지 않습니다.

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

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

테스트할 때는 잘못된 값을 넣고 제출했을 때 필드에서 “잘못된 입력”과 오류 메시지가 함께 읽히는지, 값을 고친 뒤에는 오류 상태가 사라지는지, 페이지 첫 로드 때 오류 상태가 붙어 있지 않은지 확인합니다.

값

값
값의미
true값이 유효성 검사를 통과하지 못했습니다.
false 기본값오류가 감지되지 않았습니다.
grammar문법 오류가 감지되었습니다.
spelling맞춤법 오류가 감지되었습니다.
(그 밖의 값)목록에 없는 값이나 빈 값은 true로 처리됩니다(빈 문자열은 false).

사용 예

오류 메시지와 함께

권장HTML
<label for="email">이메일</label>
<input id="email" type="email" aria-invalid="true" aria-describedby="email-err">
<p id="email-err">이메일 형식이 올바르지 않습니다. 예: name@example.com</p>

검사 후 상태 바꾸기

JavaScript
function validate(input, errEl) {
  var ok = input.checkValidity();     // HTML 제약 검증 결과 활용
  if (ok) {
    input.removeAttribute('aria-invalid');
    errEl.textContent = '';
  } else {
    input.setAttribute('aria-invalid', 'true');
    errEl.textContent = '이메일 형식이 올바르지 않습니다.';
  }
  return ok;
}
input.addEventListener('blur', function () { if (input.value) validate(input, errEl); });

처음부터 오류로 표시 (비권장)

비권장HTML
<!-- 페이지 로드 직후, 사용자가 아무것도 입력하지 않았는데 -->
<input id="name" type="text" required aria-invalid="true">

사용자가 입력을 시작하기도 전에 “잘못된 입력”이 들려 혼란을 줍니다. 제출하거나 필드를 떠날 때 검사합니다.

오류 메시지 없이 상태만 표시 (비권장)

비권장HTML
<input id="phone" type="tel" aria-invalid="true" class="red-border">

무엇이 틀렸는지 알 수 없습니다. 오류 내용을 텍스트로 제공하고 연결합니다.

직접 해 보기

이메일을 잘못 입력하고 입력란을 벗어나거나 “확인”을 눌러 보세요. 올바르게 고치면 오류 상태가 사라집니다.

화면낭독기에서는

화면낭독기 안내 예시 (표현은 화면낭독기·브라우저·버전에 따라 조금씩 다릅니다)
상황들리는 안내 (예)
오류가 있는 필드에 포커스이메일, 편집 창, 잘못된 입력, 이메일 형식이 올바르지 않습니다. 예: name@example.com
값을 고친 뒤 다시 포커스이메일, 편집 창, name@example.com
aria-invalid="spelling" 편집기 (지원 환경)맞춤법 오류

사용 지침

이렇게 쓰세요

  • 검사에 실패한 필드에만 true를 설정하고, 고치면 즉시 해제합니다.
  • 오류 메시지를 텍스트로 제공하고 aria-describedby로 연결합니다.
  • 제출 시 오류가 있으면 첫 번째 오류 필드로 포커스를 옮기거나 오류 요약을 제공합니다.
  • 색 외에 아이콘·텍스트로도 오류를 표시합니다.

이렇게 쓰지 마세요

  • 사용자가 입력하기 전부터 true로 표시하지 않습니다.
  • 오류 메시지 없이 속성만 설정하지 않습니다.
  • 1.2에서 지원하지 않는 역할(버튼, 일반 텍스트 등)에 쓰지 않습니다.

사용할 수 있는 역할

이 속성을 쓰는 패턴

참고 자료