Skip to content

AccordionΒ #3

Description

@hsskey

πŸ“‹ μ»΄ν¬λ„ŒνŠΈ 정보

  • μ»΄ν¬λ„ŒνŠΈ 이름: Accordion
  • μ»΄ν¬λ„ŒνŠΈ μ„€λͺ…: 아코디언은 μ—¬λŸ¬ 개의 μ„Ήμ…˜μ΄ ν¬ν•¨λœ μΈν„°λž™ν‹°λΈŒ ν—€λ”©μœΌλ‘œ, 각 헀딩을 ν΄λ¦­ν•˜λ©΄ ν•΄λ‹Ή μ„Ήμ…˜μ˜ μ½˜ν…μΈ κ°€ ν™•μž₯λ˜κ±°λ‚˜ μΆ•μ†Œλ˜λŠ” μ»΄ν¬λ„ŒνŠΈ
  • μ‚¬μš© 사둀: μ—¬λŸ¬ μ„Ήμ…˜μ˜ μ½˜ν…μΈ λ₯Ό ν•œ νŽ˜μ΄μ§€μ—μ„œ κ°„λ‹¨νžˆ κ΄€λ¦¬ν•˜κ±°λ‚˜ μŠ€ν¬λ‘€μ„ μ€„μ΄κ³ μž ν•  λ•Œ μ‚¬μš©λ¨. 예λ₯Ό λ“€μ–΄, FAQ νŽ˜μ΄μ§€λ‚˜ μ—¬λŸ¬ μ„€μ • ν•­λͺ©μ„ ν•˜λ‚˜μ˜ ν™”λ©΄μ—μ„œ 보기 μ‰½κ²Œ ꡬ성할 λ•Œ 유용

πŸ“š μ°Έμ‘° 및 레퍼런슀

  • ARIA Authoring Practices: W3C ARIA Patterns
    • κ΄€λ ¨ νŒ¨ν„΄ 및 적용된 μ ‘κ·Όμ„± κΈ°μ€€ 확인
  • 기타 레퍼런슀: MUI, Ant Design λ“±μ˜ λ¬Έμ„œμ™€ λΉ„κ΅ν•˜μ—¬ νŒ¨ν„΄ 뢄석

πŸ“ μ ‘κ·Όμ„± 및 ARIA 적용 μ—¬λΆ€

  • ARIA Pattern 적용: ARIA Pattern 링크
    • μ‚¬μš©λœ ARIA 속성: role="button", aria-expanded, aria-controls, role="region" 등이 μ‚¬μš©λ˜κ³  role="button"은 클릭 κ°€λŠ₯ν•œ μ•„μ½”λ””μ–Έ 헀더λ₯Ό λ‚˜νƒ€λ‚΄λ©°, aria-expanded 속성을 톡해 ν™•μž₯ μ—¬λΆ€λ₯Ό λͺ…μ‹œ. aria-controlsλŠ” 헀더와 κ΄€λ ¨λœ νŒ¨λ„μ„ μ—°κ²°ν•˜λ©°, role="region"을 톡해 νŠΉμ • νŒ¨λ„μ˜ μ½˜ν…μΈ λ₯Ό ꡬ뢄
  • μ ‘κ·Όμ„± κ΄€λ ¨ 고렀사항: ν‚€λ³΄λ“œ μ‚¬μš© 및 포컀슀 이동을 κ³ λ €ν•΄μ•Ό ν•˜λ©°, aria-labelledby와 같은 속성을 ν™œμš©ν•΄ 각 νŒ¨λ„μ΄ μ‰½κ²Œ 탐색 κ°€λŠ₯ν•˜λ„λ‘ ν•΄μ•Ό ν•˜λ©° ν•˜λ‚˜μ˜ νŒ¨λ„λ§Œ ν™•μž₯λ˜λ„λ‘ ν•˜κ±°λ‚˜ λͺ¨λ“  νŒ¨λ„μ„ ν™•μž₯ν•  수 μžˆλ„λ‘ 섀계 κ°€λŠ₯
  • μ ‘κ·Όμ„± κΈ°λŠ₯ μš”μ•½: ν˜„μž¬ ν™œμ„±ν™”λœ ν—€λ”λŠ” aria-expanded="true"둜 μ„€μ •ν•˜κ³ , ν•΄λ‹Ή νŒ¨λ„μ΄ λͺ…ν™•νžˆ 인식될 수 μžˆλ„λ‘ role="region"을 톡해 접근성을 κ°•ν™”.

