/ 우리는 이렇게 합니다 / 접근성 담당자의 노트
개발·인터랙션 · 접근성을 맡은 사람

마우스 없이 써보면, 보입니다.

저는 새 화면이 나오면 마우스를 치워두고 Tab 키만으로 끝까지 써봅니다. 그 순간 ‘예쁜 화면’과 ‘쓸 수 있는 화면’이 갈립니다. 그래서 이 글은 읽는 글이 아니라 키보드로 직접 눌러보는 글입니다. 아래 위젯에서 포커스 링을 한 번 꺼보세요. 누군가가 매일 겪는 일이 보입니다.

한 줄 직답

접근성은 장애가 있는 사람만을 위한 게 아니라, 키보드만 쓰는 사람·색이 안 보이는 사람·움직임에 멀미하는 사람까지 ‘모두가 쓸 수 있게’ 만드는 기본입니다. Findable은 포커스 링을 지우지 않고, 키보드만으로 전 기능이 되며, 시맨틱 HTML과 명도 대비를 빼먹지 않습니다.

요약

  • 포커스 링은 절대 outline:none으로 지우지 않고 :focus-visible로 다시 그린다.
  • 마우스 없이 키보드만으로 모든 기능이 동작해야 한다 — 이게 접근성의 1번이다.
  • 색만으로 정보를 전달하지 않는다. 명도 대비·alt·시맨틱 HTML은 멋보다 먼저다.
  • 접근성은 SEO·신뢰·법적 측면에서도 그대로 이득으로 돌아온다.

입사하고 얼마 안 됐을 때, QA 담당자분이 손목 부상으로 한동안 마우스를 못 쓰셨습니다. 키보드만으로 우리 관리자 화면을 쓰시다가 “이 버튼은 어떻게 누르냐”고 물어보셨는데, 저는 한참을 대답 못 했습니다. 제가 만든 모달의 닫기 버튼에 Tab으로 도달할 방법이 없었거든요. 그날 이후로 저는 새 화면이 나오면 마우스를 서랍에 넣고 키보드만으로 끝까지 써봅니다. 그게 제 첫 번째 테스트입니다.

포커스 링을 끄면, 무슨 일이 벌어질까요?

말로 하면 잘 안 와닿습니다. 아래 위젯을 직접 써보세요. ‘다음 요소로 포커스’를 누르면 포커스가 한 칸씩 이동합니다. 그다음 ‘링 끄기’를 켜고 다시 눌러보세요. 똑같이 포커스는 움직이는데, 내가 지금 어디에 있는지 보이지 않습니다.

Live · 키보드 포커스

포커스 링, 끄면 이렇게 됩니다

'다음 요소로 포커스'를 누르면 포커스가 이동합니다. '링 끄기'를 켜면 키보드 사용자가 길을 잃는 걸 직접 보세요.

링을 끈 상태가 바로, outline:none 한 줄이 만들어내는 세상입니다. 디자이너는 “파란 테두리가 지저분하다”고 하고, 저도 그 마음을 압니다. 하지만 마우스 없이 Tab으로만 사이트를 쓰는 사람에게 포커스 링은 ‘내가 지금 여기 있다’는 유일한 표시입니다. 그래서 저는 지우는 대신 :focus-visible로 브랜드 색에 맞춰 다시 그립니다. 그러면 마우스로 클릭할 때는 안 보이고, 키보드로 이동할 때만 깔끔하게 나타납니다. 멋과 배려를 둘 다 가져가는 방법입니다.

마우스가 없는 사람도 전 기능을 쓸 수 있나요?

이게 접근성의 1번입니다. 메뉴·모달·탭·드롭다운·슬라이더, 마우스로 되는 모든 것이 키보드로도 돼야 합니다. Tab으로 도달하고, Enter·Space로 실행하고, Esc로 닫히고, 화살표로 이동합니다. 제가 가장 자주 잡는 버그가 ‘열리는데 안 닫히는 모달’과 ‘Tab이 화면 밖으로 새는 팝업’입니다. 포커스가 갇혀야 할 곳에서 새면 사용자는 그대로 미아가 됩니다. 그래서 모달을 만들 때는 포커스 트랩과 Esc 닫기를 항상 같이 넣습니다.

