
WAI-ARIA 는 웹 콘텐츠와 애플리케이션의 접근성과 상호 운용성을 향상시키기 위한 프레임워크를 제공하는 기술 사양이다.
웹 접근성의 영역은 장애인이 웹 콘텐츠를 사용할 수 있도록 하는 방법을 정의한다.
장애를 가진 사용자가 웹 콘텐츠와 웹 어플리케이션(특히 JavaScript를 사용하여 개발한 경우)에 더 쉽게 접근할 수 있는 방법을 정의하는 여러 특성이 있다.
⇒ WAI-ARIA는 역할, 속성, 상태 정보를 동적 웹 애플리케이션에 추가함으로써 어플리케이션으로 선언할 수 있게 한다.
(몇가지 role의 종류)role="tooltip" : 초점을 받으면 노출되는 컨텐츠 혹은 참고용 컨텐츠의 역할을 부여한다.
role="tablist" : role="tab"과 함께 사용되는 복합형 Role속성이며 요소에 탭목록 역할을 부여한다.
role="tab" : role="tablist"의 자식속성으로 사용되며 탭 역할을 부여한다.
role="tabpanel" : 탭의 본문 역할을 부여한다.
role="alert" : alert 역할은 사용자에게 동적인 변화를 알려줄 때 사용한다.
탭 버튼을 작업할 때 단순히 <ul>, <li>, <a> 태그로 탭을 구성한다.
WAI-ARIA role="tabList", role="tab", role="tabpanel"로 스크린 리더기 사용자에게
더 정확한 정보를 제공할 수 있다.
탭 메뉴 WAI-ARIA 적용 전 : 페이지를 이동하는 "링크" 태그로서의 의미만을 정보만 전달한다.
탭 메뉴 WAI-ARIA 적용 후 : 버튼의 역할이 "탭"이라고 명시해주고, 선택된 요소 정보도 함께 전달해줄 수 있다.
// 예시
<a>버튼</a>
<button role="button">버튼 </button>
WAI-ARIA 적용 전 : 페이지를 이동하는 “링크"태그로써의 의미를 가진 정보를 전달한다.
WAI-ARIA 적용 후 : 버튼의 역할이 “tab”이라고 명시하며 선택된 요소 정보도 전달한다.
(몇가지 role의 종류)
aria-controls : 현재 요소가 제어하는 대상을 명시하는 속성으로 탭메뉴와 본문을 연결시켜준다.
상태 값은 tabpanel의 id명 입력
aria-labelledby : 레이블 제공을 위한 aria-속성. 상태 값은 연결시킬 레이블 id를 입력한다.
aria-describedby : aria-labelledby가 label을 제공하는 것과 같은 방식 DOM에서 숨겨지거나
보조 기술에서 숨겨졌는지에 상관 없이, 다른 방법으로는 보이지 않는 요소를 참조할
수 있다.
* aria-labelledby 은 aria-label 과 비슷하지만 다르게 사용된다.
aria-label 은 어떤 요소에 대한 설명을 직접 적는 반면, aria-labelledby 은 다른 요소의 ID 값을
매칭


aria-selected 사례

aria-haspopup사례
aria-expanded=“true”
아코디어 메뉴 WAI-ARIA 적용 전 : 아코디언 버튼 메뉴가 활성화/비활성화 상태에 대한 정보를 알 수 없다.
아코디어 메뉴 WAI-ARIA 적용 후 : 아코디언 버튼 메뉴가 활성화됐을 경우, “확장됨, 축소됨"으로 상태 정보를 전달해줄 수 있다.


Accessibility tree 예시

https://timwright.org/blog/2016/11/19/difference-rolepresentation-aria-hiddentrue/
레진코믹스
HTML 명세 만으로는 javascript로 인한 비동기 요소들에대한 접근성 지원에 제약이 있다. 레진코믹스에서는 WAI-ARIA 명세를 만들어 재사용 가능하며 개발 구성원이 접근성을 고려한 웹 컨텐츠 제작에 효율성을 가져 올 수 있도록 가이드라인을 만들었다.
총 25개의 항목으로 구성되어 있는 해당 가이드라인과 레진 코믹스에서 서비스 중인 WAI-ARIA 사례를 대표적인 특징점 위주로 정리해보려고 한다.



로그인 입력 폼에서 이메일 실패 안내 메시지를 제공하기 위해 사용중이다.
input의 aria-error-message와 p id 속성를 연결한다.
aria-error-message 이외에도 다른 aria-* 속성으로 다양한 정보를 명시할 수 있다.
**role='status**' 속성으로 전달하고 있다.

오류(제안) 메세지
시간에 민감하고 중요한(오류, 제안) 메시지를 사용자에게 전달하는 컨텐츠이다.
로딩 아이콘을 role='alert'으로 사용하고 있다는 것을 확인 했다.
사용자 인터렉션 window 역할
role="alertdialog ⇒ 사용자 동의 , 확인 등 인터랙션 요소를 포함한 상태로 다른 과업을 차단하는 경우
alert 대화상자는 다름 과업을 차단해야 하기 때문에 모달 윈도우 스타일로 처리하고 aria-modal=”true’속성을 추가한다.
`role="dialog" ⇒ 사용자가 입력하거나 응답하려는 내용

탐색
aria-current 속성은 현재 맥락과 일치하는 항목을 의미한다.
탭 목록에서 현재 페이지인 랭킹 항목을 aria-current="page" 속성으로 명시해주고 있다.
Nexflix Clone 팀프로젝트의 accordion코드에 WAI-ARIA를 적용한 모습

<a role=”button”>
WAI-ARIA에 대해 조사하며, 우리는 접근성이 지켜지지 않은 사이트부터 접근성에 많은 노력을 기울인 사이트들까지 다양한 사례를 보았다.
접근성을 공부하기 전엔 보이지 않았던 것들이 보이기 시작했고, 우리가 개발자라는 직업을 바라보고 성장하면서 무엇을 지켜야 하는지에 대한 기준이 조금 더 명확해졌다. 과제에만 그치는 것이 아니라 계속해서 사용하는 연습을 하며 접근성을 높이기 위해 노력해야겠다는 생각이 우리 조원의 결론이다.
참고 자료 |
https://www.w3.org/TR/wai-aria-1.1/#usage_intro
https://ko.wikipedia.org/wiki/WAI-ARIA
https://tech.lezhin.com/2018/04/20/wai-aria
https://developer.mozilla.org/ko/docs/Web/Accessibility/ARIA/Roles/dialog_role
https://github.com/lezhin/accessibility/blob/master/aria/README.md#html
https://developer.mozilla.org/enUS/docs/Web/Accessibility/ARIA/ARIA_Techniques#widget_roles