슬라이드 컨트롤 탭을 가진 자동 순환 이미지 캐러셀 예제

다음 예제는 페이지가 로드 될 때 자동으로 순환을 시작하는 캐러셀에 대한 접근성에 필수적인 패턴의 기능을 보여주는 캐러셀 설계 패턴의 구현입니다. 이 예제는 사용자가 볼 슬라이드를 직접 선택하여 순서대로 건너뛰는 방법을 제공하기 위해 탭 패턴을 사용하는 방법도 보여줍니다. 슬라이드 간 탐색은 탭으로 기능하고 순환하는 슬라이드 위에 렌더링 되는 원형 단추에 의해 제공됩니다. 사용자가 캐러셀의 컨트롤이나 링크로 초점을 옮기거나 캐러셀 콘텐츠 위로 마우스를 호버할 때 자동 순환이 중지됩니다. 예제 다음에 있는 접근성 기능 섹션에서는 디자인의 이러한 측면을 자세히 설명합니다.

유사한 예는 다음과 같습니다:

예제 옵션

예제

접근성 특성

자동 슬라이드 순환 제어

사용자는 슬라이드 순환을 중지하고 시작할 수 있으며, 이는 장애를 가진 다양한 사람들에게 캐러셀 접근성의 필수 요소입니다. 시각 처리나 읽는 것에 영향을 미치는 저시력 또는 인지 장애를 가진 사람은 슬라우드 순환을 제어할 수 있도록 하는 것이 슬라이드 콘텐츠를 탐색할 충분한 시간을 가질 수 있으므로 이점이 있습니다. 마찬가지로, 스크린리더 사용자는 자동 순환을 인식할 수 없기 때문에, 페이지를 읽는 것을 혼란스럽고 방향을 잃게 만들 수 있습니다. 예를 들어, 슬라이드가 자동으로 순환 하는 경우, 스크린리더 사용자가 슬라이드 1의 엘리먼트를 읽고, 다음 엘리먼트를 읽기 위한 스크린리더 명령을 실행하면, 슬라이드 1에 있는 다음 엘리먼트를 듣는 대신, 방금 낭독 된 엘리먼트가 완전히 새로운 컨텍스트의 것이라는 것을 알지 못한 채 슬라이드 2의 엘리먼트를 들을 수도 있습니다.

이 예제는 사용자가 슬라이드 순환을 제어할 수 있는 다음 기능들을 포함합니다:

텍스트와 순환 컨트롤의 색상 대비

이미지 내부에 컨트롤과 캡션이 표시되는 이 캐러셀의 뷰에서, 배경 이미지가 컨트롤과 텍스트에 대한 색상 대비를 불충분하게 만들 수 있습니다. 하지만, 이 뷰는 이 잠재적 문제를 방지하고 WCAG 2.1 색상 대비 요구사항을 만족시키기 위한 다음 기능을 포함합니다:

이미지 내부에 컨트롤과 텍스트가 표시되는 것으로 색상 대비 이슈가 발생하는 것을 방지하는 한 가지 방법은 그것들을 이미지 밖으로 배치하는 것입니다. 컨트롤과 텍스트를 단색 배경으로 옮기는 것은 작성자가 컨트롤 색상 대비를 제어하기 쉽게 하고 사용자에게 그것들을 인식하기 쉽게 합니다. 이 기술의 예는 뷰 옵션 중 하나입니다.

탭목록과 탭의 초점 스타일링

슬라이드 변경에 대한 스크린리더 낭독

자동 순환이 꺼져 있다면, 캐러셀 슬라이드 콘텐트는 라이브 영역(live region)에 포함됩니다. 이것은 스크린리더 사용자가 캐러셀 슬라이드를 훑어보기 쉽게 만듭니다. 스크린리더 사용자가 새로운 탭을 활성화 하는 경우, 사용자에게 콘텐트와 상호 작용을 할지 여부를 결정하는 데 도움이 되는 피드백을 즉각 제공하도록 새 슬라이드 콘텐트가 낭독됩니다. 매우 중요한 것은, 자동 순환이 켜진다면, 라이브 영역은 비활성 됩니다. 그렇지 않은 경우, 지속적으로 변경되는 콘텐트의 알림이 사용자가 읽고 있는 다른 것을 끊임없이 방해하기 때문에 페이지는 사용할 수 없게 됩니다.

탭 패널을 실시간으로 만드는 것은 일반적인 탭에 권장되지 않음에 주의하세요. 주 목적이 빠르고 가벼운 콘텐츠 훑어보기 인 캐러셀 사용 예에서, 라이브 영역(live region)은 스크린리더 비사용자가 자동 순환에 대해 가지는 경험의 유형을 시뮬레이션 하는데 사용됩니다.

키보드 지원

순환 제어 버튼

기능
Tab
  • 캐러셀 내의 인터랙티브 엘리먼트로 초점을 이동시킵니다
  • 순환 제어 버튼과 탭 목록은 Tab 시퀀스에서 슬라이드 콘텐트보다 앞에 있습니다.
Enter 또는 Space 캐러셀 슬라이드의 자동 순환을 전환 시킵니다.

Tabs

기능
Tab
  • tablist 안으로 초점이 이동하는 경우, 활성 tab 엘리먼트로 초점을 위치시킵니다. 캐러셀의 각 슬라이드는 tab에 의해 조작됩니다.
  • 탭 목록이 초점을 포함하고 있는 경우, tab 시퀀스에서 현재 보여지는 슬라이드 내의 링크인 다음 엘리먼트로 초점을 이동시킵니다.
Right Arrow
  • 다음 탭으로 초점을 이동시킵니다.
  • 초점이 마지막 탭에 있다면, 첫 번째 탭으로 초점을 이동시킵니다.
  • 새롭게 초점을 얻은 탭과 연관된 슬라이드를 노출시킵니다.
