ARIA 및 키보드

aria-hidden="true" 안에 초점 요소를 방치할 때 생기는 스크린리더 침묵과 inert 해결책

모달이나 숨김 메뉴 컨테이너에 aria-hidden='true'를 지정했을 때 내부 링크·버튼의 초점을 비활성화하지 않아 발생하는 보조공학 침묵 오류의 원인과 최신 HTML inert 속성을 활용한 해결 절차를 다룹니다.

작성자 서호영 (기획·개발·콘텐츠 검토) · 발행 · 수정 · 읽기 6

aria-hidden 초점 요소 방치 vs inert 속성 비교aria-hidden="true" 안에 포커스 가능한 요소가 남아있으면 접근성 트리 침묵 현상이 발생합니다. HTML inert 속성을 활용할 수 있습니다.W3C ARIA 1.2 규격 & HTML5 inert 속성 비교aria-hidden 안 초점 요소 방치<div aria-hidden="true"><button>배경 링크/버튼</button> (초점 도달)FAIL (4.1.2)초점은 닿지만 보조공학에는 숨겨져 완전 침묵 발생HTML inert 속성 적용<div inert>키보드 초점 차단 + 접근성 트리 완전 제외PASS (AA)시각적·초점적·보조공학적 격리가 온전히 일치
자체 검증 도식: aria-hidden="true" 요소 내부에 초점 가능한 컨트롤이 남으면 포커스와 접근성 트리의 상태가 어긋날 수 있습니다. 지원 대상과 호환성 범위를 확인한 뒤 inert 또는 다른 포커스 관리 방식을 적용할 수 있습니다.

실무 검증 기록

마크업 및 접근성 트리 대조

본 기록은 공개 fixture와 재현 조건을 기준으로 정리한 기술 설명입니다. 실제 브라우저·스크린리더 조합의 동작은 별도 수동 검토가 필요합니다.

접근성 기술 검증 상세 내역
검증 상태공개 fixture 기반 재현 완료
검증 기준공개 fixture 및 재현 조건
검증 범위aria-hidden 안 초점 요소 방치 방지 및 inert 속성 검증 및 명시된 입력값에 한정
수동 확인실제 브라우저·키보드·스크린리더 환경에서 별도 확인 필요
fixture에서 확인한 기대 결과[실패 상태] 보조기술에는 숨겼지만 키보드 포커스는 진입 ➔ [수정 목표] inert 또는 DOM 구조 정리

검증에 사용된 실제 픽스처 / 재현 조건

aria-hidden=true 내부 focusable button
검증 범위 및 한계
  • 구형 Safari 15 이하 등 inert 미지원 레거시 환경을 위한 polyfill 고려
  • 모달 외부 영역 전체에 inert를 적용하는 래퍼 DOM 구조 설계

주장과 직결된 W3C 공식 규격

대화상자나 슬라이드 메뉴를 구현할 때 백그라운드 영역에 aria-hidden='true'를 지정했음에도 내부의 <button>, <a>, <input> 등 초점 가능 컨트롤의 키보드 진입을 관리하지 않으면, 구현 방식과 브라우저·보조기술 조합에 따라 포커스와 접근성 트리의 상태가 어긋날 수 있습니다. DOM 숨김 상태와 초점 가능 상태의 충돌 원인과 inert를 활용한 구조적 격리를 분석합니다.

aria-hidden='true'와 focusable 요소의 충돌 원리

aria-hidden='true'는 해당 요소와 하위 트리를 접근성 트리(Accessibility Tree)에서만 제외할 뿐, 브라우저 렌더링 엔진의 탭 탐색 순서(Tab Navigation Sequence)에는 영향을 주지 않습니다.

결과적으로 키보드 Tab 키를 누르면 화면상 보이지 않거나 비활성화된 영역으로 초점이 이동하지만, 스크린리더는 해당 요소가 접근성 트리에 없으므로 이름을 읽지 못하고 포커스만 머무는 문제가 발생합니다.

inert 속성을 통한 초점 및 접근성 트리 동시 격리

모달 외부를 비활성화해야 하는 경우 inert가 적절한 선택이 될 수 있습니다. 숨김 방식과 브라우저 지원 범위, 포커스 관리 구현을 함께 확인해야 합니다.

지원되는 환경에서 inert는 대상 하위 트리의 상호작용과 접근성 트리 노출을 함께 제한하는 데 사용할 수 있습니다.

  • 주의 패턴: <aside aria-hidden='true'><button type='button'>배경 버튼</button></aside> (초점 진입 시 불일치)
  • 구조적 격리: <aside inert><button type='button'>배경 버튼</button></aside> (초점 및 접근성 트리 동시 차단)
  • 모달 닫힘 복구: 모달이 닫히면 aside의 inert 속성을 제거하고 직전 열기 버튼으로 초점을 복원

흔한 마크업 안티패턴과 올바른 예방책

잘못된 마크업 패턴올바른 접근성 구현
모달 바깥 영역 전체에 aria-hidden='true'만 걸어두고 내부 링크들의 Tab 포커스를 방치하는 경우모달 오픈 시 배경 컨테이너에 inert 속성을 부여하거나 모달 내부로 초점을 가두는 포커스 트랩을 구현합니다.
모달을 닫은 후에도 배경 컨테이너의 inert나 aria-hidden 속성을 해제하지 않아 메인 본문 조작이 불가능해지는 경우대화상자 닫힘 이벤트 시점에 배경의 inert를 제거하고 오프너 버튼으로 초점을 되돌리는 라이프사이클을 구성합니다.

보조공학 낭독 및 브라우저 파싱 한계

  • 구형 Safari 15 이하 등 inert 미지원 레거시 환경을 위한 polyfill 또는 tabindex="-1" 순회 fallback 필요
  • 모달 외부 영역 전체에 inert를 적용할 수 있도록 body 바로 아래에 최상위 래퍼(예: #main)를 두는 DOM 구조가 필요합니다.

주요 공식 상세 규격

규격 검토 기준일 2026-08-16

작성 및 검토 책임 정보

  • 작성자: 서호영
  • 실제 수행 역할: 기획·개발·콘텐츠 검토
  • 최초 작성일:
  • 최종 수정일:
  • 검증 기준: 공개 fixture 및 재현 조건

네이티브 HTML, ARIA 명세, 브라우저 및 스크린리더 조합에 따라 실제 보조공학 동작은 차이가 발생할 수 있습니다. 오류를 발견하셨거나 검증 데이터에 보완이 필요한 경우 오류 제보 및 문의 또는 liebe2460@naver.com로 알려주시면 사실 확인 후 정정합니다.