λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

HTML

[HTML] μ›Ή μ ‘κ·Όμ„± 및 WAI-ARIA

🌏 μ›Ή μ ‘κ·Όμ„±μ΄λž€?

고령자, μž₯애인, λΉ„μž₯애인에 상관없이 λͺ¨λ“  μ‚¬λžŒμ΄ λ™λ“±ν•˜κ²Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” 것을 λ§ν•œλ‹€.

 

λ§Œμ•½ μ‹œκ°μ΄ λΆˆνŽΈν•œ μ‚¬λžŒμ΄ 웹을 μ΄μš©ν•˜λŠ” 경우 μŠ€ν¬λ¦°λ¦¬λ”μ— μ˜μ§€ν•΄ μ›ν•˜λŠ” λ™μž‘μ„ μˆ˜ν–‰ν•˜κ²Œ 될 것이닀. μ΄λ•Œ μ‹œκ°μ΄ λΆˆνŽΈν•œ μ‚¬λžŒλ„ μ›Ήμ• μ„œ μ›ν•˜λŠ” λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ”λ° 어렀움이 없도둝 μŠ€ν¬λ¦°λ¦¬λ”κ°€ 보닀 μ •ν™•ν•˜κ³  λͺ…ν™•ν•˜κ²Œ 정보λ₯Ό μ „λ‹¬ν•˜λŠ” λ“±μ˜ κΈ°λŠ₯을 ν•˜λ„λ‘ ν•΄μ•Ό ν•œλ‹€.

 

NAVER의 검색창이닀 μ‹œκ°μ΄ λΆˆνŽΈν•œ μ‚¬λžŒμ΄λΌλ©΄ 이 μš”μ†Œκ°€ κ²€μƒ‰ν•˜λŠ” 뢀뢄인지λ₯Ό μ „ν˜€ μ•Œ 수 μ—†λ‹€. ν•˜μ§€λ§Œ 이 ν¬ν„Έμ‚¬μ΄νŠΈμ—μ„œ 검색창을 κ΅¬μ„±ν•œ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κ²Œ 되면 μ‚¬μš©μžμ—κ²ŒλŠ” 보여지지 μ•Šμ§€λ§Œ κ²€μƒ‰μ΄λΌκ³  ν‘œκΈ°λ₯Ό 해두고 μŠ€ν¬λ¦°λ¦¬λ”κ°€ 인식할 수 μžˆκ²Œλ” μž‘μ„±ν•΄λ‘μ—ˆλ‹€.

<!-- ν™”λ©΄μ—λŠ” 보이지 μ•ŠλŠ” νƒœκ·Έ -->
<span class="blind">검색</span>

<!-- 검색 돋보기 μ•„μ΄μ½˜ -->
<span class="ico_search_submit"></span>

 

πŸ“’ WAI-ARIA

(Web Accessibility Initiative - Accessible Rich Internet Application)

웹을 μ΄μš©ν•˜λŠ” μ‚¬λžŒλ“€μ΄ 증가함에 따라 μ—¬λŸ¬ μ‚¬λžŒλ“€μ΄ 웹을 μ΄μš©ν•˜κ²Œ λ˜μ—ˆκ³  λͺΈμ΄ λΆˆνŽΈν•œ 더 λ§Žμ€ μ‚¬λžŒλ“€μ΄ 웹을 μ΄μš©ν•  수 μžˆλ„λ‘ 동적 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 접근성을 보μž₯해쀄 수 μžˆλ‹€. ν•΄λ‹Ή μš”μ†Œμ˜ μ—­ν• , λ™μž‘ 등을 λͺ…μ‹œν•΄μ€ŒμœΌλ‘œμ¨ 보닀 λͺ…μ‹œμ μœΌλ‘œ 웹을 μ΄μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€. (htmlλ§ŒμœΌλ‘œλŠ” λΆ€μ‘±ν•œ μ›Ή 접근성을 보완, W3Cμ—μ„œ λ§Œλ“¬)

 

과제λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ²΄ν¬λ°•μŠ€μ˜ cssλ₯Ό λ³€κ²½ν•΄μ•Όν•  일이 μžˆμ—ˆλ‹€.

λ‹Ήμ‹œμ—λŠ” μ›Ή 접근성에 λŒ€ν•œ 지식이 거의 μ—†λ‹€μ‹œν”Όν–ˆκΈ° λ•Œλ¬Έμ— label을 μ‚¬μš©ν•΄μ„œ checkboxλ₯Ό display: none으둜 두어 보이지 μ•Šλ„λ‘ ν•˜κ³ , λ‚΄κ°€ μ›ν•˜λŠ” λͺ¨μ–‘λŒ€λ‘œ lable의 cssλ₯Ό λ³€κ²½ν•œ 적이 μžˆλ‹€.

ν•˜μ§€λ§Œ μ§€κΈˆ 생각해보면 μ›Ή 접근성을 μœ„ν•œ λ°°λ €κ°€ μ „ν˜€ λ˜μžˆμ§€ μ•Šμ€ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆλ‹€κ³  μƒκ°ν•œλ‹€. μŠ€ν¬λ¦°λ¦¬λ”λ₯Ό μ΄μš©ν•˜λŠ” μ‚¬λžŒμ΄ ν•΄λ‹Ή 뢀뢄을 μ ‘ν•˜κ²Œ λ˜μ—ˆλ‹€λ©΄ 이건 lableμ΄λΌλŠ” μš”μ†ŒμΌλΏ checkbox인지 μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ lable이라면 무엇을 κ°€λ₯΄ν‚€λŠ”지에 λŒ€ν•œ λͺ…μ‹œκ°€ μ „ν˜€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜λ‹€.

 

μ΄λŸ΄λ•Œ ARIAλ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

 

ARIAλ₯Ό μ΄μš©ν•˜λ©΄ ν•΄λ‹Ή μš”μ†Œκ°€ μ–΄λ–»κ²Œ μž‘λ™λ˜λŠ”μ§€λ₯Ό λͺ…μ‹œν•΄μ€„ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ role="checkbox"라고 μ†μ„±μœΌλ‘œ μΆ”κ°€ν•΄μ£Όκ²Œ 되면 이 속성이 checkbox처럼 λ™μž‘ν•¨μ„ λΈŒλΌμš°μ €μ—κ²Œ μ•Œλ €μ€„ 수 μžˆλ‹€ 이외에도 λŒ€ν‘œμ μœΌλ‘œ λ‹€μŒκ³Ό 같은 역할을 μˆ˜ν–‰ν•œλ‹€.

Role UI에 ν¬ν•¨λœ νŠΉμ • element의 κΈ°λŠ₯을 μ •μ˜
Property ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ νŠΉμ§•μ΄λ‚˜ 상황을 μ •μ˜ν•˜λ©° 속성λͺ…μœΌλ‘œ ‘aria-*‘λΌλŠ” 접두사λ₯Ό μ‚¬μš©
State ν•΄λ‹Ή μ»΄ν“¨λ„ŒνŠΈμ˜ μƒνƒœ 정보λ₯Ό μ •μ˜
  • WAI-ARIAλ₯Ό μ΄μš©ν•΄μ„œ ν•΄λ‹Ή μš”μ†Œμ˜ λ™μž‘μ„ μ •μ˜ν•˜κ±°λ‚˜, 상황 λ°‘ μƒνƒœκ°€ 어떀지λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ•Œλ €μ€€λ‹€.

 

이와 같은 방법 λ˜λŠ” λ‹€λ₯Έ 방법을 ν™œμš©ν•΄μ„œ μ›Ή 접근성을 높인 메인 메뉴λ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ’‹λ‹€λŠ” 생각을 ν•œλ‹€.

 

λ¨Όμ € λ³΄ν†΅μ˜ 메뉴λ₯Ό 보게 되면 <ul>, <li>λ₯Ό μ΄μš©ν•΄μ„œ 메뉴λ₯Ό μž‘μ„±ν•˜κ²Œ λœλ‹€ μ΄λ•Œ μ‹œλ©˜ν‹±μ μœΌλ‘œ 메뉴λ₯Ό <nav> νƒœκ·Έλ‘œ κ°μ‹ΈλŠ”λ° μ΄λŠ” 검색엔진 μ΅œμ ν™”μ—λ„ 도움이 λœλ‹€. λΈŒλΌμš°μ €λ“€μ΄ 데이터λ₯Ό μˆ˜μ§‘ν•  λ•Œ ν•΄λ‹Ή 뢀뢄이 navigator 역할을 ν•œλ‹€λŠ” 것을 μ•Œλ €μ£Όκ²Œ 되면 검색엔진이 데이터λ₯Ό μˆ˜μ§‘ν•  λ•Œ 효율적으둜 ν•  수 있고, μŠ€ν¬λ¦°λ¦¬λ”λ₯Ό μ΄μš©ν•˜λŠ” μ‚¬μš©μžλ“€λ„ ν•΄λ‹Ή μš”μ†Œκ°€ μ–΄λŠμ—­ν• μ„ 할지 κ°„λž΅ν•˜κ²Œ μ•Œ 수 μžˆλ‹€.

 

<nav> νƒœκ·Έλ‘œ 메뉴뢀뢄을 감싸주고, 보이지 μ•ŠλŠ” (screen leader only)의 제λͺ©μ„ μž‘μ„±ν•΄μ£Όλ©΄ 웹을 μ‚¬μš©ν•˜κΈ° μ–΄λ €μš΄ μ‚¬λžŒλ“€λ„ ν˜„μž¬ 뢀뢄이 “λ©”λ‰΄μ˜ 역할을 ν•˜λŠ”κ΅¬λ‚˜!” 라고 μ•Œ 수 μžˆμ„ 것이닀.

