Skip to content

CarouselΒ #7

@hsskey

Description

@hsskey

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

  • μ»΄ν¬λ„ŒνŠΈ 이름: Carousel
  • μ»΄ν¬λ„ŒνŠΈ μ„€λͺ…: μΊλŸ¬μ…€μ€ μ½˜ν…μΈ λ₯Ό μˆœν™˜ν•˜λ©° ν‘œμ‹œν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ, μ‚¬μš©μžκ°€ 이전/λ‹€μŒ ν•­λͺ©μœΌλ‘œ μ΄λ™ν•˜κ±°λ‚˜ νŠΉμ • ν•­λͺ©μ„ 선택할 수 있음
  • μ‚¬μš© 사둀: μ œν’ˆ 이미지, ν”„λ‘œλͺ¨μ…˜ λ°°λ„ˆ, μΆ”μ²œ μƒν’ˆ 등을 μˆœν™˜ν•˜λ©° ν‘œμ‹œν•  λ•Œ μ‚¬μš©

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

  • ARIA Authoring Practices: W3C ARIA Carousel Pattern
    • μžλ™ νšŒμ „ μ •μ§€, 이전/λ‹€μŒ 컨트둀, μŠ¬λΌμ΄λ“œ 선택 λ“±μ˜ μ ‘κ·Όμ„± 고렀사항 μ œμ‹œ
  • 기타 레퍼런슀: Ant Design μΊλŸ¬μ…€ μ»΄ν¬λ„ŒνŠΈ 뢄석

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

  • ARIA Pattern 적용: ARIA Carousel Pattern
    • μ‚¬μš©λœ ARIA 속성: aria-roledescription="carousel", aria-label, aria-live="off"(μžλ™ νšŒμ „ μ‹œ) λ˜λŠ” aria-live="polite"(μžλ™ νšŒμ „ 쀑지 μ‹œ), aria-controls, aria-selected 등이 μ‚¬μš©λ¨.
  • μ ‘κ·Όμ„± κ΄€λ ¨ 고렀사항:
    • ν‚€λ³΄λ“œ 초점이 carousel 내뢀에 μ§„μž…ν•˜λ©΄ μžλ™ νšŒμ „ μ •μ§€
    • 이전/λ‹€μŒ μ»¨νŠΈλ‘€μ€ ν‚€λ³΄λ“œλ‘œ μ‘°μž‘ κ°€λŠ₯ν•΄μ•Ό 함
    • μžλ™ νšŒμ „ μ‹œμ—λŠ” aria-live="off"λ₯Ό μ‚¬μš©ν•˜μ—¬ λΆˆν•„μš”ν•œ μ—…λ°μ΄νŠΈ μ•Œλ¦Ό λ°©μ§€
    • μžλ™ νšŒμ „μ΄ μ€‘μ§€λœ μƒνƒœμ—μ„œλŠ” aria-live="polite"λ₯Ό μ‚¬μš©ν•˜μ—¬ μŠ¬λΌμ΄λ“œ λ³€κ²½ 사항 μ•Œλ¦Ό
    • μŠ¬λΌμ΄λ“œ λ³€κ²½ μ‹œ μ΄ˆμ μ„ μœ μ§€ν•˜μ—¬ 슀크린 리더 μ‚¬μš©μžκ°€ μ»¨ν…μŠ€νŠΈλ₯Ό μžƒμ§€ μ•Šλ„λ‘ 함
  • μ ‘κ·Όμ„± κΈ°λŠ₯ μš”μ•½:
    • μžλ™ νšŒμ „ μ œμ–΄, 이전/λ‹€μŒ 및 νŠΉμ • μŠ¬λΌμ΄λ“œλ‘œ 이동, ν˜„μž¬ μŠ¬λΌμ΄λ“œ μƒνƒœ 정보 제곡 λ“±μ˜ κΈ°λŠ₯을 톡해 μ ‘κ·Όμ„± ν–₯상

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

  • HTML μ‹œλ§¨ν‹± νƒœκ·Έ μ‚¬μš©:
    • W3C Example:
      • <section> νƒœκ·Έλ‘œ carousel μ»΄ν¬λ„ŒνŠΈ μ˜μ—­ ν‘œμ‹œ
      • <div> νƒœκ·Έμ™€ ARIA μ—­ν• (role)을 μ‚¬μš©ν•˜μ—¬ μŠ¬λΌμ΄λ“œ λͺ©λ‘κ³Ό 컨트둀 μ˜μ—­ ꡬ뢄
    • Ant Design Example:
      • <div> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 전체 carousel μ»΄ν¬λ„ŒνŠΈ ꡬ성
      • 'slick' 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ μŠ¬λΌμ΄λ“œ νŠΈλž™, 컨트둀러 λ“± ꡬ뢄
  • λ§ˆν¬μ—… ꡬ쑰 비ꡐ:
    • W3C Example:
<section id="myCarousel" class="carousel" aria-roledescription="carousel" aria-label="Highlighted television shows">
  <div class="carousel-inner">
    <div class="controls">
      <button class="rotation pause">...</button>
      <button class="previous" aria-controls="myCarousel-items">...</button>
      <button class="next" aria-controls="myCarousel-items">...</button>
    </div>
    <div id="myCarousel-items" class="carousel-items" aria-live="off">
      <div class="carousel-item active" role="group" aria-roledescription="slide" aria-label="1 of 6">...</div>
      <div class="carousel-item" role="group" aria-roledescription="slide" aria-label="2 of 6">...</div>
      ...
    </div>
  </div>
</section>
  • Ant Design Example:
<div class="ant-carousel">
  <div class="slick-slider">
    <div class="slick-list">
      <div class="slick-track">
        <div class="slick-slide slick-active slick-current" aria-hidden="false">...</div>
        <div class="slick-slide" aria-hidden="true">...</div>
        ...
      </div>
    </div>
    <ul class="slick-dots slick-dots-bottom">
      <li class="slick-active"><button>1</button></li>
      <li><button>2</button></li>
      ...
    </ul>
  </div>
</div>
  • Web Dev Example:
<div class="gui-carousel" carousel-pagination="dots" carousel-controls="auto" carousel-scrollbar="auto"
  carousel-snapstop="auto" aria-label="Featured Items Carousel">
  <div class="gui-carousel--scroller">
    <div class="gui-carousel--snap">
      <figure class="animate-visibility captioned-image">
        <img loading="lazy" width="1280" height="720" src="https://picsum.photos/seed/this/1280/720.webp"
          alt="Blue ocean with a large wave">
        <figcaption>
          <a href="#">Learn more about large ocean waves</a>
        </figcaption>
      </figure>
    </div>
    ...
  </div>
</div>
  • ꡬ쑰적 선택 이유:
    • W3CλŠ” <section>, <div>, role 속성 등을 ν™œμš©ν•˜μ—¬ μΊλŸ¬μ…€κ³Ό μŠ¬λΌμ΄λ“œλ₯Ό κ΅¬μ‘°ν™”ν•˜κ³  있음. ARIA 속성을 적극 ν™œμš©ν•˜μ—¬ 접근성을 λ†’μž„
    • Ant Design은 μΊλŸ¬μ…€μ„ <div> νƒœκ·Έμ˜ μ‘°ν•©μœΌλ‘œ κ΅¬μ„±ν•˜κ³ , 'slick' 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ ꡬ뢄함. μŠ¬λΌμ΄λ“œ λ¦¬μŠ€νŠΈμ™€ 인디케이터λ₯Ό λ³„λ„λ‘œ λ§ˆν¬μ—…ν•¨
    • Web DevλŠ” <div>와 μ»€μŠ€ν…€ 속성을 μ‚¬μš©ν•˜μ—¬ μΊλŸ¬μ…€μ„ ꡬ성함. <figure>와 <figcaption>을 μ‚¬μš©ν•˜μ—¬ 이미지와 μΊ‘μ…˜μ„ 의미둠적으둜 λ§ˆν¬μ—…ν•¨

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

  • Ant Design: 'slick' 클래슀λ₯Ό ν™œμš©ν•˜μ—¬ ꡬ쑰λ₯Ό ꡬ성함. μŠ¬λΌμ΄λ“œλŠ” <div>둜, μΈλ””μΌ€μ΄ν„°λŠ” <ul><li>둜 λ§ˆν¬μ—…. ARIA 속성 μ‚¬μš©μ΄ μ œν•œμ μž„
  • Web Dev: μ»€μŠ€ν…€ 속성을 μ‚¬μš©ν•˜μ—¬ μΊλŸ¬μ…€μ˜ λ™μž‘μ„ μ œμ–΄ν•¨. 이미지와 μΊ‘μ…˜μ— μ‹œλ§¨ν‹± νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 의미둠적 λ§ˆν¬μ—…μ„ κ΅¬ν˜„ν•¨

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

  • μ£Όμš” 섀계 고렀사항:
    • μΊλŸ¬μ…€ μžλ™ μž¬μƒ μ‹œ 접근성을 μœ„ν•΄ μΌμ‹œμ •μ§€ μ»¨νŠΈλ‘€μ„ μ œκ³΅ν•˜κ³ , 초점이 μ»΄ν¬λ„ŒνŠΈ 내뢀에 μžˆμ„ λ•Œ μžλ™ μž¬μƒμ„ 멈좀
    • 이전/λ‹€μŒ μ»¨νŠΈλ‘€μ€ ν‚€λ³΄λ“œλ‘œ μ‘°μž‘ν•  수 μžˆμ–΄μ•Ό ν•˜λ©°, μŠ¬λΌμ΄λ“œ λͺ©λ‘ λ°–μœΌλ‘œ 초점이 μ΄λ™ν•˜μ§€ μ•Šλ„λ‘ 함
    • 인디케이터λ₯Ό 톡해 총 μŠ¬λΌμ΄λ“œ μˆ˜μ™€ ν˜„μž¬ λ³΄μ—¬μ§€λŠ” μŠ¬λΌμ΄λ“œ 정보λ₯Ό 제곡
  • μ½”λ“œ μ˜ˆμ‹œ:
