회사에서 개발하는 제품이 대체적으로 앱이라서 모바일 접근성에 대해 알아둘 필요가 있다고 하여 접근성에 기본인 스크린리더기에 대해 MDN문서를 찾아봤다
talkback
은 안드로이드에 내장되어있는 스크린리더다
하지만 안드로이드 버전에 따라 심지어 핸드폰모델에 따라 크게 다른 경향이 있다
그리고 제조사에 따라(예를 들어 삼성
)같은 경우에는 talkback
을 넣지 않고 자체 제작한 스크린리더를 넣는 경우도 있다
talkback
을 키게되면 일반적인 동작방식과는 조금 다르게 변하게 되는데 예를 들면
tab
, shift + tab
을 한 것처럼 다음 혹은 이전으로 이동하거나 음량조절과 같은 slider
등의 경우에는 일정 값이 증가 혹은 감소한다애플제품도 대부분 비슷한데 다른점이 있다면
HTML tag를 제대로 쓰는 것 만으로도 접근성이 꽤 많이 향상되는데 예를 들어
<div>Play video</div>
은 아무런 의미를 전달해주지 않는다
그저 Play video
라는 텍스트를 보고 '버튼인가?' 하고 짐작해야 한다
<button>Play video</button>
하지만 이렇게 button tag를 사용하면 의미가 보다 명확해진다
HTML tag는 이렇게 의미만 전달하는 태그가 아니다
tab
키를 사용할 때 포커싱되는 태그들이 정해져있다
div
는 탭키로 접근을 할 수 없지만 button
은 접근할 수 있다
div
도 탭키로 접근할 수 있게 만들 수 있는데 이를 위해 tanindex
attribute가 필요합니다
<div tabindex="0">Play video</div>
기본적으로 tabindex
는 포커스가 가게 하는 것과 포커스를 가지 않게 하는 것 두가지를 할 수 있다
tabindex="0"
은 포커스가 가게 설정하며, tabindex="-1"
은 포커스가 가지 않게 설정된다
즉, div
같은 경우는 기본값이 tabindex="-1"
이고 button
의 경우는 tabindex="0"
인 것이다
이렇게 기본값이 있는 attributes들을 global attributes라고 부른다
tabindex
를 양수로 하게되면 탭의 순서를 지정해 줄 수 있다
숫자는 낮을수록 우선순위가 높다
Web Accessibility Initiative - Accessble Rich Internet Applications의 약자로 W3C에 의해 제정된 RIA의 웹 접근성에 대한 표준 기술 규격을 의미한다
RIA
란 정적인 HTML, 단순한 js 환경이 아닌 동적인 js와 ajax와 같은 기술을 사용한 수준 높은 UX 환경을 제공하는 웹앱을 말한다
웹앱의 기술이 발전하면서 점점 더 복잡한 문제를 직면하게 되었는데 예를 들면
<input type="date">
<input type="range">
위와 같은 태그들은 크로스브라우징이 안되는 경우가 많았다
또한 생김새도 브라우저마다 다르기때문에 대부분의 개발자들이 라이브러리에 의존하였으며 때문에 무수히 많은 div
로 감싸진 결과물이 탄생했다
이러만 결과물의 가장 큰 문제점은 시각적으로는 문제가 없지만 스크린리더에서는 개판(?)이라는 거다
이러한 문제점을 해결하기 위해 태어난 WAI-ARIA
의 세가지 주요 기능이 있는데
Roles
영어의 뜻대로 '역할' 을 정의한다
roles
중에 많은 것들이 HTML5 구조와 겹치는데 (예를 들어 role="navigation"은 nav
태그와 겹침) 이외에도 search
, tablist
, tab
등 다양한 역할들이 있다
Properties
element의 propertiy를 정의하고 element들에게 추가적인 의미를 부여한다
(예를 들어 aria=required="true"
는 양식을 채워줘야 한다는 의미를 부여해준다)
States
properties
중 특별한 properties
로 element의 현재 조건을 정의한다
(예를 들어 aria-disabled="true"
, 이는 화면판독기에서 읽히지 않는다)
일반적인 properties
와의 가장 큰 차이점은 자바스크립트를 사용해 상황에 맞게 변경한다는 점이다
모바일 접근성을 위해서는 모바일 OS의 특성을 잘 파악해야하며
웹 접근성 또한 잘 알아둬야한다
웹 접근성에서 tabindex
, aria-*
, role
의 역할을 잘 파악하고 semantic tag를 적극 활용하여 스크린리더기와 실제 보여지는 사이트가 동일하게 느껴지도록 해야한다