πŸ—οΈ λ§ˆν¬μ—… ꡬ쑰 뢄석

  • HTML μ‹œλ§¨ν‹± νƒœκ·Έ μ‚¬μš©: <div> 내에 role="button", aria-expanded, role="region" 등을 μ‚¬μš©ν•΄ μ‹œλ§¨ν‹±ν•œ ꡬ쑰λ₯Ό 제곡. 각 ν—€λ”λŠ” aria-controls 속성을 톡해 νŠΉμ • νŒ¨λ„κ³Ό μ—°κ²°λ˜κ³ , ν™œμ„±ν™” μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ aria-expanded 속성을 μ‚¬μš©.
  • λ§ˆν¬μ—… ꡬ쑰 비ꡐ:
// W3C μ˜ˆμ‹œ
<div class="accordion">
  <h3>
    <button type="button" aria-expanded="false" aria-controls="sect1" id="accordion1id">Section 1</button>
  </h3>
  <div id="sect1" role="region" aria-labelledby="accordion1id" hidden>
    <p>Section 1 Content</p>
  </div>
</div>

// MUI μ˜ˆμ‹œ
<div class="MuiAccordion-root">
  <div class="MuiAccordionSummary-root">
    <button aria-expanded="false" aria-controls="panel1" id="panel1-header">Panel 1</button>
  </div>
  <div id="panel1" role="region" aria-labelledby="panel1-header" hidden>
    <p>Content of Panel 1</p>
  </div>
</div>

// Ant Design μ˜ˆμ‹œ
<div class="ant-collapse">
  <div class="ant-collapse-item">
    <div class="ant-collapse-header" role="button" aria-expanded="false" aria-controls="panel1">
      <span>Panel 1</span>
    </div>
    <div id="panel1" role="region" hidden>
      <p>Content of Panel 1</p>
    </div>
  </div>
</div>
  • ꡬ쑰적 선택 이유:
    • W3C, MUI 및 Ant Design: λͺ¨λ‘ μ‹œλ§¨ν‹± μ›Ή 접근성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ role="button", aria-expanded, role="region" 등을 μ‚¬μš©ν•˜μ—¬ λͺ…ν™•ν•œ ꡬ쑰λ₯Ό 제곡. 이λ₯Ό 톡해 슀크린 리더 μ‚¬μš©μžμ—κ²Œ 각 헀더와 νŒ¨λ„ κ°„μ˜ 관계λ₯Ό λͺ…ν™•νžˆ μ „λ‹¬ν•˜κ³ , μ‚¬μš©μž κ²½ν—˜ 및 접근성을 ν–₯상.

πŸ’‘ UI 라이브러리 비ꡐ 뢄석

  • MUI: <button>을 μ‚¬μš©ν•΄ 각 헀더λ₯Ό μ •μ˜ν•˜λ©°, μ‹œλ§¨ν‹±ν•˜κ³  μ ‘κ·Όμ„± 높은 ꡬ쑰λ₯Ό μœ μ§€. aria-expanded와 aria-controls 속성을 μ‚¬μš©ν•΄ 헀더와 νŒ¨λ„μ„ λͺ…ν™•νžˆ μ—°κ²°.
  • Ant Design: λΉ„μŠ·ν•˜κ²Œ μ‹œλ§¨ν‹±ν•œ 접근성을 μ€‘μ‹œν•˜λ©°, 각 ν—€λ”λŠ” role="button" 속성을 톡해 νŒ¨λ„κ³Ό μ—°κ²°λ˜κ³  aria-labelledby와 같은 μ†μ„±μœΌλ‘œ 접근성을 κ°•ν™”.

βš™οΈ κ΅¬ν˜„ 및 섀계 고렀사항

  • μ£Όμš” 섀계 고렀사항: μ•„μ½”λ””μ–Έ μ»΄ν¬λ„ŒνŠΈλŠ” μ‹œλ§¨ν‹± HTML νƒœκ·Έ 및 μ μ ˆν•œ ARIA 속성 μ‚¬μš©μ„ 톡해 접근성을 κ°•ν™”ν•˜κ³ , μ‚¬μš©μžκ°€ μ‰½κ²Œ 각 μ„Ήμ…˜μ˜ λ‚΄μš©μ„ μ΄ν•΄ν•˜κ³  탐색할 수 μžˆλ„λ‘ 해야함. 헀더 클릭 μ‹œ μ½˜ν…μΈ κ°€ ν‘œμ‹œλ˜κ±°λ‚˜ μˆ¨κ²¨μ§€λ„λ‘ μ„€κ³„ν•˜λ©°, ν‚€λ³΄λ“œ λ‚΄λΉ„κ²Œμ΄μ…˜μ„ 톡해 각 μ„Ήμ…˜μ— μ ‘κ·Όν•  수 μžˆμ–΄μ•Ό 함.
  • μ½”λ“œ μ˜ˆμ‹œ:
<div class="accordion">
  <h3>
    <button type="button" aria-expanded="false" aria-controls="panel-1" id="accordion1">Section 1</button>
  </h3>
  <div id="panel-1" role="region" aria-labelledby="accordion1" hidden>
    <p>Content of Section 1</p>
  </div>
</div>

πŸ” ν…ŒμŠ€νŠΈ 및 κ²€ν† 

  • μ ‘κ·Όμ„± ν…ŒμŠ€νŠΈ: 슀크린 리더와 ν‚€λ³΄λ“œ λ‚΄λΉ„κ²Œμ΄μ…˜ μ‚¬μš©μ„± ν…ŒμŠ€νŠΈλ₯Ό 톡해 각 헀더가 적절히 μΈμ‹λ˜κ³  νŒ¨λ„μ΄ ν™•μž₯λ˜λŠ”μ§€ 확인. aria-expanded μ†μ„±μ˜ λ™μž‘μ„ 톡해 ν™œμ„±ν™”λœ μƒνƒœκ°€ μ œλŒ€λ‘œ μ•ˆλ‚΄λ˜λŠ”μ§€ κ²€ν† .
  • λΈŒλΌμš°μ € ν˜Έν™˜μ„± ν…ŒμŠ€νŠΈ: μ£Όμš” λΈŒλΌμš°μ €(Chrome, Firefox, Safari, Edge)μ—μ„œ μ•„μ½”λ””μ–Έμ˜ λ™μž‘μ΄ μ •μƒμ μœΌλ‘œ μˆ˜ν–‰λ˜λŠ”μ§€ 확인.
  • μ‚¬μš©μž ν”Όλ“œλ°±: μ‚¬μš©μž ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ•„μ½”λ””μ–Έ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν†΅ν•œ μ½˜ν…μΈ  μ „ν™˜μ΄ 직관적이고 νŽΈλ¦¬ν•œμ§€ ν™•μΈν•˜κ³  κ°œμ„  사항을 반영.

πŸ“Œ μΆ”κ°€ μ°Έκ³  사항

  • κ΄€λ ¨ λ¬Έμ„œ: W3C ARIA Authoring Practices
  • 의견 및 μ œμ•ˆ: μ•„μ½”λ””μ–Έ μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•œ μ˜κ²¬μ΄λ‚˜ κ°œμ„  사항을 μΆ”κ°€

🎯 μ—­ν• , 속성, μƒνƒœ 및 νƒœκ·Έ 속성

  • Role, Attribute, State
    • Role: role="button", role="region"을 톡해 각 역할을 λͺ…μ‹œ
    • Attribute: aria-controls, aria-labelledbyλ₯Ό μ‚¬μš©ν•΄ 헀더와 νŒ¨λ„ κ°„μ˜ 관계 λͺ…ν™•νžˆ μ„€μ •
    • State: ν˜„μž¬ ν™œμ„±ν™”λœ ν—€λ”μ—λŠ” aria-expanded="true"λ₯Ό μ„€μ •ν•΄ μ‹œκ°μ  및 ν”„λ‘œκ·Έλž¨μ μœΌλ‘œ ν˜„μž¬ μƒνƒœλ₯Ό λͺ…ν™•νžˆ ν‘œμ‹œ
  • JavaScript 및 CSS μ‚¬μš© μ—¬λΆ€
    • JavaScript μ‚¬μš© μ—¬λΆ€: 헀더 클릭 μ‹œ μ½˜ν…μΈ μ˜ ν‘œμ‹œ 및 μˆ¨κΉ€μ„ JavaScript둜 μ œμ–΄ν•˜λ©°, ν‚€λ³΄λ“œ 이벀트 처리λ₯Ό 톡해 접근성을 ν–₯상.
    • CSS 적용 사항: ν—€λ”μ˜ μ‹œκ°μ  νš¨κ³Όμ™€ νŒ¨λ„μ˜ ν‘œμ‹œ/μˆ¨κΉ€ μ „ν™˜μ„ μœ„ν•΄ CSSλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ κ°•ν™”.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions