본문으로 건너뛰기

Accessibility 창과 점검 목록

HTML·CSS 목차누구나 쓸 수 있는 HTML레슨 42 / 93

목차

개발자 도구의 Accessibility 창은 고른 요소가 읽는 쪽에 어떻게 건네지는지, 곧 읽는 이름(Name)과 역할(Role)을 보여 줍니다. 검사기가 찾지 못하는 것은 이 창과 점검 목록 한 장으로 사람이 확인합니다.

이 단원에서 본 읽는 이름과 역할은 화면에 보이지 않아, 지금까지는 잰 값 칸으로만 봤습니다. 내 파일에서 같은 값을 읽는 곳이 이 창입니다. 검사기는 HTML을 규칙대로 썼는지는 보지만, alt 글이 그림에 맞는지 · 단추가 Tab으로 닿는지는 보지 않습니다. 이 레슨에서는 창을 여는 길, 검사기가 놓치는 것, 페이지마다 대어 볼 점검 목록 다섯 줄을 봅니다.

5단계 중 1단계. 이 그림 읽는 법: 나무에서 고른 요소의 Name · Role이 곁 창에 뜹니다. 단추는 삭제 · button입니다.

1Accessibility 창 — Name과 Role 읽기

창은 크롬 개발자 도구의 Elements 패널 안에 있습니다. 개발자 도구를 한국어로 보면 창 이름은 '접근성'입니다.

  1. 내 파일을 브라우저로 열고 개발자 도구를 엽니다(개발자 도구로 요소 나무 보기에서 연 길).
  2. Elements 패널의 요소 나무에서 볼 요소를 누릅니다.
  3. 요소 나무 곁 칸에서 Styles 창 이름이 있는 줄의 Accessibility를 누릅니다. 줄에 없으면 그 줄 끝의 » 단추 안에 있습니다.
  4. Computed properties 절의 Name 줄이 읽는 이름, Role 줄이 역할입니다.
<button
  class="delete"
  aria-label="삭제"
>
  ×
</button>
결과 화면
잰 값개발자 도구에서 본 값
  • button의 읽는 이름삭제
  • button의 역할button

이 단추를 고르면 창의 Name 줄에 '삭제', Role 줄에 button이 보입니다. 이 과목의 잰 값 칸 '읽는 이름' · '역할'은 이 두 줄을 옮겨 적은 것입니다. Name은 자료에 따라 접근 가능한 이름이라고도 부릅니다. alt="" 그림처럼 읽는 쪽에 건네지 않는 요소를 고르면, 창에는 이름 대신 건네지 않았다는 줄(Accessibility node not exposed)과 그 까닭이 뜹니다.

2검사기가 보는 것, 사람이 보는 것

<img
  src="images/logo.svg"
  alt="사진"
  width="48"
  height="48"
/>
<p class="big">음료</p>
결과 화면
잰 값개발자 도구에서 본 값
  • img의 읽는 이름사진
  • .big의 역할paragraph

검사기는 이 조각에 Error도 Warning도 내지 않습니다. alt가 있으니 규칙은 지켰고, 그 글 '사진'이 그림에 맞는지는 검사기가 알 수 없습니다. 제목이어야 할 '음료'를 문단으로 쓴 것도 HTML 규칙으로는 틀리지 않았습니다.

검사기가 잡는 것사람이 봐야 하는 것
alt가 없는 imgalt 글이 그림이 전하는 것에 맞나
건너뛴 제목 단계(h2 다음 h4)제목이어야 할 글이 제목 요소인가
main 둘 · 같은 id 둘Tab으로 모든 링크 · 단추 · 칸에 닿나
요소를 담는 규칙(중첩)포커스 표시가 보이나(outline: none도 맞게 쓴 CSS라 검사기는 지나침)

그래서 검사기 Error 0은 점검의 시작이고, 나머지는 아래 점검 목록으로 사람이 봅니다.

3점검 목록 다섯 줄

어느 페이지에나 같은 다섯 줄을 대어 봅니다. 줄마다 그 규칙을 세운 레슨을 달았습니다.

줄볼 것보는 곳
1. 그림뜻 있는 그림은 보이는 것을, 옆 글과 같거나 꾸밈이면 alt="" — alt 제대로 쓰기Elements · Accessibility 창 Name
2. 이름칸 · 단추 · 링크마다 읽는 이름이 있나 — label로 칸에 이름 붙이기 · 글자 없는 단추와 숨긴 라벨Accessibility 창 Name
3. 제목 차례h1 하나 · 단계를 건너뛰지 않음 · 제목은 제목 요소로 — 제목 h1~h6검사기 · Accessibility 창 Role
4. Tab으로 끝까지마우스 없이 모든 링크 · 단추 · 칸에 닿고, 차례가 읽는 차례인가 — 링크와 단추 가르기 · 키보드로 다니기Tab · Shift+Tab
5. 포커스 표시Tab을 누를 때마다 지금 자리가 보이나 — 키보드로 다니기화면

점검은 다 만든 뒤 한 번이 아니라, 페이지에 그림 · 칸 · 단추를 하나 더할 때마다 그 줄만 바로 대어 봅니다.

예제

레시피 페이지의 한 조각입니다. 점검 목록 다섯 줄을 차례로 대어 걸리는 줄과 그 코드 줄을 먼저 적어 본 뒤 결과 화면을 펴 보세요.

<h1>김치볶음밥</h1>
<img
  src="images/kimchi.svg"
  alt="kimchi.svg"
  width="200"
  height="150"
/>
<label for="nick">이름</label>
<input id="nick" />
<div class="btn">후기 남기기</div>
결과 화면 보기
결과 화면
잰 값개발자 도구에서 본 값
  • img의 읽는 이름kimchi.svg
  • input의 읽는 이름이름
  • div의 역할generic
    1. 그림 — 걸립니다(코드 4번 줄). 읽는 이름이 파일 이름 'kimchi.svg'입니다. alt="김치볶음밥 한 그릇"처럼 고칩니다.
    1. 이름 — 지납니다. 칸의 이름은 라벨 글 '이름'입니다.
    1. 제목 차례 — 지납니다. h1 하나뿐입니다.
    1. Tab으로 끝까지 — 걸립니다(코드 10번 줄). '후기 남기기'는 Role이 generic이라 Tab이 닿지 않습니다. <button>후기 남기기</button>⁠으로 고칩니다.
    1. 포커스 표시 — 지납니다. 포커스 표시를 지우는 CSS가 없습니다.

예상과 다르면 그곳이 배울 곳입니다.

자주 틀리는 곳

틀린 생각: 모양을 보고 단추인지 링크인지 점검하면 된다.

<a class="btn">후기 쓰기</a>
<button>담기</button>
.btn {
  background-color: #005bb5;
  color: #ffffff;
}
결과 화면
잰 값개발자 도구에서 본 값
  • a의 역할generic
  • 지금 포커스의 읽는 이름담기

'후기 쓰기'는 단추처럼 칠해져 있어 눈으로 훑으면 지나칩니다. Accessibility 창의 Role은 generic이고, Tab을 누르면 건너뛰어 '담기'로 갑니다 — href가 없는 a입니다.

맞는 규칙: 누르는 것은 모양이 아니라 Role과 Tab으로 점검합니다(점검 목록 4 — 브라우저 규칙 3).

틀린 생각: 칸 옆에 글이 보이면 그 글이 칸의 이름이다.

<p>이름</p>
<input id="nick" />
결과 화면
잰 값개발자 도구에서 본 값
  • input의 읽는 이름(없음)

화면에서는 '이름'이 칸 바로 위에 있지만, 그 글과 칸은 라벨로 짝을 짓지 않았습니다. 창의 Name이 비어, 칸에 들어간 사람은 무엇을 넣는 칸인지 듣지 못합니다.

맞는 규칙: 칸의 이름은 Name 줄로 확인합니다. 글을 이름으로 쓰려면 label의 for와 칸의 id로 짝을 짓습니다(점검 목록 2).

틀린 생각: 점검은 페이지를 다 만든 뒤에 한 번 하면 된다.

레시피 노트의 목록 페이지에는 카드가 여섯 장입니다. 다 만든 뒤 점검하다 카드 그림의 alt가 모두 틀린 것을 찾으면, 여섯 장을 다시 열어 고쳐야 합니다. 같은 틀린 꼴을 복사해 두었기 때문입니다.