스크린리더는 제 코드를 어떻게 읽을까요?

스크린리더는 화면의 ‘모양’이 아니라 HTML의 ‘의미’를 읽습니다. 그래서 저는 <div onclick> 대신 <button>, 메뉴는 <nav>, 본문은 <main>, 제목은 순서대로 h1·h2·h3를 씁니다. 시각적으로 똑같아 보여도, 시맨틱 태그를 쓰면 스크린리더 사용자는 ‘버튼 4개가 있는 내비게이션’이라고 듣고, 표제만 훑어서 원하는 곳으로 점프할 수 있습니다. div로 쌓은 화면은 그들에게 그냥 ‘텍스트 덩어리’입니다.

이미지와 색은 어떻게 다뤄야 할까요?

이미지에는 alt를 답니다. 단, ‘이미지’ 같은 말이 아니라 그 이미지가 전하는 정보를요. 장식용 이미지는 일부러 alt=""로 비워서 스크린리더가 건너뛰게 합니다. 그리고 저는 색만으로 정보를 전달하지 않습니다. ‘빨간 글씨는 오류’ 같은 표시는 색각 이상 사용자나 흑백 화면에서 사라집니다. 그래서 색에 더해 아이콘이나 텍스트(“오류:”)를 항상 같이 둡니다. 명도 대비도 챙깁니다. 본문은 배경 대비 4.5:1, 큰 글씨는 3:1 이상을 맞춰서, 연한 회색 글씨로 멋 부리다 못 읽는 일을 막습니다.

제가 포커스 링을 지우지 않고 ‘다시 그릴 때’ 쓰는 코드는 사실 몇 줄 안 됩니다. 이게 제 출발점입니다.

CSS · focus-visible
/* outline:none 으로 지우지 말고, 키보드 때만 다시 그린다 */
:focus-visible {
  outline: 2px solid var(--signal);
  outline-offset: 3px;
  border-radius: 4px;
}
/* 마우스 클릭으로 들어온 포커스는 링을 숨긴다 */
:focus:not(:focus-visible) { outline: none; }

/* 스크린리더 전용 안내문(화면엔 안 보이고 음성으로만) */
.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

그리고 화면을 넘기기 전에는 키보드만으로 한 바퀴 돌고, 자동 점검 도구(axe)를 한 번 돌려 ‘위반 0’을 눈으로 확인합니다.

검증 — 예시
$ npx @axe-core/cli https://find-ables.com/ --tags wcag2a,wcag2aa
$ ✓ 색 대비 위반 0 · 라벨 없는 폼 컨트롤 0 · 이미지 alt 누락 0
$ ✓ 키보드 탭 순서: 메뉴 → 서비스 → 문의 → 자료받기 (가로채기 없음)

ARIA는 많이 붙일수록 좋은 거 아닌가요?

여기서 많이들 헷갈립니다. ARIA는 최소로, 정확히 써야 합니다. 업계에 “No ARIA is better than bad ARIA(잘못된 ARIA보다 차라리 없는 게 낫다)”는 말이 있을 정도예요. 잘못 붙은 role이나 깨진 aria-label은 스크린리더에 거짓 정보를 줍니다. 그래서 저는 먼저 시맨틱 HTML로 풀고, 네이티브 요소로 표현이 안 되는 경우(커스텀 토글, 라이브 영역 등)에만 ARIA를 보조로 씁니다. 가장 좋은 ARIA는 ‘안 써도 되게 만든 ARIA’입니다.

움직임이 누군가를 아프게 할 수도 있나요?

