WAI๋ W3C์์ ์น ์ ๊ทผ์ฑ์ ๋ด๋นํ๋ ๊ธฐ๊ด.
ARIA๋ RIA ํ๊ฒฝ์ ์น ์ ๊ทผ์ฑ์ ๋ํ ํ์ค ๊ธฐ์ ๊ท๊ฒฉ์ ์๋ฏธํจ.
์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฑ ๋ณด์กฐ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฅ์ ์ธ์ด RIA ๊ธฐ์ ๋ก ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋๋ก ์ฌ์ฉํ ์ ์๊ธฐ๋๋ฌธ์ RIA ๊ธฐ์ ์ด ์ ๊ทผ์ฑ์ ์ทจ์ฝํ๋ค๋ ๋นํ์ ๋ฐ์์์.
์ด์ W3C(World Wide Web Consortium, ์ดํ W3C)์์๋ ์น ์ฝํ ์ธ ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ์ฑ๊ณผ ์ํธ ์ด์ฉ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ธฐ์ ๋ช ์ธ๋ฅผ ๋ฐํํ๋๋ฐ ์ด ๋ช ์ธ๊ฐ ๋ฐ๋ก WAI-ARIA(Web Accessibility Initiative - Web Accessible Rich Internet Applications, ์ดํ WAI-ARIA)์.
WAI-ARIA๋ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฐ ๋ณด์กฐ ๊ธฐ๊ธฐ ๋ฑ์์ ์ ๊ทผ์ฑ ๋ฐ ์ํธ ์ด์ฉ์ฑ์ ํฅ์์ํค๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ํ์ํ์ผ๋ฉฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญํ (Role), ์์ฑ(Property), ์ํ(State) ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ์ด๋ฅผ ๊ฐ์ ํ ์ ์๋๋ก ์ ๊ณตํ๊ณ ์์
2014๋ 3์ 20์ผ WAI-ARIA๋ W3C ๊ถ๊ณ ์์ผ๋ก ์ง์ ๋์์ผ๋ฉฐ, WAI-ARIA ๋ช ์ธ์ ์ผ๋ถ๋ HTML5 ๋ช ์ธ์ ํตํฉ๋จ.
ARIA๋ HTML ํ๊ทธ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ฃผ๋ ๋ณด์กฐ ๊ธฐ์ ๋ก์ ์๋์ ๋ด์ฉ์ ์ฃผ์ํ์ฌ WAI-ARIA๋ฅผ ์ฌ์ฉํด ์ฃผ์ธ์.
| HTML5 Section tag | Landmark Role | ์ค๋ช |
|---|---|---|
<nav> | role="navigation" | ๋ค๋ฅธ ํ์ด์ง ๋๋ ํ์ด์ง ๋ด ํน์ ์์ญ์ผ๋ก ์ด๋ํ๋ ๋งํฌ ์ฝํ ์ธ ์์ญ(๋ฉ์ธ ๋ฉ๋ด ํน์ ์๋ธ ๋ฉ๋ด๋ก ์ฌ์ฉ) |
<main> | role="main" | role="main"๋ณธ๋ฌธ์ ์ฃผ์ ์ฝํ
์ธ ์์ญ.ํ ํ์ด์ง ๋ด์ 1๊ฐ๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ,<article>,<aside>,<footer> ์์์ ํ์ ์์๋ก ์ฌ์ฉํ ์ ์๋ค |
<aside> | role="complementary" | ์ฃผ์ ์ฝํ ์ธ ์ ์ฐ๊ด์ด ์ ์ ์๋ฏธ ์๋ ์ฝํ ์ธ ์์ญ (์) ๋ ์จ, ์ฃผ์ |
<form> | role="form" | ๊ฐ์ด๋ฐ |
X | role="application" | <div> ์์์ ๊ฐ์ด ๊ทธ๋ฃน ์ญํ ์ ํ๋ ์์๋ก ๋์ฒด |
X | role="banner" | <header> ์์์ ๋น์ทํ ์๋ฏธ. <header role="banner">๋ก ์ฌ์ฉ ์ ํ์ด์ง๋ณ ํ ๋ฒ๋ง ์ฌ์ฉ |
X | role="search" | ๊ฒ์์ ์ญํ ์ ๋ด๋นํ๋ ์์ ์์ญ <div>๋๋ <form> ์์ ์ฌ์ฉ ๊ถ์ฅ |
X | role="search" | ๊ฒ์์ ์ญํ ์ ๋ด๋นํ๋ ์์ ์์ญ <div> ๋๋ <form> ์์ ์ฌ์ฉ ๊ถ์ฅ |
X | role="contentinfo" | <footer> ์์์ ๋น์ทํ ์๋ฏธ <footer role="contentinfo">๋ก ์ฌ์ฉ ์ ํ์ด์ง๋ณ ํ ๋ฒ๋ง ์ฌ์ฉ |
์ฌ์ฉ์์ ์ํธ ์์ฉ์ด ํ์ํ ๋ํํ UI์ ๊ฒฝ์ฐ ํค๋ณด๋๋ก๋ ์ ๊ทผ ๋ฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ์ ๊ณตํ์ฌ์ผ ํ๋ค.
์ฌ๊ธฐ์ ์ํธ ์์ฉ์ด ํ์ํ ๋ํํ UI๋ ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ์ ์๋ ์ ๋ณด๋ ํญ ๋๋ ๋๋๊ทธ ์ค ๋๋กญ, ์ฌ๋ผ์ด๋, ์คํฌ๋กค ๋ฑ์ ๊ธฐ๋ฅ์ด ํ์ํ ์ฝํ ์ธ ๋ฅผ ์๋ฏธํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํค๋ณด๋๋ก ์ ๊ทผํ ์ ์๋ HTML ์์์ ๊ฒฝ์ฐ tabindex ์์ฑ์ ์ฌ์ฉํ์ฌ ํค๋ณด๋๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ ์ ์์.
๋ํ tabindex ์์ฑ์ 0์ ์ง์ ํ๋ฉด ์ฝํ ์ธ ์ ์ ํํ ์์๋๋ก ์ ๊ทผํ ์ ์๊ณ 0๋ณด๋ค ์์ ๊ฐ์ ์ง์ ํ๋ฉด ํค๋ณด๋๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ ํ ์ํ๊ฐ ๋๋ค.
<!-- ํค๋ณด๋๋ก ์ ๊ทผ ๊ฐ๋ฅ -->
<span role="button" tabindex="0">๋ฒํผ</span>
<!-- ํค๋ณด๋๋ก ์ ๊ทผ ๋ถ๊ฐ๋ฅ -->
<span role="button" tabindex="-1">๋ฒํผ</span>
์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋จ์ํ ํ๋ฉด์์๋ง ๋ณด์ด์ง ์๋๋ก ์ฒ๋ฆฌ๋ ์ฝํ ์ธ ์ aria-hidden=โtrueโ๋ฅผ ์ง์ ํด์๋ ์๋๋ค.
๋จ์ํ ๊ฐ์์ ์ผ๋ก๋ง ์จ๊ธด ์ฝํ ์ธ ์ ํน์ role์ ๋ถ์ฌํ๋๋ผ๋ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฑ์ ๋ณด์กฐ ๊ธฐ๊ธฐ์์๋ aria-hidden=โtrueโ๋ก ์ง์ ๋ ์ํ๋ผ๋ฉด ์๋ฏธ์ ์ผ๋ก๋ ์จ๊ฒจ์ง ์ฝํ ์ธ ๋ก ์ธ์ํ๊ฒ ๋๋ค.
๋ํ ์ด์ ๋น์ทํ๊ฒ ํน์ ํ ์๋ฏธ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์์์ presentation์ด๋ none์ ์ญํ (Role)์ ์ง์ ํ์ฌ์๋ ์๋๋ค.
์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฑ์ ๋ณด์กฐ ๊ธฐ๊ธฐ๋ role=โpresentationโ, role=โnoneโ์ผ๋ก ์ง์ ๋ ์์๋ฅผ ์๋ฏธ ์์ด ๋จ์ํ ๊ฐ์์ ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํ ์์๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
aria-hidden=โtrueโ๋ฅผ ์ฌ์ฉํ์ฌ ์จ๊น ์ฝํ ์ธ ์ ๋ํ ์ฌ์ฉ์์ ์ ๊ทผ์ ์ฐจ๋จํ๊ณ ์ ํ ๊ฒฝ์ฐ CSS์ display ์์ฑ์ none ๊ฐ์ ์ง์ ํ์ฌ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฑ์ ๋ณด์กฐ๊ธฐ ๊ธฐ์์ ์ ๊ทผํ ์ ์๋๋ก ํ๊ณ ariahidden=โtrueโ์ ๋ช ์ํด์ผ ํ๋ค.
๋ชจ๋ ๋ํํ UI์ ๊ฒฝ์ฐ ๋ฐ๋์ ๋ ์ด๋ธ์ ์ ๊ณตํ์ฌ์ผ ํฉ๋๋ค. ๋ ์ด๋ธ ์ ๊ณต์ ์ํด HTML์ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ฉฐ WAI-ARIA ๊ด๋ จ ์์ฑ์ผ๋ก aria-label, aria-labelledby ๋ฑ์ ์ฌ์ฉํ์ฌ ์ ๊ทผ ๊ฐ๋ฅํ ์ด๋ฆ์ ์ ๊ณตํ ์๋ ์์ต๋๋ค.
<!-- ๋ ์ด๋ธ ์์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ -->
<div class="container">
<label for="user-name">์ด๋ฆ</label>
<input type="text" id="user-name">
</div>
<!-- aria-label, aria-labelledby ์์ฑ์ ์ฌ์ฉํ ๊ฒฝ์ฐ -->
<div>
<div id="user-name">์ด๋ฆ</div>
<input type="text" aria-labelledby="user-name">
</div>
<button aria-label="๋ซ๊ธฐ"> X </button>
WAI-ARIA๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ์๋งจํฑ ์์์ ์ถฉ๋๋์ง ์๋๋ก ํ๋ ๊ฒ์ด ํ์ํ๋ค.
๊ฐ๋ น ํค๋ฉ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ <h1> ์์์ role=โbuttonโ์ ๋ถ์ฌํ๋ฉด ํด๋น ์์์ ์ ์ ํ์ง ์์ ์์ฑ์ ์ฌ์ฉํ๋ค๋ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ๊ฒฝํํ๊ฒ ๋ ๊ฒ์ด๋ค.
๋๋๋งํฌ(Landmark Role)๋ ์น ํ์ด์ง์์ ์ ๊ณต๋๋ ์ฝํ ์ธ ์ ํ์ด ์ด๋ค ์ญํ ์ ํ๋์ง ์๋ณํ ์ ์๋๋ก ๋์์ฃผ๋ ํ์งํ ๊ธฐ๋ฅ์ผ๋ก ๊ธฐ์กด ์น์ ๊ทผ์ฑ ์ง์นจ์์ ์๊ตฌํ๊ณ ์๋ ๊ฑด๋๋ฐ๊ธฐ ๋งํฌ์ ๋ฐ์ ๋ ๋ชจ์ต์ด๋ฉด์ ์ฝํ ์ธ ๋ธ๋ก์ ์ ๋ชฉ ์ ๊ณต๋ณด๋ค ๋ช ํํ ์์ญ ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ ๊ฐ์ง๋ค.
<div class="container">
<div role="banner">banner</div>
<div role="navigation">navigation</div>
<div role="main">
<div role="application">application</div>
</div>
<div class="complementary">
<div role="search">search</div>
<div role="form">form</div>
</div>
<div role="contentinfo">contentinfo</div>
</div>