맞는 규칙: 그림 · 칸 · 단추를 하나 더할 때마다 그 줄을 바로 점검합니다. 처음 한 장이 맞으면 복사한 다섯 장도 맞습니다.

확인 문제

1. 예제의 4번 줄을 alt="김치볶음밥 한 그릇"으로 고쳤습니다. 이제 점검 목록 다섯 줄 가운데 걸리는 줄을 모두 고르세요. 점검 목록의 번호를 다 쓰세요.

<h1>김치볶음밥</h1>
<img
  src="images/kimchi.svg"
  alt="김치볶음밥 한 그릇"
  width="200"
  height="150"
/>
<label for="nick">이름</label>
<input id="nick" />
<div class="btn">후기 남기기</div>
힌트

다섯 줄을 하나씩 대고, 고친 4번 줄 말고 남은 줄을 봅니다.

정답

점검 목록 4(Tab으로 끝까지) 하나입니다.

결과 화면
잰 값개발자 도구에서 본 값
  • img의 읽는 이름김치볶음밥 한 그릇
  • div의 역할generic
  • 점검 목록 1(그림)은 이제 지납니다. 남은 것은 코드 10번 줄의 div — Role이 generic이라 Tab이 닿지 않습니다.
  • 흔한 오답은 '없음'입니다. 검사기에도 화면에도 문제가 보이지 않아 다 고쳤다고 본 것입니다. 단추처럼 보이는 div는 Tab으로 대어 봐야 드러납니다.

2. Accessibility 창에서 단추의 Name을 읽는 차례입니다. 기호를 차례로 쓰세요.

  • ㉠ Accessibility 창의 Name 줄을 읽는다
  • ㉡ 개발자 도구를 연다
  • ㉢ Elements 패널의 요소 나무에서 단추를 누른다
힌트

창은 어느 패널 안에 있고, 그 패널을 쓰려면 먼저 무엇을 열어야 하는지 봅니다.

정답

㉡ ㉢ ㉠입니다.

창은 Elements 패널에서 고른 요소 하나를 보여 줍니다. 그래서 개발자 도구를 열고, 요소를 고른 뒤, 창을 읽습니다.

3. 등산 동아리 공지입니다. 검사기는 Error도 Warning도 내지 않습니다. 점검 목록 다섯 줄 가운데 걸리는 줄의 번호와, 고칠 코드 줄을 쓰세요.

<h1>등산 동아리</h1>
<p class="title">이번 달 산행</p>
<p>북한산 둘레길</p>
<a href="join.html">가입</a>
.title {
  font-size: 24px;
  font-weight: 700;
}
결과 화면
힌트

점검 목록 다섯 줄을 1번부터 하나씩 이 코드에 대어 봅니다.

힌트 둘

결과 화면에서 제목처럼 보이는 글을 찾고, 그 줄의 요소 이름을 봅니다.

정답

점검 목록 3(제목 차례)에 걸립니다. 코드 2번 줄 <p class="title">을 <h2>로 고칩니다.

<h1>등산 동아리</h1>
<h2>이번 달 산행</h2>
<p>북한산 둘레길</p>
<a href="join.html">가입</a>
결과 화면
잰 값개발자 도구에서 본 값
  • h2의 역할heading
  • '이번 달 산행'은 크고 굵게 그려져 제목처럼 보이지만, Role이 paragraph라 제목 차례에 들지 않습니다(브라우저 규칙 3).
  • 검사기는 문단을 문단으로 썼는지만 보니 이것을 잡지 못합니다. 흔한 오답은 '없음' — 검사기 Error 0을 점검의 끝으로 본 것입니다.

컴퓨터에서 해 보기(선택) — 점수에 들지 않습니다. 폰으로만 보고 있다면 건너뛰세요. 예제 코드를 hello.html의 body 안에 붙여 저장하고 엽니다. 개발자 도구에서 img · input · div를 차례로 골라 Accessibility 창의 Name과 Role을 읽고, 예제의 잰 값 칸과 같은지 견줘 봅니다. 그다음 div를 button으로 고쳐 저장 · 새로고침한 뒤 Role이 어떻게 바뀌는지 봅니다. 그림 파일은 아래에서 받아 images 폴더에 넣습니다.

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

HTML·CSS 목차로