edubun English

키보드로 페이지 쓰기

마우스를 빼고 Tab 키를 눌러 보세요. 링크, 버튼, 입력 칸이 읽는 순서대로 하나씩 표시되어야 합니다.

키보드로 웹을 쓰는 사람들

마우스를 한 번도 만지지 않고 웹을 쓰는 사람이 많습니다. 손이 떨려 마우스를 안정되게 쥐기 어려운 사람이 있고, 스위치나 입에 무는 막대를 쓰는 사람, 말을 하면 키 입력을 대신 보내 주는 음성 인식을 쓰는 사람도 있습니다. 그리고 화면 낭독기 사용자도 대부분 키보드로 페이지 안을 이동합니다. WCAG 2.2 성공 기준 2.1.1 「키보드」(A 수준)는 페이지에 있는 모든 기능이 키보드만으로도 작동해야 한다고 정합니다. 2.1.2 「키보드 함정 없음」은 키보드 초점이 페이지의 어떤 부분 안으로 들어갈 수 있다면, 키보드로 그 부분에서 다시 빠져나올 수도 있어야 한다고 덧붙입니다.

자주 쓰는 키입니다. Tab은 앞으로, Shift+Tab은 뒤로, Enter는 링크를 따라가거나 버튼을 누르고, Space는 버튼을 누르거나 체크 상자를 표시하며, 화살표는 라디오 묶음과 메뉴 안에서 움직입니다.

이미 제대로 작동하는 요소를 쓰기

href가 있는 링크, button, input, select, textarea는 따로 손대지 않아도 처음부터 초점을 받을 수 있고, 알맞은 키를 누르면 반응합니다. 클릭 처리기를 단 div는 그렇지 않습니다. Tab 키로는 닿지 않고, Enter를 눌러도 아무 일도 일어나지 않으며, 화면 낭독기도 그것을 버튼이라고 알려 주지 않습니다. 이에 대한 MDN의 조언은 아주 분명합니다. tabindex로 div를 버튼처럼 만들지 말고, 역할과 키보드 동작이 들어 있는 button 요소를 그대로 쓰라는 것입니다.

초점 순서와 tabindex

Tab 키로 이동하는 순서는 HTML 소스 안에 요소들이 놓인 순서를 그대로 따릅니다. 2.4.3 「초점 순서」는 이 순서가 페이지의 뜻과 쓰임새를 해치지 않아야 한다고 하므로, 이동 순서가 이상하다면 HTML 안의 배치를 바꾸는 것이 가장 간단한 해결책입니다. MDN은 tabindex 값을 세 가지 갈래로 나눠 설명합니다. 0은 요소를 보통의 Tab 순서 안에 넣습니다. 음수(보통 -1)는 요소를 Tab 순서에서 빼 버리지만 스크립트로 focus()를 부를 수는 있게 해서, 대화 상자나 오류 메시지를 만들 때 쓸모가 있습니다. 양수는 그 요소를 다른 모든 것보다 앞에 억지로 세웁니다. 그런데 양수는 순서를 따라가기 어렵게 하므로 MDN은 0과 -1만 쓰라고 권합니다.

지금 어디에 있는지 보이게

키보드 사용자는 지금 어느 요소에 초점이 있는지 눈으로 볼 수 있어야 합니다. 2.4.7 「초점 표시」(AA 수준)는 초점 표시가 보이기를 요구하므로, 그 자리를 대신할 다른 표시 없이 outline: none만 쓴 스타일 규칙은 미달입니다. WCAG 2.2는 이와 관련된 기준 두 가지를 새로 넣었습니다. 2.4.11 「초점이 가려지지 않음(최소)」(AA 수준)은 초점을 받은 항목이 고정된 바닥글이나 쿠키 안내처럼 페이지를 만든 사람이 넣은 것에 완전히 가려지면 안 된다고 합니다. 역시 AA인 2.5.8 「대상 크기(최소)」는 클릭하거나 손가락으로 누르는 대상이 가로세로 24 CSS 픽셀 이상이거나 주위에 충분한 간격이 있기를 요구합니다.

큰 도움이 되는 방법이 한 가지 더 있습니다. 바로 「건너뛰기 링크」입니다. 메뉴가 긴 사이트에서는 키보드 사용자가 어느 페이지에 가든 메뉴 항목을 하나하나 Tab으로 지나가야 합니다. 페이지 맨 앞에 본문으로 가는 링크를 두면 키를 한 번만 눌러 메뉴 전체를 건너뛸 수 있습니다. 이 링크는 초점을 받기 전까지는 화면에서 보이지 않게 숨겨 둘 수 있습니다.