네, 의외로 많은 분이 모릅니다. 전정기관이 민감한 사람에게 큰 패럴랙스, 화면을 가로지르는 모션, 자동재생 캐러셀은 어지럼증과 멀미를 유발합니다. 그래서 저는 prefers-reduced-motion을 켠 사용자에게는 큰 움직임을 끄거나 부드러운 페이드로 바꿉니다. 운영체제에서 ‘동작 줄이기’를 켜둔 사람의 의사를, 코드가 존중하는 거죠. 접근성은 화려함을 버리는 게 아니라, 끌 수 있게 만드는 일입니다.

항목접근성 무시접근성 준수
키보드 사용포커스 링 제거 → 미아:focus-visible로 전 기능 사용 가능
검색(SEO)div 덩어리 → 의미 불명시맨틱·alt → 크롤러도 이해, 노출 유리
신뢰“못 쓰는 사람”을 만든다더 많은 고객이 끝까지 전환

다른 담당자와의 연결 — 접근성은 모두의 일입니다

접근성은 저 혼자 챙긴다고 되는 게 아닙니다. 화면의 모든 디테일에 스며들어 있어요. 명도 대비와 색 사용은 컬러를 맡은 사람과, 폼 라벨·검증 메시지의 접근성은 폼을 맡은 사람과, 시맨틱 구조와 성능은 개발 전반과 함께 맞춰야 비로소 완성됩니다. 같은 기준을 공유하는 팀이라야, 어느 한 곳도 새지 않습니다.

포커스 링이 보기 싫은데 지워도 되나요?
지우면 안 됩니다. 키보드 사용자는 포커스 링이 유일한 ‘내가 지금 여기 있다’ 표시입니다. 보기 싫다면 outline:none으로 없애지 말고 :focus-visible로 브랜드 색에 맞춰 다시 그리세요. 그러면 마우스 클릭 때는 안 보이고 키보드 이동 때만 보입니다.
접근성을 챙기면 SEO에도 도움이 되나요?
네. 시맨틱 HTML, 이미지 alt, 명확한 링크 텍스트, 표제 구조는 검색엔진이 페이지를 이해하는 단서와 거의 똑같습니다. 스크린리더가 이해하는 페이지는 크롤러도 이해합니다. 접근성과 SEO는 같은 기반 위에 있습니다.
색만으로 정보를 전달하면 안 되는 이유가 뭔가요?
색각 이상이 있는 사용자나 흑백 화면, 강한 햇빛 아래에서는 색 구분이 안 됩니다. ‘빨간 항목은 오류’처럼 색에만 의존하면 그들에게는 정보가 사라집니다. 색에 더해 아이콘·텍스트·밑줄 같은 두 번째 단서를 항상 같이 둬야 합니다.
ARIA를 많이 붙일수록 접근성이 좋아지나요?
아닙니다. ARIA는 최소로, 정확히 써야 합니다. 잘못된 ARIA는 ARIA가 없는 것보다 나쁩니다. button·nav·label 같은 시맨틱 HTML로 해결되면 그게 먼저고, ARIA는 네이티브 요소로 표현이 안 될 때만 보조로 씁니다.
애니메이션이 누군가에게 문제가 될 수 있나요?
네. 전정기관이 민감한 사람에게 큰 움직임·패럴랙스·자동재생은 어지럼증과 멀미를 유발합니다. prefers-reduced-motion을 켠 사용자에게는 큰 모션을 끄거나 페이드로 바꿔야 합니다. 멋과 배려는 같이 갑니다.

모두가 쓸 수 있는 사이트를 만듭니다

마우스 없이도, 색이 안 보여도, 끝까지 쓸 수 있는 홈페이지. 이런 기준이 기본값인 팀과 시작하세요.

무료 진단 받기

이 글의 키보드 포커스 위젯은 이 페이지에서 실제로 동작하는 코드입니다(외부 라이브러리 0). 접근성·법적 요건은 일반 원칙을 소개한 것이며 개별 사안에 대한 법률 자문이 아닙니다. 날조된 사례·수치는 사용하지 않았습니다.