Skip to content

AccordionΒ #3

@hsskey

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λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž κ²½ν—˜μ„ κ°•ν™”.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions