HTML, CSS

웹 접근성 ✅ 모달, 드롭다운, 탭 UI를 위한 ARIA 패턴

jonbeo 2025. 10. 30. 09:40
반응형

 

 

웹 접근성을 고려하지 않은 UI는 시각장애인, 키보드 사용자 등에게 큰 불편을 줍니다.
이를 해결하기 위해 ARIA 속성포커스 제어를 올바르게 적용해야 합니다.
이번 포스팅에서는 실무에서 가장 많이 쓰이는 세 가지 UI 패턴을 정리해보겠습니다.


🪟 1. 모달(Dialog)

문제점

  • 모달 열렸을 때 배경 요소까지 포커스가 이동
  • 스크린리더가 모달임을 인식하지 못함

✅ 접근성 패턴

 
<div role="dialog" aria-modal="true" aria-labelledby="modalTitle">
  <h2 id="modalTitle">회원가입</h2>
  <p>정보를 입력해주세요.</p>
  <button aria-label="닫기">X</button>
</div>

 

📌 포인트

  • role="dialog" + aria-modal="true"
  • 모달 열릴 때 첫 번째 포커스 이동
  • 닫을 때 원래 버튼으로 포커스 복귀
  • 배경에는 aria-hidden="true" 적용

⬇️ 2. 드롭다운 메뉴

문제점

  • div만으로 메뉴 구성 → 스크린리더 인식 불가
  • 키보드 화살표로 메뉴 이동 불가능

✅ 접근성 패턴

 
<button aria-haspopup="true" aria-expanded="false" aria-controls="menu1">
  메뉴 열기
</button>
<ul id="menu1" role="menu">
  <li role="menuitem"><a href="#">프로필</a></li>
  <li role="menuitem"><a href="#">설정</a></li>
</ul>

 

📌 포인트

  • aria-haspopup="true" → 메뉴 있음 알림
  • aria-expanded → 열림/닫힘 상태 반영
  • role="menuitem" → 항목으로 인식
  • 키보드 ↓/↑로 항목 이동 지원

🗂️ 3. 탭 UI

문제점

  • 탭 전환 시 화면 독자가 어떤 탭이 활성화됐는지 알 수 없음

✅ 접근성 패턴

 
<div role="tablist" aria-label="콘텐츠 탭">
  <button role="tab" aria-selected="true" aria-controls="panel1" id="tab1">
    소개
  </button>
  <button role="tab" aria-selected="false" aria-controls="panel2" id="tab2">
    리뷰
  </button>
</div>

<div id="panel1" role="tabpanel" aria-labelledby="tab1">소개 내용</div>
<div id="panel2" role="tabpanel" aria-labelledby="tab2" hidden>리뷰 내용</div>

 

📌 포인트

  • role="tablist", role="tab", role="tabpanel" 구조
  • 활성 탭 → aria-selected="true", 비활성 탭 → hidden
  • 키보드 ←/→로 탭 전환

⚡ 실무 적용 체크리스트

  • 모달role="dialog", 포커스 트랩
  • 드롭다운aria-haspopup, 키보드 이동 지원
  • aria-selected, tabpanel과 연동
  • 공통 → 키보드 Tab, Enter, Esc 동작 반드시 확인

📝 마무리 정리

  • ARIA 속성은 **보조 기술(스크린리더)**을 위한 설명 역할
  • 모달, 드롭다운, 탭은 접근성 이슈가 가장 많은 UI → 반드시 패턴화 필요
  • 접근성은 “옵션”이 아니라 웹 표준과 사용자 경험의 기본입니다
반응형