Today I Learned
- 웹 접근성
- 웹 접근성의 개념
- 웹 콘텐츠 접근성 지침
- WAI-ARIA
모든 사용자가 신체적·환경적 조건에 관계없이 웹 사이트에서 제공하는 정보를 동등하게 이용할 수 있도록 보장하는 것
웹 접근성을 준수하는 것은 법적 의무사항이다. 또한 신체적 조건 뿐만 아니라 환경적 조건에 따라 비장애인도 정보 접근에 불편함을 겪을 수 있다.
웹 접근성을 갖추기 위해서 노력하면 정보의 평등에 다가갈 수 있는 것은 물론이고, 그 외에도 여러 가지 효과를 기대할 수 있다.
웹 접근성을 갖추면 얻을 수 있는 효과
W3C 웹 접근성 권고안 ‘WCAG(Web Content Accessibility Guidelines) 2.0’을 기반으로 한국 실정에 맞게 조금 수정한 것이다. 웹 접근성을 잘 확보했는지 판단하는 기준이 되며 그 내용은 아래와 같다.
각 지침 및 관련 사례 참고 : 널리(NULI)
1. 적절한 대체 텍스트
텍스트가 아닌 콘텐츠는 그 의미나 용도를 이해할 수 있도록 대체 텍스트를 제공해야 한다.
alt
속성<img src="이미지 주소" alt="대체 텍스트" />
2. 자막 제공
멀티미디어 콘텐츠에는 자막, 원고 또는 수화를 제공해야 한다.
<video>
의 자식요소로 <track>
를 사용해 자막 파일 불러오기<video ... >
<track src="자막.vtt" kind="captions" />
</video>
3. 색에 무관한 콘텐츠 인식
콘텐츠는 색에 관계 없이 인식될 수 있어야 한다.
4. 명확한 지시사항 제공
지시사항은 모양, 크기 위치, 방향, 색, 소리 등에 관계없이 인식될 수 있어야 한다.
5. 텍스트 콘텐츠 명도 대비
텍스트 콘텐츠와 배경 간 명도 대비는 4.5 대 1 이상이어야 한다.
6. 자동 재생 금지
자동으로 소리가 재생되지 않아야 한다.
7. 콘텐츠 간 구분
이웃한 콘텐츠는 구별될 수 있어야 한다.
8. 키보드 사용 보장
모든 기능은 키보드만으로도 사용할 수 있어야 한다.
9. 초점 이동
키보드에 의한 초점은 논리적으로 이동해야 하며 시각적으로 구별할 수 있어야 한다.
10. 조작 가능
사용자 입력 및 컨트롤은 조작 가능하도록 제공되어야 한다.
11. 응답 시간 조절
시간 제한이 있는 콘텐츠는 응답시간을 조절할 수 있어야 한다.
12. 정지 기능 제공
자동으로 변경되는 콘텐츠는 움직임을 제어할 수 있어야 한다.
13. 깜빡임과 번쩍임 사용 제한
초당 3~50회 주기로 깜빡이거나 번쩍이는 콘텐츠를 제공하지 않아야 한다.
14. 반복 영역 건너뛰기
콘텐츠의 반복되는 영역은 건너뛸 수 있어야 한다.
15. 제목 제공
페이지, 프레임, 콘텐츠 블록에는 적절한 제목을 제공해야 한다.
16. 적절한 링크 텍스트
링크 텍스트는 용도나 목적을 이해할 수 있도록 제공해야 한다.
17. 기본 언어 표시
주로 사용하는 언어를 명시해야 한다.
<html>
요소에 lang
속성을 사용하여 제공lang
속성을 사용<html lang="ko">
18. 사용자 요구에 따른 실행
사용자가 의도하지 않은 기능(새 창, 초점에 의한 맥락 변화 등)은 실행되지 않아야 한다.
<a href="...">페이지<span class="blind">새 창</span></a>
title
속성으로 새 창 작성<a href="..." title="새 창">페이지</a>
target="_blank
속성 작성<a href="..." target="blank">페이지</a>
19. 콘텐츠 선형 구조
콘텐츠는 논리적인 순서로 제공해야 한다.
<div>탭1</div>
<div>탭1 관련 내용</div>
<div>탭2</div>
<div>탭2 관련 내용</div>
20. 표의 구성
표는 이해하기 쉽게 구성해야 한다.
<table>
의 자식요소로 caption
요소를 사용해서 표의 제목 제공<table><caption>공지사항<span>제목, 작성일, 조회의 정보 제공</span></cation></table>
<th>
, 데이터 셀은 <td>
를 사용한다.scope
혹은 id
와 headers
속성을 사용해 작성한다.21. 레이블 제공
사용자 입력에는 대응하는 레이블을 제공해야 한다.
<input>
요소에 value
나 placeholer
속성만 설정하는 것은 부적합<input type="text" placeholder="아이디" /> ❌
<input>
요소에 id
를 설정하고 <label>
요소의 for
속성으로 연결<label for="user_id">아이디</label>
<input id="user_id" type="text" placeholder="아이디" /> ⭕️
<input>
요소에 title
속성 사용<input type="text" title="아이디" placeholder="아이디" /> ⭕️
<input>
요소에 WAI-ARIA의 aria-label
속성 사용<input type="text" aria-label="아이디" placeholder="아이디" /> ⭕️
22. 오류 정정
입력 오류를 정정할 수 있는 방법을 제공해야 한다.
23. 마크업 오류 방지
마크업 언어의 요소는 열고 닫음, 중첩 관계 및 속성 선언에 오류가 없어야 한다.
<div><span> ❌
<div><span></span></div> ⭕️
<div><span></div></span> ❌
<div><span></span></div> ⭕️
<div class="중복" class="사용함"></div> ❌
<div class="중복아님"></div> ⭕️
<div id="id"><span id="id"></span></div> ❌
24. 웹 애플리케이션 접근성 준수
콘텐츠에 포함된 웹 애플리케이션은 접근성이 있어야 한다. 접근성을 갖추지 못한 경우에는 대체 수단이나 텍스트를 제공해야 한다.
WAI에서 발표한 RIA 환경에서의 웹 접근성 기술 규격
HTML 요소에 추가적으로 의미를 부여할 수 있어, 보조적으로 사용하면 웹 접근성을 향상시킬 수 있다.
WAI-ARIA의 속성은 크게 역할(role), 상태(state), 속성(property) 세 가지로 분류할 수 있다.
1. 역할
HTML의 요소와 역할이 서로 맞지 않을 때, 어떤 역할을 하는 요소인지 명시해 줄 때 사용할 수 있다.
role
속성의 사용 예시<div>
요소를 사용<div role="button">div button</div>
<div role="tabList">
<li role="tab">Tab1</li>
<li role="tab">Tab2</li>
<li role="tab">Tab3</li>
</div>
<div role="tabpanel">Tab menu ONE</div>
<div role="tabpanel">Tab menu TWO</div>
<div role="tabpanel">Tab menu THREE</div>
role
속성이 잘못 사용된 예시<!-- HTML 요소만으로 의미가 충분히 부여된 경우 -->
<button role="button">button</button> ❌
<!-- 시맨틱 요소 본연의 의미를 임의로 바꾸는 경우 -->
<h1 role="button">h1</h1> ❌
2. 상태
aria-selected
속성 : 여러 개의 선택 가능한 요소 중에서 선택 상태인 요소 표시<div role="tabList">
<li role="tab" aria-selected="true">Tab1</li>
<li role="tab" aria-selected="false">Tab2</li>
<li role="tab" aria-selected="false">Tab3</li>
</div>
<div role="tabpanel">Tab menu ONE</div>
<div role="tabpanel">Tab menu TWO</div>
<div role="tabpanel">Tab menu THREE</div>
aria-expanded
속성 : 아코디언 UI가 펼쳐진 상태인지 표시aria-hidden
속성 : 요소가 숨김 상태인지 표시3. 속성
aria-label
속성 : 요소에 레이블을 정의 (대체 텍스트 역할)
<button aria-label="닫기"/> <img src="X.png" /> </button>
<button aria-label="검색"/> <img src="돋보기.png" /> </button>
aria-live
속성 : 해당 요소가 실시간으로 내용을 갱신하는 영역인지 표시
alert
, modal
, dialog
같이 브라우징 도중에 내용을 띄우는 요소이거나, AJAX 기술을 사용하여 실시간으로 내용을 갱신하는 영역에 사용aria-live
속성 값은 polite
, assertive
, off(default)
가 있다.polite
: 스크린 리더가 현재 읽고있는 내용을 모두 읽고나서 갱신된 내용을 사용자에게 전달assertive
: 스크린 리더가 현재 읽고있는 내용을 중단하고 갱신된 내용을 바로 사용자에게 전달WAI-ARIA 관련 레퍼런스