키보드 시험을 하는 데는 2분이면 충분합니다. 먼저 주소창을 누른 다음, Tab 키를 계속 눌러 페이지 맨 끝까지 가 봅니다. 모든 컨트롤에 빠짐없이 닿는지, 순서가 읽는 순서와 같은지, 초점 위치가 언제나 보이는지, Enter와 Space가 마우스 클릭과 같은 일을 하는지 확인합니다. 그다음 Shift+Tab을 눌러 거꾸로 돌아와 봅니다. 끝까지 닿지 않는 컨트롤이 있거나 초점이 사라져 버리는 자리가 있다면, 그것은 고쳐야 할 결함입니다.

WCAG 2.1.1키보드(A). 모든 기능이 키보드로 작동
WCAG 2.1.2키보드 함정 없음(A)
WCAG 2.4.7초점 표시(AA)
WCAG 2.4.11초점이 가려지지 않음(최소), AA, 2.2에서 새로 생김
WCAG 2.5.8대상 크기(최소). 24×24 CSS 픽셀, AA
tabindex="-1"Tab 순서에서 빠지고 스크립트로는 초점 가능
핵심 정리
  • 모든 기능이 키보드로 작동하고, 빠져나오지 못하는 곳이 없어야 합니다(2.1.1, 2.1.2).
  • 누르는 div 대신 button과 href 있는 a를 씁니다.
  • Tab 순서는 HTML을 따르고, tabindex는 0과 -1만 씁니다.
  • 초점이 보이고 가려지지 않게, 대상은 24×24 CSS 픽셀 이상으로 둡니다.
  1. 다음 요소로 초점을 옮기는 키는?
  2. div에 onclick 처리기가 있습니다. 무엇이 문제일까요?
    • 키보드로 닿거나 누를 수 없음
    • 너무 느림
    • 꾸밀 수 없음
    • 문제없음
  3. tabindex="0"은 무엇을 할까요?
    • 요소를 보통 Tab 순서에 넣음
    • Tab 순서 맨 앞으로
    • Tab 순서에서 뺌
    • 비활성화
  4. MDN이 권하는 tabindex 값은?
    • 0과 -1만
    • 아무 양수
    • 1부터 10
    • 절대 쓰지 않음
  5. 스타일시트가 초점 받은 모든 요소에 outline: none을 줍니다. 어느 기준에 미달할까요?
    • 2.4.7 초점 표시
    • 1.1.1 텍스트 아닌 콘텐츠
    • 1.4.3 최소 대비
    • 3.3.2 레이블 또는 설명
  6. 2.5.8이 요구하는 최소 대상 크기는 한 변이 몇 CSS 픽셀일까요?
  7. 고정된 쿠키 안내가 초점 받은 버튼을 완전히 가립니다. WCAG 2.2의 어느 기준일까요?
    • 2.4.11 초점이 가려지지 않음(최소)
    • 2.4.3 초점 순서
    • 2.1.2 키보드 함정 없음
    • 1.4.11 텍스트 아닌 대비
  8. 건너뛰기 링크는 무엇을 할까요?
    • 반복되는 메뉴를 지나 본문으로 이동
    • 다음 페이지로 넘어감
    • 이미지를 숨김
    • 키보드를 끔
  9. 초점 받은 체크 상자를 표시하는 키는?
    • Space
    • Tab
    • Esc
    • Shift
  10. 초점이 위젯에 들어가서 Tab으로 빠져나오지 못합니다. 어느 기준에 미달할까요?
    • 2.1.2 키보드 함정 없음
    • 2.4.6 제목과 레이블
    • 1.4.1 색 사용
    • 2.5.8 대상 크기
이 과정의 출처 (7)
  • W3C, Web Content Accessibility Guidelines (WCAG) 2.2, W3C Recommendation first published 5 October 2023, current edition 12 December 2024 (w3.org/TR/WCAG22/, checked 2026-10-17, rechecked 2026-10-18)
  • W3C WAI, What's new in WCAG 2.2 (w3.org/WAI/standards-guidelines/wcag/new-in-22/, checked 2026-10-17)
  • W3C WAI, Images tutorial and alt decision tree (w3.org/WAI/tutorials/images/decision-tree/, checked 2026-10-17)
  • W3C, Using ARIA (w3.org/TR/using-aria/, Discontinued Draft 24 February 2026, rules 1 to 4, checked 2026-10-17)
  • W3C WAI-ARIA Authoring Practices Guide, Read Me First, "No ARIA is better than bad ARIA" (w3.org/WAI/ARIA/apg/practices/read-me-first/, checked 2026-10-17)
  • MDN Web Docs, tabindex (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/tabindex, checked 2026-10-17)
  • MDN, Heading elements, accessibility notes (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements, checked 2026-10-17)

확인한 날: 2026-10-17