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

다음 예제는 페이지가 로드 될 때 자동으로 순환을 시작하는 캐러셀에 대한 접근성에 필수적인 패턴의 기능을 보여주는 캐러셀 설계 패턴의 구현입니다. 예를 들어, 사용자가 캐러셀 안으로 초점을 이동시키거나 캐러셀 콘텐츠 위로 마우스를 가져갈 때 순환이 정지되고, 사용자가 수동으로 이전 그리고 다음 슬라이드 버튼으로 표시할 슬라이드를 제어할 수 있습니다. 예제 다음에 나오는 접근성 특성 섹션은 이 기능들에 대해 자세히 설명합니다.

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

예제 옵션

예제

접근성 특성

자동 슬라이드 순환 제어

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

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

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

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

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

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

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

키보드 지원

순환 제어 버튼

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

이전/다음 슬라이드 버튼

기능
Enter
Space
캐러셀의 다음 또는 이전 슬라이드를 표시합니다.

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

역할(role) 어트리뷰트 엘리먼트 사용법
region 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" 상태인 라이브 영역으로 식별시킵니다.
  • 이는 스크린리더가 다음과 이전 슬라이드 버튼이 활성화 될 때 슬라이드 콘텐츠를 자동으로 낭독하게 합니다.
group div.carousel-item
  • 단일 슬라이드 컨텐트를 포함하는 각 엘리먼트에 적용됩니다.
  • 보조 기술 사용자가 슬라이드 경계를 인식할 수 있게 합니다.
aria-roledescription="slide" div.carousel-item
  • 보조 기술에 엘리먼트를 "group" 대신 "slide"로 인식하도록 알립니다.
  • 보조 기술이 역할(role)을 렌더링 하는 방식에 영향을 주지만 group 엘리먼트와 관련된 보조 기술 기능은 제거하지 않습니다.
aria-label="N of 6" div.carousel-item
  • 6개의 슬라이드 중 노출되는 슬라이드를 사용자가 이해하도록 도움이 되는 고유의 레이블을 각 슬라이드에 제공하세요.
  • 주의: 일반적으로, 접근 가능한 이름으로 설정 된 위치와 크기 정보를 포함하는 것은 적절하지 않습니다. 그룹 엘리먼트가 aria-setsizearia-posinset을 지원하지 않기 때문에 이 구현에서 예외가 도움이 됩니다.
aria-label="LABEL_STRING" button 자동 순환 일시 정지 버튼과 다음 및 이전 슬라이드 버튼에 대한 접근 가능한 이름을 정의합니다.
aria-controls="IDREF" button
  • 페이지에 버튼 컨트롤인 콘텐트를 식별시킵니다.
  • 모든 슬라이드를 포함하는 div을 참조시키세요.

Javascript와 CSS 소스 코드

HTML 소스 코드