[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] ์›น ์ ‘๊ทผ์„ฑ 2 - WAI-ARIA

JiEunยท2023๋…„ 4์›” 27์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

WAI-ARIA ๋ฌด์—‡์ธ์ง€ ์–ด๋Š ์ƒํ™ฉ ์ผ ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“ ์•Œ๊ฒŒ๋œ ๋ถ€๋ถ„

โœ”๏ธ WAI-ARIA

  • WAI-ARIA๋Š” WAI์™€ ARIA๋ฅผ ํ•ฉ์นœ ๋‹จ์–ด
  • WAI์—์„œ ๋ฐœํ‘œํ•œ RIA ํ™˜๊ฒฝ์—์„œ์˜ ์›น ์ ‘๊ทผ์„ฑ ๊ธฐ์ˆ  ๊ทœ๊ฒฉ
  • HTML ์š”์†Œ์— ์ถ”๊ฐ€์ ์œผ๋กœ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌ

WAI (Web Accessibility Initiative)

์›น ํ‘œ์ค€์„ ์ •ํ•˜๋Š” W3C์—์„œ ์›น ์ ‘๊ทผ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ๊ด€

ARIA (Accessible Rich Internet Applications)

์žฅ์• ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์›น ์ฝ˜ํ…์ธ ์™€ ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”, ์ฆ‰ ์›น ์ ‘๊ทผ์„ฑ์„ ๊ฐ–์ถ”๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 

RIA (Rich Internet Applications)

๋”ฐ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌ์„ฑ + ํ”„๋กœ๊ทธ๋žจ์„ ์ง์ ‘ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋น ๋ฅธ ๋ฐ˜์‘์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋™์‹œ์— ๊ฐ€์ง€๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. SPA๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

โœ”๏ธ WAI-ARIA์˜ ํ•„์š”์„ฑ

  • ์‹œ๋ฉ˜ํ‹ฑ ์š”์†Œ๋งŒ์œผ๋กœ ์˜๋ฏธ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ถ€์—ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์— WAI-ARIA๋ฅผ ์‚ฌ์šฉ
    HTML ์š”์†Œ์— ์ถ”๊ฐ€์ ์ธ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋” ์›ํ™œํ•˜๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

โ—๏ธ โ€˜์‹œ๋ฉ˜ํ‹ฑ ์š”์†Œ๋งŒ์œผ๋กœ ์˜๋ฏธ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ถ€์—ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉโ€™์ด๋ž€

์‹œ๋ฉ˜ํ‹ฑ ์š”์†Œ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์ƒํ™ฉ์—์„œ๋Š” WAI-ARIA๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ
WAI-ARIA๋Š” ๋ณด์กฐ์ ์ธ ์—ญํ• ๋กœ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
WAI-ARIA๋ฅผ ๋‚จ์šฉํ•ด์„  ์•ˆ ๋˜๋ฉฐ, ์‹œ๋ฉ˜ํ‹ฑํ•œ HTML์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ตœ์šฐ์„ ์ด๋‹ค.

  • SPA์ฒ˜๋Ÿผ AJAX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ, ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ๋Š” ์ƒํ™ฉ์—์„œ๋„ ๋ณ€๊ฒฝ๋œ ์˜์—ญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด ๋™์ ์ธ ์ฝ˜ํ…์ธ ์—์„œ๋„ ์›น ์ ‘๊ทผ์„ฑ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ WAI-ARIA ์‚ฌ์šฉ๋ฒ•

WAI-ARIA์˜ ์†์„ฑ์—๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๋ถ„๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

  • ์—ญํ• (role): HTML ์š”์†Œ์˜ ์—ญํ• ์„ ์ •์˜ํ•˜๋Š” ์†์„ฑ
  • ์ƒํƒœ(state): ์š”์†Œ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์†์„ฑ
  • ์†์„ฑ(property): ์š”์†Œ์˜ ํŠน์ง•์„ ์ •์˜ํ•˜๋Š” ์†์„ฑ(attribute)

1.์—ญํ• (role)

HTML์˜ ์š”์†Œ ์ข…๋ฅ˜์™€ ์—ญํ• ์ด ์„œ๋กœ ๋งž์ง€ ์•Š์„ ๋•Œ, ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ์š”์†Œ์ธ์ง€ ๋ช…์‹œํ•ด ์ค„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ

<div role="button">div์ด์ง€๋งŒ button์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ</div>

์ž˜๋ชป๋œ ์˜ˆ์‹œ

  • HTML ์š”์†Œ๋กœ ์ถฉ๋ถ„ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์„ ๋˜ ์„ค๋ช…ํ•ด ์ค„ ํ•„์š”๋Š” ์—†๋‹ค.