Left Arrow
  • 이전 탭으로 초점을 이동시킵니다.
  • 초점이 첫 번째 탭에 있다면, 마지막 탭으로 초점을 이동시킵니다.
  • 새롭게 초점을 얻은 탭과 연관된 슬라이드를 노출시킵니다.
Home 첫 번째 탭으로 초점을 이동시키고 첫 번째 슬라이드를 노출시킵니다.
End 마지막 탭으로 초점을 이동시키고 마지막 슬라이드를 노출시킵니다.

Role, Property, State, Tabindex 어트리뷰트

순환 컨트롤

역할(role) 어트리뷰트 엘리먼트 사용법
aria-label button 버튼이 수행할 동작을 반영하도록 접근 가능한 이름이 다음과 같이 변경됩니다:
  • 자동 순환이 일시 정지 된 경우, 레이블이 "자동 슬라이드 쇼 시작"으로.
  • 캐러셀이 자동으로 순환 중인 경우, 레이블이 "자동 슬라이드 쇼 중지"로.

Tabs

역할(role) 어트리뷰트 엘리먼트 사용법
암묵적인 region 역할(role) section
  • region 역할(role)은 접근 가능한 이름을 가지는 section 엘리먼트에 대해 암묵적입니다.
  • 캐러셀과 그것의 컨트롤을 랜드마크 영역으로 정의합니다.
aria-roledescription="carousel" section
  • 엘리먼트를 "영역" 보다는 "캐러셀"로 인식하도록 보조 기술에 알립니다.
  • 보조 기술이 역할(role)을 렌더링 하는 방식에는 영향을 주지만 랜드마크 영역으로 탐색하기 위한 명령 같은 기능에는 영향을 미치지 않습니다.
aria-label="TV 쇼 하이라이트" section 캐러셀 영역의 콘텐트를 설명하는 레이블을 제공합니다.
aria-live="off" div.carousel-items
  • 모든 슬라이드를 포함하는 div 엘리먼트에 적용됩니다.
  • 컨테이터를 보조 기술 사용자에게 영역 변경에 대한 정보를 자동으로 통지하지 않음을 의미하는 "off" 상태인 라이브 영역으로 식별시킵니다.
  • 캐러셀이 자동으로 순환 중인 경우 라이브 영역은 꺼집니다.
aria-live="polite" div.carousel-items
  • 모든 슬라이드를 포함하는 div 엘리먼트에 적용됩니다.
  • 컨테이너 엘리먼트를 보조 기술 사용자들에게 영역 변경에 대한 정보를 다음 가능한 기회에 통지함을 의미하는 "polite" 상태인 라이브 영역으로 식별시킵니다.
  • 이는 스크린리더가 다음과 이전 슬라이드 버튼이 활성화 될 때 슬라이드 콘텐츠를 자동으로 낭독하게 합니다.
tablist div 엘리먼트가 탭 세트에 대한 컨테이터로 제공 됨을 나타냅니다
aria-label="Slides" div 탭목록에 대한 접근 가능한 이름을 제공합니다.
tab button
  • 엘리먼트가 탭 컨트롤로 제공 됨을 나타냅니다.
  • 초점을 얻었을 때, 연관 된 tabpanel (예, slide)가 표시되도록 자동으로 활성화 됩니다.
aria-label="Slide X" button 탭에 대한 접근 가능한 이름을 제공합니다.
aria-selected="true" button
  • 탭 컨트롤이 활성화 되고 연관 된 패널이 노출 됨을 나타냅니다.
  • 탭이 초점을 얻을 때 설정 하세요.
aria-selected="false" button
  • 탭 컨트롤이 활성화 되지 않고 연관 된 패널이 노출 되지 않음을 나타냅니다.
  • 현재 노출된 슬라이드와 연관 된 탭을 제외하고 탭 세트의 모든 탭 엘리먼트에 설정하세요.
tabindex="-1" button
  • 페이지 Tab 시퀀스에서 엘리먼트를 제거합니다.
  • 선택 된 탭만 페이지 Tab 시퀀스에 있도록 탭이 선택되지 않은 경우 설정됩니다.
  • 탭 엘리먼트가 HTML button이기 때문에, 탭이 선택(활성화) 될 경우 tabindex="0"으로 설정하는 것 보다는 tabindex 어트리뷰트를 제거합니다.
  • 초점을 관리하기 위한 이 접근법은 이동(roving) tabindex 섹션에 기술되어 있습니다.
aria-controls="IDREF" button 탭과 연관 된 tabpanel 엘리먼트를 참조 시키세요.
tabpanel div
  • 엘리먼트가 연관 된 탭 엘리먼트에 의해 제어 되는 tabpanel로 제공 됨을 나타냅니다.
  • 엘리먼트는 연관 된 tab이 활성화 되지 않는 한 숨겨져 있습니다.
aria-roledescription="slide" div
  • 엘리먼트가 "tabpanel"보다는 "slide"로 식별되도록 보조 기술에 알립니다.
  • 보조 기술이 역할(role)을 렌더링 하는 방식에 영향을 주지만 보조 기술 기능에는 영향을 주지 않습니다.
aria-label="X of Y" div
  • 탭 패널(slide)에 슬라이드가 슬라이드 셋트 내 어느 위치에 있는지를 나타내는 접근 가능한 이름을 제공합니다.
  • aria-roledescription과 결합 시, 스크린리더는 위치를 가진 슬라이드로 예를 들어, "slide 1 of 6"으로 탭 패널을 낭독 할 수 있습니다.

Javascript와 CSS 소스 코드

HTML 소스 코드