WAI-ARIA

WAI-ARIA 실전 Note

프로필 사진

지성봉

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

예제로 살펴보는 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
Listen Carefully
web accessibility initiative accessible rich iinternet application
Listen Carefully again

How to apply WAI-ARIA?

WAI-ARIA rules

native HTML 요소/속성 사용

의미를 가진 native HTML element/attribute가 있다면, ARIA role, state, property를 추가하는 대신 native를 사용

<!-- 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> 

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>

키보드 사용 가능

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'.
*/

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|assertive|lude"
개체에 label을 제공해야 한다면?
use aria-label | aria-labelledby

state

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

keyboard interaction

Custom Components

combobox - keyboard interaction
상/하 방향키 : 목록 위/아래 포커스 이동
Alt + 상/하 방향키 : 목록 열기/닫기
ESC 키 : 드롭다운 목록 닫기
Enter 키 : 현재 항목 선택
Page Up/Down : 이전/다음 페이지

대다수 UI의 keyboard interaction은 W3C 문서에 기술

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

WAI-ARIA는 접근성을 더 높이기 위한 수단

어디까지나 기본은 semantic markup

WAI-ARIA 사례집 수록 코드
mulder21c's aria-examples

reference URL

ARIA 1.0 Rec (W3C)
https://www.w3.org/TR/wai-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/
hacosa 세미나 - WAI-ARIA 발표 자료
http://seminar1505.publisher.name

Contact

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