μ‹œλ©˜ν‹±νƒœκ·Έλ₯Ό μ΄μš©ν•΄μ„œ ν•΄λ‹Ή 뢀뢄이 μ–΄λ–€ 뢀뢄인지 큰 λŒ€λͺ©μœΌλ‘œ μ•Œ 수 μžˆλ‹€λ©΄ 이전에 λ§ν•œ aria-*λ₯Ό μ΄μš©ν•΄μ„œ μ‚¬μš©μžκ°€ μ›ν• ν•˜κ²Œ 웹을 μ΄μš©ν•  수 μžˆλ„λ‘ 해쀄 수 μžˆλ‹€.(μ‹œλ©˜ν‹± μš”μ†Œμ™€ role, ariaλ₯Ό ν˜Όμš©ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것은 쒋지 μ•Šλ‹€κ³  ν•œλ‹€)

 

λ©”κ°€ 메뉴(메뉴가 ꡉμž₯히 λ§Žμ€ λ“œλ‘­λ‹€μš΄μ‹μ˜ 메뉴)λ₯Ό μ΄μš©ν•  λ•Œ 해달 μš”μ†Œμ— 마우슀λ₯Ό hoverν•˜κ±°λ‚˜, clickν•΄μ•Ό 주메뉴 μ•„λž˜μ˜ μ„œλΈŒλ©”λ‰΄λ“€μ„ 확인할 수 μžˆλ‹€ μ΄λ•Œ μ„œλΈŒλ©”λ‰΄λ₯Ό μ—΄ 수 μžˆλ„λ‘ ν•˜λŠ” μš”μ†Œμ— aria-label="submenu-open"와 같이 ν•΄λ‹Ή μš”μ†Œκ°€ μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ μ•Œλ €μ£ΌλŠ” 것이 μ’‹λ‹€.

<body>
  <div class="container">
    <header>
      <h1>Test Page</h1>
    </header>
    <nav>
      <h2 class="screen-leader-only">menu(nav)</h2>
      <ul>
        <li>
          <button aria-label="submenu-open">μ£Ό 메뉴 1</button>
          <ul>
            <li aria-label="submenu"><a>μ„œλΈŒλ©”λ‰΄ 1-1</a></li>
            <li aria-label="submenu"><a>μ„œλΈŒλ©”λ‰΄ 1-2</a></li>
            <li aria-label="submenu"><a>μ„œλΈŒλ©”λ‰΄ 1-3</a></li>
          </ul>
        </li>
        <li>
          <button aria-label="submenu-open">μ£Ό 메뉴 2</button>
          <ul>
            <li aria-label="submenu"><a>μ„œλΈŒλ©”λ‰΄ 2-1</a></li>
            <li aria-label="submenu"><a>μ„œλΈŒλ©”λ‰΄ 2-2</a></li>
            <li aria-label="submenu"><a>μ„œλΈŒλ©”λ‰΄ 2-3</a></li>
          </ul>
        </li>
      </ul>
    </nav>
    <main> content </main>
    <footer> footer</footer>
  </div>
</body>

μœ„ μ½”λ“œλ₯Ό 보면 μ‹œλ©˜ν‹± μš”μ†Œ(<header>, <nav>, <main>, <footer>)λ₯Ό μ΄μš©ν•΄μ„œ 각 μš”μ†Œλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„ν•˜κ³  주메뉴 ν•˜λ‚˜ ν•˜λ‚˜λ₯Ό κ΅¬μ„±ν•˜λŠ” μš”μ†Œ(μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ“œλ‘­λ‹€μš΄ κ΅¬ν˜„)λ₯Ό button νƒœκ·Έλ‘œ μž‘μ„±ν–ˆλ‹€ μ΄λ•Œ 이 button이 무슨 역할을 ν•˜λŠ”μ§€ μ•Œ 수 μ—†λŠ” 상황이 μžˆλ‹€. μ΄λ•Œ aria-label을 μ΄μš©ν•΄μ„œ λΈŒλΌμš°μ €κ°€ 이 νƒœκ·Έκ°€ 무엇을 ν•˜λŠ”μ§€ μ‚¬μš©μžμ—κ²Œ μ•Œλ €μ€„ 수 μžˆλ‹€.

  • aria-label: λ ˆμ΄λΈ”λ‘œ μ‚¬μš©ν•  λ¬Έμžμ—΄μ„ 지정할 수 μžˆλ‹€.(aria-label이 ν•΄λ‹Ή μš”μ†Œμ˜ ν…μŠ€νŠΈλ³΄λ‹€ μš°μ„ μ‹œλ¨)
  • aria-labelledby: μžμ‹ μ„ μ°Έμ‘°ν•˜λŠ” μš”μ†Œλ₯Ό κ°€λ₯΄ν‚¨λ‹€.
  • aria-describedby: κΈ°λŠ₯을 μ„€λͺ…ν•˜λŠ” μš”μ†Œλ₯Ό κ°€λ₯΄ν‚¨λ‹€.(μžμ‹ μ„ μ„€λͺ…ν•˜λŠ” lable을 κ°€λ₯΄ν‚¨λ‹€)

'HTML' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[HTML] HTML κ°œμš”  (0) 2023.02.20