๐Ÿ–ฅFrontEnd/ํ”„๋ก ํŠธ์—”๋“œ

TIL) WAI-ARIA, aria-live, ์Šคํฌ๋ฆฐ ๋ฆฌ๋”, ์›น ์ ‘๊ทผ์„ฑ ํ–ฅ์ƒ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

hellohailie 2022. 7. 11. 13:19

 

 

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/

 

๐Ÿ˜ƒ ์ž˜๋ชป๋œ ๊ฐœ๋… ์ „๋‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €์˜ ์„ฑ์žฅ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค๐Ÿค“