<!--button ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ–ˆ์œผ๋‚˜ role์†์„ฑ์„ ์ด์šฉํ•ด ํ•œ ๋ฒˆ ๋” ์ง€์ •ํ•ด ์ฃผ์—ˆ๋‹ค.-->
<button role="button">button์ธ ์š”์†Œ</button>
  • ์‹œ๋ฉ˜ํ‹ฑ ์š”์†Œ ๋ณธ์—ฐ์˜ ์˜๋ฏธ๋ฅผ ์ž„์˜๋กœ ๋ฐ”๊พธ์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.
<!--h1 ํƒœ๊ทธ๋Š” ์ œ๋ชฉ์ด๋‚˜ role์†์„ฑ์œผ๋กœ button์œผ๋กœ ์„ค๋ช…ํ•ด ์ฃผ๊ณ  ์žˆ๋‹ค.-->
<h1 role="button">h1์ธ ์š”์†Œ</h1>

2.์ƒํƒœ(State)

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ ํƒ ๊ฐ€๋Šฅํ•œ ์š”์†Œ ์ค‘์—์„œ ์„ ํƒ ์ƒํƒœ์ธ ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” aria-selected ์†์„ฑ

<!--ํƒญ ๋ฉ”๋‰ด๊ฐ€ ์žˆ์„ ๋•Œ ๋ฉ”๋‰ด ํด๋ฆญ ์—ฌ๋ถ€ ํ‘œ์‹œ-->
<ul 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>
</ul>

<div role="tabpanel">Tab menu ONE</div>
<div role="tabpanel">Tab menu TWO</div>
<div role="tabpanel">Tab menu THREE</div>

aria-expanded
์•„์ฝ”๋””์–ธ UI๊ฐ€ ํŽผ์ณ์ง„ ์ƒํƒœ์ธ์ง€ ํ‘œ์‹œ
aria-hidden
์š”์†Œ๊ฐ€ ์ˆจ๊น€ ์ƒํƒœ์ธ์ง€๋ฅผ ํ‘œ์‹œ

์ด์™ธ ๋‹ค์–‘ํ•œ ์†์„ฑ์ด ์žˆ๋‹ค.

3.์†์„ฑ(Property)

1.aria-label

์š”์†Œ์— ๋ผ๋ฒจ์„ ๋ถ™์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ

<button aria-label="๋‹ซ๊ธฐ"> <img src="X.png" /> </button>
<button aria-label="๊ฒ€์ƒ‰"> <img src="๋‹๋ณด๊ธฐ.png" /> </button>

2.aria-live

ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์˜์—ญ์ธ์ง€ ํ‘œ์‹œ
- ๋ธŒ๋ผ์šฐ์ง• ๋„์ค‘์— ๋‚ด์šฉ์„ ๋„์šฐ๋Š” alert, modal, dialog์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ์š”์†Œ
- AJAX ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์˜์—ญ์— ์‚ฌ์šฉ

์†์„ฑ ๊ฐ’์œผ๋กœ๋Š” polite, assertive, off(default)๊ฐ€ ์žˆ๋‹ค.

  • polite : ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ํ˜„์žฌ ์ฝ๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ฝ๊ณ  ๋‚˜์„œ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ
  • assertive : ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ํ˜„์žฌ ์ฝ๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์„ ์ค‘๋‹จํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ๋ฐ”๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ

๋” ๋งŽ์ง€๋งŒ role, aria-label ์ •๋„๋งŒ ์‚ฌ์šฉํ•ด๋„ HTML์— ์ถ”๊ฐ€์ ์ธ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ณ  ์›น ์ ‘๊ทผ์„ฑ์„ ์–ด๋Š ์ •๋„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์›น ์ ‘๊ทผ์„ฑ์„ ํ™•๋ณดํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์‹œ๋ฉ˜ํ‹ฑํ•œ HTML์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
WAI-ARIA๋Š” ๋ณด์กฐ์ ์ธ ์—ญํ• ๋กœ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ๋‚จ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.


โœ๏ธ ๋งˆ์น˜๋ฉฐ

WAI-ARIA๋ผ๋Š” ์šฉ์–ด์„ ์ด๋ฒˆ ํ•™์Šต์—์„œ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
๊ฐ„ํ˜น ํ™ˆํŽ˜์ด์ง€ ๊ฒ€์ƒ‰ ํ•  ๋•Œ ๋ณด์ด๋Š” role์ด ๋ญ์ง€? ํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์— ๊ทธ ์˜๋ฌธ์ด ํ’€๋ฆฐ ๊ฑฐ ๊ฐ™๋‹ค.

์›น ์ ‘๊ทผ์„ฑ์„ ํ™•๋ณดํ•  ๋• WAI-ARIA๊ฐ€ ์•„๋‹Œ ์‹œ๋ฉ˜ํ‹ฑํ•œ HTML์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ(header, footer, nav, section ๋“ฑ)
WAI-ARIA๋Š” ๋ถ€๊ฐ€์  ์„ค๋ช…์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€