<section class="carousel" aria-roledescription="carousel">
  <h2 id="carousel-heading" class="carousel-heading">Featured Products</h2>
  <div class="carousel-controls">
    <button class="carousel-control prev" aria-controls="carousel-items">
      <span class="icon" aria-hidden="true">&#8249;</span>
      <span class="text">Previous</span>
    </button>
    <button class="carousel-control next" aria-controls="carousel-items">
      <span class="text">Next</span>
      <span class="icon" aria-hidden="true">&#8250;</span>
    </button>
  </div>
  <div class="carousel-inner">
    <ul id="carousel-items" class="carousel-items" aria-live="off">
      <li class="carousel-item active" role="group" aria-roledescription="slide" aria-label="1 of 3">...</li>
      <li class="carousel-item" role="group" aria-roledescription="slide" aria-label="2 of 3">...</li>
      <li class="carousel-item" role="group" aria-roledescription="slide" aria-label="3 of 3">...</li>
    </ul>
  </div>
  <div class="carousel-indicators">
    <button aria-controls="carousel-items" aria-label="Slide 1" aria-selected="true">1</button>
    <button aria-controls="carousel-items" aria-label="Slide 2">2</button>
    <button aria-controls="carousel-items" aria-label="Slide 3">3</button>
  </div>
</section>

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

  • μ ‘κ·Όμ„± ν…ŒμŠ€νŠΈ:
    • 슀크린 리더 μ‚¬μš© μ‹œ μŠ¬λΌμ΄λ“œ μ½˜ν…μΈ  읽기, ν˜„μž¬ μŠ¬λΌμ΄λ“œ 정보 제곡, 이전/λ‹€μŒ 컨트둀 μ‘°μž‘ κ°€λŠ₯ν•œμ§€ 확인
    • ν‚€λ³΄λ“œλ§ŒμœΌλ‘œ μ»΄ν¬λ„ŒνŠΈ λ‚΄ 이동 및 컨트둀 μ‘°μž‘μ΄ κ°€λŠ₯ν•œμ§€ ν…ŒμŠ€νŠΈ
  • λΈŒλΌμš°μ € ν˜Έν™˜μ„± ν…ŒμŠ€νŠΈ: μ£Όμš” λ°μŠ€ν¬νƒ‘/λͺ¨λ°”일 λΈŒλΌμš°μ €μ—μ„œ λ ˆμ΄μ•„μ›ƒ 및 κΈ°λŠ₯ λ™μž‘ μ—¬λΆ€ 확인
  • μ‚¬μš©μž ν”Όλ“œλ°±: λ‹€μ–‘ν•œ μ‚¬μš©μžλ₯Ό λŒ€μƒμœΌλ‘œ μΊλŸ¬μ…€ μ»΄ν¬λ„ŒνŠΈ μ‚¬μš©μ„± ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜κ³ , κ°œμ„  사항을 수렴

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

  • κ΄€λ ¨ λ¬Έμ„œ: Ant Design Carousel Component, Web Dev Carousel Example
  • 의견 및 μ œμ•ˆ: 각 μŠ¬λΌμ΄λ“œμ— 헀딩을 μΆ”κ°€ν•˜μ—¬ λ‚΄μš© νŒŒμ•…μ„ λ•λŠ” λ°©μ•ˆ κ³ λ €

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

  • Role, Attribute, State
    • Role: aria-roledescription="carousel", role="group", aria-roledescription="slide" λ“± ν™œμš©
    • Attribute: aria-label, aria-controls, aria-selected λ“± ν™œμš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ μ—­ν•  및 μƒν˜Έμž‘μš© μ„€λͺ…
    • State: aria-live="off"(μžλ™ νšŒμ „ μ‹œ)와 aria-live="polite"(μžλ™ νšŒμ „ 쀑지 μ‹œ)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ μƒνƒœμ— λ”°λ₯Έ μ•Œλ¦Ό μ œμ–΄
  • JavaScript 및 CSS μ‚¬μš© μ—¬λΆ€
    • JavaScript μ‚¬μš© μ—¬λΆ€: μŠ¬λΌμ΄λ“œ μ „ν™˜, μžλ™ μž¬μƒ, 인디케이터 동기화 등을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ JavaScript ν™œμš©
    • CSS 적용 사항: overflow: hidden을 μ‚¬μš©ν•˜μ—¬ λ³΄μ΄λŠ” μ˜μ—­ μ™Έ μŠ¬λΌμ΄λ“œ 감좀 처리. transformκ³Ό transition을 μ‚¬μš©ν•˜μ—¬ μŠ¬λΌμ΄λ“œ μ „ν™˜ μ• λ‹ˆλ©”μ΄μ…˜ κ΅¬ν˜„

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions