WAI-ARIA

이제는 실전이다

프로필 사진

지성봉 (멀더끙)

콘텐츠연합플랫폼(주) 퍼블리셔

예제로 살펴보는 WAI-ARIA’ 집필진

들어가기에 앞서...

HTML의 목적

HTML was primarily designed as a language for semantically describing scientific documents.

What is Semantic

Elements, attributes, and attribute values in HTML are defined to have certain meanings (semantics).

Accessibillity - Semantic

Semantic information carried by HTML elements and attributes is integral to making content on the web accessible

This is the base, starting here.

Why WAI-ARIA?

한국형 웹 콘텐츠 접근성 지침 2.1
4개 원칙, 13개 지침, 24개 검사 항목
접근성 검사 결과보고서 캡쳐화면
Listen Carefully
web accessibility initiative accessibile rich iinternet application
Listen Carefully again

How to apply WAI-ARIA?

just Attributes

ARIA is a set of attributes that you can add to HTML elements.

add any role

<input type="text" role="combobox">

add any property

<input type="text" role="conbobox" aria-haspopup="true">

add any state

<input type="text" 
		role="conbobox" aria-haspopup="true" aria-expanded="false">

4 rules of ARIA use

1. native HTML 요소/속성 사용

ARIA role, state, property를 추가하는 대신, native HTML element/attribute 를 사용

<!-- If not possible to use the correct element, use this -->
<span role="button">버튼</span>

<!-- If possible to use the correct element, use this -->
<button type="button">버튼</button> 

<!-- If not possible to use the correct element/attribute, use this -->
<input type="text" name="usrId" id="usrId" aria-label="아이디">

<!-- If possible to use the correct element/attribute, use this -->
<label for="usrId" class="hidden-accessible">아이디</label>
<input type="text" name="usrId" id="usrId">

2. native semantic을 변경 금지

정말로 그래야 하는 것이 아닌 이상, native semantic을 변경하지 말아야 함.

<!-- Do not do this -->
<h1 role=button>heading button</h1>

<!-- Do this -->
<h1><button type="button">heading button</button></h1>

<!-- If not possible to use the button element -->
<h1><span role=button>heading button</span></h1>

3. 키보드 사용 가능

click, tap, drag, drop, slide, scroll 등의 user interaction은 키보드로도 동등한 동작이 가능해야 함.

<span role="button" aria-pressed="false">좋아요</span>
/*
 * required keyboard interaction
 *  - button must be focusable
 *  - when on focus the button, presssing Enter or Space key
 *    activates (or deactivates) the button
 *  - when the button activated, sets 'aria-pressed' to 'true', 
 *    otherwise 'false'.
 */

4. visible focusable 요소를 의미를 없애거나 숨겨진 요소로 인식하지 않도록

키보드 접근이 가능한 요소가 인식될 수 없다면 오류

<!-- Do not do this -->
<button type="button" role="presentation">좋아요</button>
<button type="button" aira-hidden="true">좋아요</button>

appropriate role / property / state

Role

대화상자 UI를 만들고 있다면?
use dialog role
탭 UI를 만들고 있다면?
use tablist / tab / tabpanel role
경고 알람 UI를 만들고 있다면?
use alert role

property

컴포넌트가 하위 메뉴를 가진다면?
use aria-haspopup="true"
실시간으로 변경되는 컴포넌트라면?
use aria-live="polite"
개체에 label을 제공해야 한다면?
use aria-labelledby="anyId"

state

컴포넌트가 숨김 상태라면?
use aria-hidden="true"
컴포넌트가 펼침 상태라면?
use aria-expanded="true"
컴포넌트가 눌림 상태라면?
use aria-pressed="true"

keyboard interaction

checkbox
space 키 : check 상태 변경
combobox
상/하 방향키 : 목록 위/아래 포커스 이동
alt + 상/하 방향키 : 목록 열기/닫기
esc 키 : 드롭다운 목록 닫기
enter 키 : 현재 항목 선택
page up/down : 이전/다음 페이지

대다수 UI의 키보드 인터랙션 요구사항이 W3C 문서에 기술

WAI-ARIA Authoring Practices 1.1
실제 적용해 보자

예제로 살펴보는 WAI-ARIA 사례집
WAI-ARIA 사례집 수록 코드
mulder21c's aria-examples

어디까지나 기본은 semantic markup

WAI-ARIA는 기본으로 부족한 것을 보완하기 위한 수단

reference URL

ARIA 1.0 Rec (W3C)
https://www.w3.org/TR/wai-aria/
ARIA in HTML WD (W3C)
https://www.w3.org/TR/html-aria
Notes on Using ARIA in HTML WD (W3C)
https://www.w3.org/TR/aria-in-html/
WAI-ARIA Authoring Practices 1.1 WD (W3C)
https://www.w3.org/TR/wai-aria-practices-1.1/
WAI-ARIA
http://seminar1505.publisher.name
WAI-ARIA and HTML Accessibility API Mappings
https://www.w3.org/TR/html51/dom.html#wai-aria
https://mulder21c.github.io/html/dom.html#wai-aria (번역본)

Contact

E-Mail
publisher@publisher.name
github
github.com/mulder21c/aria-examples