ARIA 접근성 가이드

속성 · 관계

aria-errormessage

입력값이 잘못되었을 때 보여 주는 오류 메시지 요소를 ID로 연결합니다. 반드시 aria-invalid와 함께 씁니다.

중급

한눈에 보기

구분
속성 (Property)
분류
관계
값 형식
ID 참조 (ID reference)
기본값
없음
적용 범위
특정 역할에만 사용
HTML 대체
없음 (브라우저 기본 제약 검증 말풍선은 별도로 동작하며 모양·문구를 제어하기 어렵습니다)

설명

aria-errormessage는 입력 요소와 그 오류 메시지를 연결합니다. 사용자가 잘못된 값을 입력해 aria-invalid가 true가 되면, 보조기술은 연결된 요소의 내용을 "이 입력의 오류 메시지"로 안내합니다.

명세 규칙이 엄격합니다. 반드시 aria-invalid와 함께 써야 하며, 브라우저는 aria-invalid="false"이거나 속성이 없으면 aria-errormessage를 노출하지 않습니다. 값이 올바른 동안에는 오류 메시지 요소를 숨기거나 aria-errormessage를 제거하고, 오류가 생기면 메시지를 화면에 보이게 해야 합니다. 새로 나타난 오류를 즉시 알리고 싶다면 메시지를 라이브 리전(aria-live, alert) 안에 넣습니다.

ARIA 1.2에서 이 속성은 전역 속성이 아닙니다. textbox, searchbox, combobox, checkbox, switch, radiogroup, listbox, slider, spinbutton, gridcell, tree, application 등 값을 입력·선택하는 역할에 씁니다. 네이티브 <input>, <select>, <textarea>도 해당 역할을 가지므로 사용할 수 있습니다.

보조기술 지원은 꾸준히 개선되었지만 여전히 고르지 않습니다. 최신 JAWS와 NVDA는 Chrome·Edge·Firefox에서 오류 메시지를 읽지만, 버전이나 브라우저·모바일 화면낭독기 조합에 따라 읽지 않는 경우가 있습니다. 그래서 실무에서는 오류 메시지를 aria-describedby에도 함께 연결하는 방법이 널리 쓰입니다(이 경우 같은 문장이 두 번 읽힐 수 있으니 실제 환경에서 들어 보고 결정합니다).

검수할 때는 오류가 났을 때 aria-invalid="true"로 바뀌는지, 메시지가 보이고 내용이 구체적인지(무엇이 틀렸고 어떻게 고치는지), 오류를 고치면 aria-invalid와 메시지가 함께 정리되는지, 오류 메시지가 색만으로 구분되지 않는지 확인합니다. WCAG 3.3.1 오류 식별, 3.3.3 오류 수정 제안과 관련됩니다.

값

값
값의미
<ID>오류 메시지를 담은 요소의 ID입니다. aria-invalid="true"일 때만 의미가 있으며, 그때 메시지는 화면에 보여야 합니다.

사용 예

오류 전 / 오류 후

권장HTML
<!-- 값이 올바른 상태: 메시지는 숨김 -->
<label for="email">이메일</label>
<input id="email" type="email" aria-invalid="false" aria-errormessage="email-err">
<p id="email-err" class="error" hidden></p>

<!-- 잘못된 값을 입력한 뒤 -->
<input id="email" type="email" aria-invalid="true" aria-errormessage="email-err">
<p id="email-err" class="error">이메일 형식이 올바르지 않습니다. 예: [email protected]</p>

검사하고 상태 바꾸기

JavaScript
function validate(input, msg) {
  const ok = input.validity.valid && input.value.trim() !== '';
  input.setAttribute('aria-invalid', String(!ok));
  msg.textContent = ok ? '' : '이메일 형식이 올바르지 않습니다. 예: [email protected]';
  msg.hidden = ok;
  return ok;
}
form.addEventListener('submit', (e) => {
  if (!validate(email, emailErr)) { e.preventDefault(); email.focus(); }
});

aria-invalid 없이 사용

비권장HTML
<!-- 비권장: aria-invalid가 없어 오류 메시지가 노출되지 않고, 메시지가 늘 보임 -->
<input id="phone" aria-errormessage="phone-err">
<p id="phone-err">숫자만 입력하세요.</p>

지원 범위를 넓히는 조합

HTML
<input id="email" type="email" aria-invalid="true"
       aria-errormessage="email-err" aria-describedby="email-hint email-err">
<p id="email-hint">회사 이메일을 입력합니다.</p>
<p id="email-err">이메일 형식이 올바르지 않습니다.</p>

aria-errormessage를 지원하지 않는 환경에서도 설명으로 오류가 읽힙니다. 지원하는 환경에서는 중복으로 읽힐 수 있습니다.

직접 해 보기

이메일을 잘못 입력하고 "확인"을 누르거나 입력 상자를 벗어나 보세요. aria-invalid가 바뀌고 aria-errormessage가 가리키는 메시지가 나타납니다.

화면낭독기에서는

화면낭독기 안내 예시 (표현은 화면낭독기·브라우저·버전에 따라 조금씩 다릅니다)
상황들리는 안내 (예)
오류가 없는 입력 상자에 포커스이메일, 필수, 편집 창, 입력하려면 문자를 입력하세요
잘못된 값으로 "확인"을 누름이메일 형식이 올바르지 않습니다. 예: [email protected] (라이브 리전 안내)
오류 상태의 입력 상자에 다시 포커스이메일, 필수, 잘못된 입력, 편집 창, 오류: 이메일 형식이 올바르지 않습니다.

사용 지침

이렇게 쓰세요

  • 항상 aria-invalid와 함께 쓰고, 오류일 때만 true로 바꿉니다.
  • 오류가 있을 때 메시지를 화면에 보이게 하고, 무엇이 틀렸고 어떻게 고치는지 구체적으로 적습니다.
  • 새로 나타난 오류는 라이브 리전이나 포커스 이동으로 알립니다.
  • 오류를 고치면 aria-invalid를 되돌리고 메시지를 숨깁니다.

이렇게 쓰지 마세요

  • aria-invalid 없이 aria-errormessage만 넣지 않습니다.
  • 값이 올바른데도 오류 메시지를 보이게 두지 않습니다.
  • 입력하기도 전에(첫 포커스 시) 오류를 표시하지 않습니다.
  • 오류를 빨간색 테두리만으로 표시하지 않습니다. 텍스트 메시지가 필요합니다.

사용할 수 있는 역할

이 속성을 쓰는 패턴

참고 자료