웹 접근성 기본기, 인증마크를 준비하며 배운 것들
웹퍼블리셔 시절 웹 접근성 인증마크를 준비하며 익힌 것들 — 시맨틱 마크업, 대체 텍스트, 폼 라벨, 키보드 접근, 색상 대비, 그리고 ARIA를 아껴 쓰는 이유.
웹퍼블리셔 시절 웹 접근성 인증마크를 준비하며 익힌 것들 — 시맨틱 마크업, 대체 텍스트, 폼 라벨, 키보드 접근, 색상 대비, 그리고 ARIA를 아껴 쓰는 이유.
웹 접근성을 처음 진지하게 마주한 건 웹퍼블리셔로 일하며 웹 접근성 인증마크를 준비하던 때다. 그때 익힌 기본기를 정리해둔다. 화려한 기술은 아니지만, 대부분의 접근성 문제는 여기서 갈린다.
오해부터 짚고 가자. 웹 접근성이라고 하면 “시각장애인용 기능”이라고만 생각하기 쉬운데, 실제 범위는 훨씬 넓다.
접근성은 특별한 소수를 위한 별도 기능이 아니라, “언젠가의 나”까지 포함한 모두가 쓸 수 있게 만드는 일이다. 그리고 대부분은 처음부터 고려하면 추가 비용이 거의 없다. 나중에 붙이려면 전체를 뜯어야 하는 게 문제일 뿐.
제일 먼저 배운 건 태그에 의미를 담는 것이었다. 화면에 어떻게 보이느냐가 아니라, 그게 무슨 역할인지를 태그로 말하는 것.
대표적인 게 b와 strong, i와 em이다.
<!-- 화면에는 똑같이 굵게, 기울게 보인다 -->
<b>중요</b> <strong>중요</strong>
<i>강조</i> <em>강조</em>
눈으로 보면 넷 다 똑같다. 그런데 스크린 리더로 들어보면 b·i는 평범하게 읽고 지나가고, strong·em은 강조해서 읽어준다. b·i는 모양만 바꾸는 태그고, strong·em은 “여기가 중요하다”는 의미를 담은 태그이기 때문이다.
같은 원리가 문서 구조 전체에 적용된다.
h1~h6를 순서대로. 스크린 리더 사용자는 제목만 목차처럼 훑어 원하는 곳으로 바로 간다. 글씨를 크게 하려고 div에 스타일만 주면 이 목차가 사라진다.ul·ol, 표는 table. 리더기가 “목록, 항목 5개”, “표, 3행 4열”처럼 구조를 먼저 알려준다. 표에는 caption과 th scope로 각 칸이 무슨 데이터인지 연결한다.div로 전부 감싸면 화면은 똑같이 나와도, 눈으로 안 보는 사람에게는 구조가 통째로 사라진다.
이미지는 alt로 설명을 단다.
<!-- 의미가 있는 이미지 — 내용을 설명 -->
<img src="chart.png" alt="2022년 분기별 매출, 3분기에 가장 높음" />
<!-- 장식용 이미지 — 빈 alt로 건너뛰게 -->
<img src="divider.png" alt="" />
alt를 아예 빼면 리더기가 파일명(chart.png)을 그대로 읽어버린다. 장식용이라면 빈 alt로 “읽지 말고 지나가라”고 알려주는 게 맞다.
입력 필드는 라벨과 연결해야 한다.
<label for="email">이메일</label>
<input id="email" type="email" />
이렇게 묶으면 리더기가 “이메일, 입력란”으로 읽어주고, 라벨을 클릭해도 입력란으로 포커스가 간다. placeholder는 라벨을 대신하지 못한다. 입력을 시작하면 사라지니까.
마우스 없이 Tab 키만으로 모든 기능을 쓸 수 있어야 한다. 여기서 자주 깨진다.
outline: none으로 없애버리면 키보드 사용자는 지금 어디 있는지 알 수 없다. :focus-visible을 쓰면 마우스일 때는 안 보이고 키보드로 이동할 때만 표시된다.Tab 순서가 어긋나면 혼란스럽다.Tab으로 지나치지 않도록, 맨 앞에 “본문 바로가기” 링크를 둔다.디자인은 옅은 회색 텍스트를 좋아한다. 예쁘지만 저시력 사용자에겐 거의 안 보인다. 본문 텍스트는 배경과 명도 대비 4.5:1 이상을 지키는 게 기준이다. 연회색의 유혹을 참아야 하는 지점.
접근성을 공부하면 role, aria-* 같은 ARIA 속성을 알게 되는데, 여기엔 유명한 원칙이 하나 있다. “나쁜 ARIA는 없는 것만 못하다.”
네이티브 요소를 쓰면 접근성이 공짜로 따라온다. div에 role="button"을 붙이고 키보드 핸들러를 직접 다는 것보다, 그냥 button을 쓰는 게 낫다. button은 포커스, 엔터/스페이스 키 동작, 리더기 안내가 전부 기본으로 들어있다. ARIA는 네이티브 요소로 표현할 수 없는 걸 보완할 때만 꺼내는 도구다.
자동화 도구(axe, Lighthouse)가 잡아주는 건 일부다. 나머지는 눈을 감고 스크린 리더로 들어보고, 마우스를 치우고 키보드로만 다녀봐야 안다. 한 번만 해보면 어디가 막히는지 몸으로 느껴진다. 인증마크를 준비하며 가장 크게 남은 것도 결국 이 습관이었다.