키보드 사용 보장
마우스로 할 수 있는 모든 기능을 키보드로도 할 수 있게 만드는 방법. 클릭되는 div, 마우스 전용 메뉴, 키보드 함정을 고치는 코드와 확인 방법을 정리했습니다.
마지막 수정
무엇을 요구하나요?
마우스로 할 수 있는 모든 기능을 키보드만으로도 할 수 있어야 합니다. 마우스를 쓰기 어려운 사용자, 화면 낭독기 사용자, 스위치 같은 보조기기 사용자는 키보드(또는 키보드처럼 동작하는 장치)로 웹을 씁니다.
기본 조작은 다음과 같습니다.
| 키 | 동작 |
|---|---|
| Tab / Shift+Tab | 다음 / 이전 요소로 이동 |
| Enter | 링크 이동, 버튼 실행 |
| Space | 버튼 실행, 체크박스 선택 |
| 방향키 | 라디오 버튼, 탭 메뉴, 선택 상자 안에서 이동 |
| Esc | 모달·메뉴 닫기 |
또한 어떤 영역에 들어가도 키보드로 다시 빠져나올 수 있어야 합니다(키보드 함정 금지).
자주 틀리는 예
1. 클릭되는 div·span
div에 onclick만 붙이면 Tab으로 갈 수 없고 Enter로도 실행되지 않습니다.
<div class="btn" onclick="addCart()">장바구니 담기</div>
<button type="button" class="btn" onclick="addCart()">장바구니 담기</button>
링크처럼 다른 페이지로 이동하면 <a href>를, 동작을 실행하면 <button>을 씁니다. 어쩔 수 없이 div를 써야 한다면 역할·초점·키 처리를 모두 직접 넣어야 합니다.
<div role="button" tabindex="0" onclick="addCart()" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();addCart();}">장바구니 담기</div>
2. 마우스를 올려야만 열리는 메뉴
:hover로만 펼쳐지는 메뉴는 키보드로 하위 메뉴에 갈 수 없습니다. 초점을 받았을 때도 펼쳐지게 하세요.
.gnb li:hover > ul { display: block; }
.gnb li:hover > ul,
.gnb li:focus-within > ul { display: block; }
3. 빠져나올 수 없는 모달
모달 안에서 초점을 가두는 것은 맞지만, Esc나 닫기 버튼으로 반드시 나갈 수 있어야 합니다. 닫으면 모달을 연 버튼으로 초점을 돌려주세요.
확인하는 방법
직접 점검해 보기
- 페이지 검사 — 확장 프로그램으로 열린 페이지에서 이 항목과 관련된 문제를 찾습니다
- 수동 점검표 — 33개 항목을 직접 확인하고 기록합니다
- 자주 틀리는 10개 항목 맛보기 점검표 — 무료 엑셀
자주 묻는 질문
div에 tabindex="0"만 붙이면 되나요?
부족합니다. Tab으로 갈 수는 있게 되지만 Enter·Space로 실행되지 않고, 화면 낭독기는 버튼인지 알 수 없습니다. 처음부터 button이나 a 요소를 쓰는 것이 가장 확실합니다.
키보드 함정이 무엇인가요?
Tab으로 어떤 영역에 들어간 뒤 키보드만으로는 빠져나올 수 없는 상태입니다. 동영상 플레이어, 지도, 서식 편집기, 잘못 만든 모달에서 자주 생깁니다.
함께 보면 좋은 항목
이 글은 셀프 점검을 돕는 안내이며 공식 해설이나 인증 심사 기준을 대신하지 않습니다. 정확한 기준은 한국형 웹 콘텐츠 접근성 지침 2.2 원문을 확인하세요.