반응형
웹 접근성은 단순히 alt 속성 넣고, 시맨틱 태그를 쓰는 수준에서 끝나지 않습니다.
실제 프로젝트에서는 모달, 드롭다운, 탭, 다크모드 등 동적 UI 컴포넌트에서 접근성 문제가 자주 발생합니다.
이번 포스팅에서는 실무에서 특히 중요한 심화 접근성 주제 3가지를 다뤄봅니다.
🧠 1. ARIA 속성 활용하기
✅ ARIA란?
- Accessible Rich Internet Applications의 약자
- HTML 태그만으로 의미를 전달하기 어려운 경우, **보조 기술(스크린리더 등)**에 추가 정보를 제공
📌 자주 쓰는 ARIA 속성
속성 | 설명 |
aria-label | 스크린리더용 레이블 제공 |
aria-hidden="true" | 보조 기술에서 숨김 처리 |
aria-expanded="true/false" | 드롭다운, 아코디언의 열림 상태 표시 |
aria-modal="true" | 모달 창임을 명시 |
role="dialog" | 해당 요소가 모달 다이얼로그임을 정의 |
⌨️ 2. 키보드 내비게이션 지원
- 모든 UI 요소는 마우스 없이 Tab 키, Enter, Space, 방향키로 조작 가능해야 합니다.
- 문제 사례:
- 모달 열었을 때 배경 요소도 Tab으로 포커스 이동 가능 → ❌
- 커스텀 셀렉트박스에서 방향키 동작 안 됨 → ❌
📌 해결 방법: 포커스 트랩(Focus Trap)
function trapFocus(modal) {
const focusableElements = modal.querySelectorAll('a, button, input, textarea, [tabindex]:not([tabindex="-1"])');
const first = focusableElements[0];
const last = focusableElements[focusableElements.length - 1];
modal.addEventListener("keydown", (e) => {
if (e.key === "Tab") {
if (e.shiftKey && document.activeElement === first) {
e.preventDefault();
last.focus();
} else if (!e.shiftKey && document.activeElement === last) {
e.preventDefault();
first.focus();
}
}
});
}
👉 모달 안에서만 포커스가 순환되도록 처리해야 합니다.
🪟 3. 모달/다이얼로그 접근성
문제점
- 모달 열려도 스크린리더는 여전히 배경 콘텐츠 읽음
- 포커스가 모달 밖으로 빠져나감
해결 방법
- 모달 열리면 aria-hidden="true"를 배경 콘텐츠에 추가
- 모달에는 role="dialog" + aria-modal="true" 추가
- 모달 열릴 때 첫 번째 버튼에 포커스 이동
- 모달 닫으면 원래 버튼으로 포커스 복귀
📝 마무리 정리
- 기초 접근성은 시맨틱 태그 + alt 속성 + 대비
- 심화 접근성은 ARIA 속성 + 키보드 내비게이션 + 포커스 제어
- 특히 모달, 드롭다운, 아코디언 등 동적 컴포넌트에서는 접근성 고려가 필수입니다.
접근성을 지킨 UI는 단순히 법적 요구사항 충족을 넘어서, 모든 사용자에게 더 나은 UX를 제공합니다.
반응형
'HTML, CSS' 카테고리의 다른 글
웹 접근성이란? A11y 기초 개념부터 실무 적용 팁까지 한눈에 정리! (0) | 2025.10.11 |
---|---|
HTML5 시맨틱 태그 정리 💡 section, article, aside, nav, header, footer 차이점과 예제 (0) | 2025.10.10 |
SCSS @mixin 활용법 총정리! 실무에서 자주 쓰는 패턴까지 완벽 해설 (0) | 2025.10.06 |
Flexbox & Grid 단축 속성 한눈에 보기! flex, grid, place-content까지 총정리 (0) | 2025.10.05 |
Flexbox vs Grid 완전 정복! 언제 어떤 레이아웃을 써야 할까? (0) | 2025.10.04 |