WAI-ARIA ๋?
WAI์์ ๋ฐํํ RIA ํ๊ฒฝ์์์ ์น ์ ๊ทผ์ฑ ๊ธฐ์ ๊ท๊ฒฉ,
์งง๊ฒ, ์น ์ ๊ทผ์ฑ์ ํฅ์์ํฌ ์ ์๋ ๋ฐฉ๋ฒ ์ค ํ๋
WAI (web accessibility initiative) = ์น ํ์ค์ ์ ํ๋ W3C์์ ์น ์ ๊ทผ์ฑ์ ๋ด๋นํ๋ ๊ธฐ๊ด
ARIA (accessible rich internet applications) = ์ฅ์ ๊ฐ ์๋ ์ฌ๋๋ค์ด ์น ์ฝํ ์ธ ์ ์น ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ํ๋, ์ฆ ์น ์ ๊ทผ์ฑ์ ๊ฐ์ถ๊ธฐ ์ํ ๊ธฐ์
RIA (rich internet applications) = ๋ฐ๋ก ํ๋ก๊ทธ๋จ์ ์ค์นํ์ง ์์๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ฌ์ฉํ ์ ์๋ ํธ๋ฆฌ์ฑ + ํ๋ก๊ทธ๋จ์ ์ง์ ์ค์นํด์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋น ๋ฅธ ๋ฐ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋์์ ๊ฐ์ง๋ ์น ์ ํ๋ฆฌ์ผ์ด์ .
WAI-ARIA ์ ํ์์ฑ
์๋งจํฑ HTML์ ์ฌ์ฉํ๋ฉด ์น ์ ๊ทผ์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
WAI-ARIA๋ HTML ์์์ ์ถ๊ฐ์ ์ผ๋ก ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์๊ฒ ํด์ค๋ค.
1. ์๋งจํฑ ์์๋ง์ผ๋ก ์๋ฏธ๋ฅผ ์ถฉ๋ถํ ๋ถ์ฌํ ์ ์๋ ์ํฉ์ WAI-ARIA๋ฅผ ์ฌ์ฉํ๋ฉด HTML ์์์ ์ถ๊ฐ์ ์ธ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ฌ ๋ ์ํํ๊ฒ ํ์ด์ง๋ฅผ ํ์ํ ์ ์๋ค. (WAI-ARIA๋ ๋ณด์กฐ์ ์ธ ์ญํ ๋ก๋ง ์ฌ์ฉํ๊ณ , ๋จ์ฉ ๊ธ์ง! ์๋งจํฑ HTML์ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ!)
2. SPA์ฒ๋ผ AJAX๋ฅผ ์ฌ์ฉํ๋ ์ํฉ, ์ฆ ์๋ก๊ณ ์นจ ์์ด ํ์ด์ง์ ๋ด์ฉ์ด ๋ฐ๋๋ ์ํฉ์์๋ ๋ณ๊ฒฝ๋ ์์ญ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ค ์ ์์ด ๋์ ์ธ ์ฝํ ์ธ ์์๋ ์น ์ ๊ทผ์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
WAI-ARIA ์ฌ์ฉ๋ฒ
HTML ํ๊ทธ ๋ด๋ถ์ ์์ฑ์ ์ถ๊ฐํด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ค.
1. ์ญํ role: HTML ์์์ ์ญํ ์ ์ ์ํ๋ค.
2. ์ํ state: ์์์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
3. ์์ฑ property: ์์์ ํน์ง์ ์ ์ํ๋ค.
1. ์ญํ role : HTML ์์ ์ข ๋ฅ์ ์ญํ ์ด ์๋ก ๋ง์ง ์์ ๋, ์ด๋ค ์ญํ ์ ํ๋ ์์์ธ์ง ๋ช ์ํด์ค ๋ ์ฌ์ฉ
๋ฒํผ์ผ๋ก ์ฌ์ฉ๋๋ ์์๋ฅผ ๋ง๋ค์๋๋ฐ, <div> ์์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๐
<div role="button">div์ด์ง๋ง button์ผ๋ก ์ฌ์ฉ๋๋ ์์</div>
HTML ์์๋ก ์ถฉ๋ถํ ํ์ ํ ์ ์๋ ๋ด์ฉ์ WAI-ARIA๋ก ๋ ์ค๋ช ํด์ค ํ์ ์๋ค.
(โ)<button role="button"></button>
์๋งจํฑ ์์ ๋ณธ์ฐ์ ์๋ฏธ๋ฅผ ์์๋ก ๋ฐ๊พธ๋ฉด ์๋๋ค.
(โ)<h1 role="button">์ด๊ฑด h1 ์์</h1>
ํ์ฉ ์์)
<div role="tabList">
<li role="tab">Tab1</li>
<li role="tab">Tab2</li>
<li role="tab">Tab3</li>
</div>
<div role="tabpanel">Tab menu ONE</div>
<div role="tabpanel">Tab menu TWO</div>
<div role="tabpanel">Tab menu THREE</div>
2. ์ํ state: ์์์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
- ํ์ฌ ์ด๋ค ํญ์ด ์ ํ๋์๋์ง ํ์ํ๊ธฐ (aria-selected ์ฌ์ฉํ๊ธฐ)
<div role="tabList">
<li role="tab" aria-selected="true">Tab1</li>
<li role="tab" aria-selected="false">Tab2</li>
<li role="tab" aria-selected="false">Tab3</li>
</div>
<div role="tabpanel">Tab menu ONE</div>
<div role="tabpanel">Tab menu TWO</div>
<div role="tabpanel">Tab menu THREE</div>
- ์์ฝ๋์ธ UI๊ฐ ํผ์ณ์ง ์ํ์ธ์ง ํ์ํ๊ธฐ (aria-expanded)
- ์์๊ฐ ์จ๊น ์ํ์ธ์ง ํ์ํ๊ธฐ (aria-hidden)
3. ์์ฑ property : ์์์ ํน์ง์ ์ ์ํ๋ค.
- ํ ์คํธ ์ฝํ ์ธ ์์ด ์ด๋ฏธ์ง๋ก๋ง ๋ง๋ค์ด์ง ๋ฒํผ์ ์ค๋ช ํ ๋ (aria-label)
๊ธฐ์กด
<button> <img src="X.png" /> </button>
<button> <img src="๋๋ณด๊ธฐ.png" /> </button>
์น์ ๊ทผ์ฑ์ ํฅ์์ํจ ๋ฒํผ
<button aria-label="๋ซ๊ธฐ"/> <img src="X.png" /> </button>
<button aria-label="๊ฒ์"/> <img src="๋๋ณด๊ธฐ.png" /> </button>
- ํด๋น ์์๊ฐ ์ค์๊ฐ์ผ๋ก ๋ด์ฉ์ ๊ฐฑ์ ํ๋ ์์ญ์ธ์ง ํ์ํ๊ธฐ (aria-live)
alert, modal, dialog ์ ๊ฐ์ ๋ธ๋ผ์ฐ์ง ๋์ค์ ๋ด์ฉ์ ๋์ฐ๋ ์์๋, AJAX ๊ธฐ์ ์ ์ฌ์ฉํด์ ์ค์๊ฐ์ผ๋ก ๋ด์ฉ์ ๊ฐฑ์ ํ๋ ์์ญ์ ์ฌ์ฉํ๋ค.
์์ฑ๊ฐ
1. polite : ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ํ์ฌ ์ฝ๊ณ ์๋ ๋ด์ฉ์ ๋ชจ๋ ์ฝ๊ณ ๋์ ๊ฐฑ์ ๋ ๋ด์ฉ์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ค.
2. assertive : ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ํ์ฌ ์ฝ๊ณ ์๋ ๋ด์ฉ์ ์ค๋จํ๊ณ ๊ฐฑ์ ๋ ๋ด์ฉ์ ๋ฐ๋ก ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ค.
์ฐธ๊ณ )
https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques
https://www.w3.org/TR/html-aria/