WAI-ARIA 작성 방법 1.2

W3C Editor's Draft

More details about this document
현재 버전:
https://w3c.github.io/aria-practices/
최신 버전:
https://www.w3.org/TR/wai-aria-practices-1.2/
최신 편집 초안:
https://w3c.github.io/aria-practices/
History:
https://www.w3.org/standards/history/wai-aria-practices-1.2/
Commit history
편집자:
(Facebook)
(University of Illinois)
(Adobe)
Zoë Bijl (Invited Expert)
Michael Cooper (W3C)
이전 편집자:
Joseph Scheuhammer (Inclusive Design Research Centre, OCAD University) - 이전
Lisa Pappas (SAS) - 이전
Rich Schwerdtfeger (IBM Corporation) - 이전
Feedback:
GitHub w3c/aria-practices (pull requests, new issue, open issues)
public-aria-practices@w3.org with subject line [wai-aria-practices-1.2] … message topic … (archives)

이 번역본은 ARIA 1.2 버전에 대한 개인 번역본으로 공식 번역본이 아닙니다.
잘못된 번역으로 원문의 의도를 해치지 않기 위해 의도적으로 직역을 선택하였으며, 일부는 이해를 돕기 위해 원문의 의도를 해치지 않는 선에서 의역되거나 각색되었습니다.
원문은 아래 링크에서 확인이 가능하며, 오역이 있을 경우 Github issue에 남겨시면 확인 후 수정하도록 하겠습니다.
원문: WAI-ARIA Authoring Practices 1.2

요약

이 문서는 독자에게 접근 가능한 리치 인터넷 어플리케이션을 만드는데 WAI-ARIA 1.2 [WAI-ARIA]를 어떻게 사용하는지에 대한 이해를 제공합니다. WAI-ARIA 명세만으로는 대다수의 작성자에게 명확하지 않을 수 있는 고려 사항들을 설명하고 WAI-ARIA 역할(role), 상태(state), 속성(property)을 사용하여 위젯, 내비게이션, 동작을 접근 가능하게 할 수 있는 처리 방법을 추천합니다. 이 문서는 주로 웹 어플리케이션 개발자들을 대상으로 하지만, 지침은 유저 에이전트와 보조 기술 개발자에게도 유용합니다.

이 문서는 WAI-ARIA 개요에 기술된 WAI-ARIA 제품군의 일부입니다.

현재 문서의 상태

이 부분은 현재 문서의 발행 당시 상태에 대해 기술합니다. W3C 발행 문서의 최신 목록 및 테크니컬 리포트 최신판을 https://www.w3.org/TR/ 의 W3C technical reports index 에서 열람할 수 있습니다.

이 문서는 웹 접근성 이니셔티브접근 가능한 리치 인터넷 어플리케이션 워킹 그룹의 편집자 초안입니다. 이 문서는 Accessible Rich Internet Applications (WAI-ARIA) 1.2 [WAI-ARIA-1.2] 명세를 지원하며, 기술 명세에 상응하는 것을 넘어 명세를 이해하는데 중요한 상세한 조언과 예제들을 제공합니다.

이 초안은 WAI-ARIA 작성 방법 1.2에 대해 계획된 일부 내용만을 포함합니다. 전체 지침에 대한 계획을 보려면 작성 방법 마일스톤 계획을 확인하세요.

여기 제공된 정보 상의 피드백은 정보와 운영에 대해 완전한 접근을 제공하는 리치 인터넷 어플리케이션의 궁극적인 성공에 필수적입니다. 접근 가능한 리치 인터넷 어플리케이션 워킹 그룹은 특히 다음과 같은 질문을 합니다:

의견을 남기려면, W3C ARIA Practices GitHub repository에 이슈를 남기거나, 그것이 불가능하다면, public-aria-practices@w3.org (comment archive)로 이메일을 보내주세요.

This document was published by the Accessible Rich Internet Applications Working Group as an Editor's Draft.

Publication as an Editor's Draft does not imply endorsement by W3C and its Members.

This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

This document is governed by the 03 November 2023 W3C Process Document.

1. 소개

ARIA 작성 방법 지침(APG)은 접근성 의미론를 적절히 전달하고 일반적인 키보드 규칙을 구현하는 웹 사이트를 개발하여 보조 기술 및 키보드 인터페이스 사용자를 위한 접근 가능한 웹 경험을 만드는 방법을 설명합니다. 또한 고대비 및 감소된 동작을 위한 운영 체제 설정 지원과 같은, 밀접하게 관련된 몇 가지 주제에 대한 지침을 제공합니다.

접근 가능한 의미론은 보조 기술 사용자가 요소를 이해하고 사용하는 것을 위해 전달되어야 하는 유저 인터페이스 요소의 의미를 가리킵니다. 예를 들어, 검색 아이콘 버튼을 시각적으로 인식할 수 있는 사람들은 검색을 수행하도록 활성화 될 수 있는 요소를 스타일 및 위치에 따라 이해합니다. 이 아이콘을 스크린리더 사용자가 접근할 수 있도록하기 위해, 전달되어야 할 의미 중 하나는 요소가 인터랙티브 버튼임을 나타내는 것입니다. 또한, 키보드 접근성은 버튼이 초점을 얻을 수 있는 것을 요구하며, 키보드 규칙은 버튼이 초점을 얻은 경우 활성화를 위해 EnterSpace를 누르는 것을 요구합니다. APG는 일반적인 버튼 및 팝업 메뉴에서부터 복잡한 트리 그리드에 이르기까지 많은 공통 설계 패턴에 대한 접근성 의미론을 전달하는 방법과 키보드 접근성 구현 방법을 설명합니다. 또한 ARIA 랜드마크 영역으로 웹 페이지 구조를 전달하는 방법과 접근 가능한 이름을 인코딩하는 많은 방법을 효과적으로 활용하는 방법과 같은, 이 패턴들과 관련된 필수 사례를 설명합니다.

APG는 패턴과 사례 두 가지 주요 섹션을 구성 됩니다. 각 패턴은 버튼, 메뉴, 대화상자와 같은 공통 유저 인터페이스 요소를 접근 가능하게 만드는 방법을 설명하고 패턴의 기능적 예제 구현을 제공합니다. 사례 섹션은 리치 인터넷 어플리케이션 경험을 접근 가능하게 만들 때 나타나는 다양한 접근성 요구 사항을 충족하는 방법에 대해서 자세히 설명합니다. 예를 들어, 접근 가능한 이름과 설명 제공에 대한 사례 섹션에서는 7가지 다른 이름 지정 기법에 대한 자세한 설명과 80가지 이상의 요소 유형에 대한 이름 지정 지침을 제공하는 표를 제공합니다.

APG는 웹 개발 특히 HTML과 CSS에 대한 기본적인 이해를 전제로 합니다. 사이트 디자인 시스템과 컴포넌트 라이브러리에서 작업하는 디자이너와 엔지니어에게 특히 유용할 수 있습니다. 하지만, APG는 접근 가능한 경험을 만드는데 필요한 일부만 다룬다는 점을 이해하는 것이 중요합니다. 접근성을 더 광범위하게 이해하려면, WAI 접근성 기본WAI 설계 및 개발 개요부터 시작하는 것이 좋습니다.

APG 패턴에 사용되고 APG 사례에 기술 된 접근성 의미론은 WAI-ARIA 1.2 명세에 기술되어 있습니다. 즉, ARIA 명세는 요소와 role="button"의 의미와 같은 보조 기술에 대한 상태를 설명하는 어트리뷰트의 의미를 표준화합니다. 이러한 어트리뷰트와 보조 기술이나 키보드 탐색에 의존하는 사람들이 사용하는 사이트를 만드는데 요구되는 기타 기능은 HTML, JavaScript, CSS, SVG와 같은 웹 사이트를 만드는데 사용되는 언어에 기본적으로 포함되어 있지 않습니다. W3C 웹 접근성 이니셔티브(WAI)의 접근 가능한 리치 인터넷 어플리케이션 워킹 그룹(ARIA WG)은 여러 W3C 표준 활동을 통해 이러한 결함들을 해결하고 있습니다. WAI-ARIA 개요WAI-ARIA의 추가 배경을 제공하고, 이러한 활동을 요약하고, WAI-ARIA 제품군에 포함된 다른 문서를 나열합니다.

2. 먼저 읽어주세요

2.1 잘못된 ARIA보다 ARIA를 안쓰는게 낫다

기능적으로, ARIA (role), 상태(state), 속성(property)들은 보조 기술에 대해 CSS와 유사합니다. 스크린리더 사용자들의 경우, ARIA는 비시각적 경험의 렌더링을 제어합니다. 잘못된 ARIA는 잠재적으로 비시각적 경험에 대해 심각한 손상을 주며 시각적 경험을 잘못 전달합니다.

ARIA나 이 문서의 어떤 지침을 사용하기 이전에, 다음의 두 가지 기본 원칙을 이해하는데 시간을 들이세요.

2.1.1 원칙 1: 역할(role)은 약속이다

이 코드는:


        <div role="button">Place Order</div>
          

해당 <div>의 작성자가 버튼에 기대되는 키보드 인터랙션을 제공하는 JavaScript도 구현했다는 약속입니다. HTML 입력 엘리먼트와 달리, ARIA 역할(role)은 브라우저가 키보드 동작이나 스타일링을 제공하지 않습니다.

그 역할(role)의 약속을 이행하지 않고 사용하는 것은 주문을 빼먹고 쇼핑 카트를 비우는 "주문하기" 버튼을 만드는 것과 유사합니다.

이 지침의 목표 중 하나는 각 ARIA 역할(role)에 대해 기대되는 동작을 정의하는 것입니다.

2.1.2 원칙 2: ARIA는 은폐와 강화를 통해 힘과 위험 모두를 창출할 수 있습니다.

유저 인터페이스 엘리먼트들의 의미와 목적에 대해 필요한 정보 보조 기술을 접근성 의미론이라고 합니다. 보조 기술의 관점에서, ARIA는 작성자에게 보조 기술이 달리 확실하게 추론 할 수 없을 중요한 접근성 의미론으로 HTML과 SVG 엘리먼트를 꾸밀 수 있는 능력을 제공합니다.

일부 ARIA는 가면과 같습니다; 원래의 의미나 콘텐트를 완전히 감추거나 덮어 씌웁니다.


        <a role="menuitem">보조 기술 사용자는 이 엘리먼트를 링크가 아니라 메뉴의 항목으로 인지합니다.</a>
        <a aria-label="보조 기술 사용자는 링크 텍스트가 아니라 이 aria-label의 콘텐트만을 인식할 수 있습니다">링크 텍스트</a>

반면에, 일부 ARIA의 사용은 멜빵이나 벨트에 가깝습니다; 원본 콘텐트에 필수적인 지원을 제공하는 의미를 추가합니다.


        <button aria-pressed="false">Mute</button>
      

이것이 ARIA의 힘입니다. 작성자가 보조 기술들이 확실하게 해석할 수 있는 방법으로 거의 모든 유저 인터페이스를 기술할 수 있게 하므로, 보조 기술 사용자에게 컴포넌트를 접근 가능하게 할 수 있습니다.

이것은 동시에 ARIA의 위험이기도 합니다. 작성자는 부주의하게 접근성 의미를 덮어쓸 수도 있습니다.


  <table role="log">
    <!--
      보조 기술 사용자가 표로 인식하지 못하는 표.
      log 역할(role)은 브라우저에게 이것이 표가 아니라 기록이라고 알립니다.
    -->
  </table>
  <ul role="navigation">
    <!-- 이것은 목록이 아니라 navigation 영역 입니다. -->
    <li><a href="uri1">nav link 1</li>
    <li><a href="uri2">nav link 2</li>
    <!-- 오류! 위 목록 항목들은 목록에 없습니다! -->
  </ul>

2.2 브라우저와 보조 기술 지원

제품에 이 가이드의 코드를 사용하기 이전에 보조 기술 상호 운용성 테스트가 필수적입니다. 이 지침의 목적은 ARIA 명세에 정의 된 대로 ARIA 1.2의 적절한 사용을 실제로 보여주는 것이기 때문에, 설계 패턴, 참고 예제, 샘플 코드는 일부러 브라우저와 보조 기술들의 ARIA 1.2에 대한 지원의 격차에 따른 문제를 해결하기 위한 코딩 기법을 기술하고 구현하지 않습니다. 따라서, 대상 고객과 관련된 각 브라우저와 보조 기술 조합으로 구현을 철저하게 테스트 하는 것이 바람직합니다.

비슷하게, 이 지침의 JavaScript와 CSS는 작성 시점에서의 가장 최신 버전의 크롬, 파이어폭스, 인터넷 익스플로러, 사파리와 호환되도록 작성되었습니다. 인터넷 익스플로러에서는 일부 JavaScript와 CSS가 제대로 동작하지 않을 수 있습니다.

ARIA 워킹 그룹과 다른 컨트리뷰터들이 오류를 못 보고 지나친 경우를 제외하고, 이 지침의 특정 브라우저나 특정 보조 기술에서 제대로 동작하지 않는 예제는 브라우저나 보조 기술 버그를 시연하는 것입니다. 따라서 브라우저와 보조 기술 개발자는 이 지침의 코드를 활용하여 ARIA 1.2에 대한 지원 품질을 평가할 수 있습니다.

2.3 모바일과 터치 지원

현재, 이 지침은 모바일 브라우저나 터치 인터페이스와 호환되는 예제는 나와 있지 않습니다. 일부 예제는 모바일과 터치 지원을 향상시키는 특정 기능이 포함되어 있지만, 일부 ARIA 기능은 모바일 브라우저에서 지원되지 않습니다. 또한, 모바일 브라우저에서 동작하는 터치 인터랙션을 제공하기 위한 표준화 된 접근 방식은 아직 없습니다.

터치와 모바일 지원에 대한 추가 지침은 향후 지침 릴리즈에 계획되어 있습니다.

3. 설계 패턴과 위젯

이 섹션은 WAI-ARIA 역할(role), 상태(state), 속성(property)을 적용하고 키보드 지원을 구현하여 일반적인 리치 인터넷 어플리케이션 패턴과 위젯을 접근 가능하게 만드는 방법을 보여줍니다.

3.1 아코디언 (Show/Hide 기능이 있는 섹션)

아코디언은 각각 콘텐츠 섹션을 나타내는 제목, 콘텐트 스니펫, 또는 썸네일을 포함하는 수직으로 쌓여있는 인터랙티브 제목 집합입니다. 제목은 연관된 콘텐츠 섹션을 사용자에게 나타내거나 숨길 수 있는 컨트롤로 기능합니다. 아코디언은 일반적으로 단일 페이지에서 콘텐트의 여러 섹션들을 표현할 때 스크롤 할 필요성을 줄이기 위해 사용됩니다.

아코디언을 이해하는데 필요한 용어:

아코디언 헤더:
콘텐트 섹션을 노출시키고 일부 구현에서는 숨기는 컨트롤 역할을 하는, 콘텐트 섹션에 대한 레이블이나 콘텐트 섹션을 나타내는 썸네일.
아코디언 패널:
아코디언 헤더와 연관된 콘텐트 섹션.

일부 아코디언에서는 아코디언 헤더 근처에 항상 보이는 추가 엘리먼트가 있습니다. 예를 들어, 메뉴버튼은 그 섹션에 적용되는 동작으로의 접근을 제공하기 위해 각 헤더와 함께 있을 수 있습니다. 그리고 경우에 따라, 숨겨진 콘텐트 일부가 가시적으로 보여지도록 유지될 수도 있습니다.

예제

아코디언 예: 한 번에 하나의 섹션을 보여주기 위해 아코디언을 사용하여 세 개 섹션으로 분리된 양식을 보여줍니다.

키보드 인터랙션

  • EnterSpace:
    • 초점이 축소 된 패널에 대한 아코디언 헤더에 있다면, 관련된 패널을 확장시킵니다. 동작이 항상 단 하나의 패널만 확장 되는 것을 허용하면서 다른 패널이 확장되어 있는 경우, 그 패널을 축소시킵니다.
    • 초점이 확장 된 패널에 대한 아코디언 헤더에 있다면, 동작이 축소를 지원하는 경우 패널을 축소 시킵니다. 일부 동작은 항상 하나의 패널이 확장되어 있고 오직 하나의 패널만이 확장하도록 요구합니다; 따라서 이 경우에는 축소 기능을 지원하지 않습니다.
  • Tab: 초점을 다음 초점을 얻을 수 있는(focusable) 엘리먼트로 이동시킵니다; 아코디언 내의 모든 초점을 얻을 수 있는(focusable) 엘리먼트는 페이지 Tab 순서에 포함됩니다.
  • Shift + Tab: 초점을 이전 초점을 얻을 수 있는(focusable) 엘리먼트로 이동시킵니다; 아코디언 내의 모든 초점을 얻을 수 있는(focusable) 엘리먼트는 페이지 Tab 순서에 포함됩니다.
  • Down Arrow (선택사항): 초점이 아코디언 헤더에 있다면, 다음 아코디언 헤더로 초점을 이동시킵니다. 초점이 마지막 아코디언 헤더에 있다면, 아무 것도 하지 않거나 첫 번째 아코디언 헤더로 초점을 이동시킵니다.
  • Up Arrow (선택사항): 초점이 아코디언 헤더에 있다면, 이전 아코디언 헤더로 초점을 이동시킵니다. 초점이 첫 번째 아코디언 헤더에 있다면, 아무 것도 하지 않거나 마지막 아코디언 헤더로 초점을 이동시킵니다.
  • Home (선택사항): 초점이 아코디언 헤더에 있다면, 첫 번째 아코디언 헤더로 초점을 이동시킵니다.
  • End (선택사항): 초점이 아코디언 헤더에 있다면, 마지막 아코디언 헤더로 초점을 이동시킵니다.

WAI-ARIA 역할(role), 상태(state), 속성(property):

  • 각 아코디언 헤더의 제목은 button 역할(role)을 가진 엘리먼트에 포함됩니다.
  • 각 아코디언 헤더 button은 페이지의 정보 구성에 적절한 aria-level로 정해진 값을 가지는 heading 역할(role)을 가진 엘리먼트로 감싸집니다.
    • 네이티브 호스트 언어가 HTML 헤딩 태그 같이, 암묵적인 headingaria-level을 가지고 있는 경우, 네이티브 호스트 언어 엘리먼트가 사용될 수 있습니다.
    • button 엘리먼트는 heading 엘리먼트 내의 유일한 엘리먼트입니다. 즉, 다른 보여지도록 유지되는 엘리먼트가 있다면, heading 엘리먼트에 포함되지 않습니다.
  • 아코디언 헤더와 연관된 아코디언 패널이 보여지는 상태라면, 헤더 button 엘리먼트는 true로 설정된 aria-expanded를 가집니다. 패널이 보여지지 않는 상태라면, aria-expandedfalse로 설정됩니다.
  • 아코디언 헤더 button 엘리먼트는 아코디언 패널 콘텐트를 포함하는 엘리먼트의 ID로 설정된 aria-controls 를 가집니다.
  • 아코디언 헤더와 연관된 아코디언 패널이 보이는 상태이고 아코디언이 패널이 축소되는 것을 허용하지 않는다면, 헤더 button 엘리먼트는 true로 설정된 aria-disabled를 가집니다.
  • 선택적으로, 패널 콘텐트에 대한 컨테이너를 제공하는 각 엘리먼트는 region 역할(role)과 패널의 가시성을 제어하는 버튼을 가리키는 값을 가진 aria-labelledby를 가집니다.
    • 랜드마크 영역을 급증하게 만드는 상황에서는, 예를 들어 동시에 확장 될 수 있는 거의 6개 이상의 패널들을 포함하는 아코디언의 경우, region 역할(role)을 사용하는 것을 지양하세요.
    • region 역할(role)은 패널이 헤딩 엘리먼트를 포함하거나 중첩된 아코디언이 포함 된 경우 스크린리더 사용자가 구조를 인식하는데 특히 유용합니다.

3.2 알림(alert)

알림(alert)은 사용자의 작업을 방해하지 않고 사용자의 관심을 끌어내는 방법으로 짤막한 중요한 메세지를 표시하는 엘리먼트입니다. 동적으로 렌더링 된 알림(alert)은 대부부의 스크린리더에 의해 자동으로 낭독되며, 일부 운영체제에서는 알림(alert)음을 발생시킬 수도 있습니다. 이 때, 스크린리더는 페이지가 완전히 로드되기 전에는 페이지에 있는 알림(alert)을 사용자에게 알려주지 않는다는 점을 유념해야 합니다.

알림(alert)은 사용작의 작업을 계속 할 수 있는 것을 방해하지 않으면서 중요하고 시간에 민감할 수 있는 정보를 제공하기 위한 것이기 때문에, 키보드 초점에 영향을 주지 않는 것이 매우 중요합니다. 알림(alert) 대화상자는 작업 흐름을 중단해야 하는 상황에 맞게 설계되었습니다.

자동으로 사라지는 알림(alert)을 설계하는 것을 피하는 것도 중요합니다. 너무 빠르게 사라지는 알림(alert)은 WCAG 2.0 성공 기준 2.2.3을 충족시키지 못하게 할 수 있습니다. 다른 중요한 설계 고려사항은 알림(alert)으로 인한 중단 빈도입니다. 잦은 중단은 시각과 인지 장애를 가진 사람들의 사용성을 저해하며, 이는 WCAG 2.0 성공 기준 2.2.4의 요구사항을 충족시키는 것을 더욱 어렵게 만듭니다.

예제

알림(alert) 예

키보드 인터랙션

해당되지 않음.

WAI-ARIA 역할(role), 상태(state), 속성(property)

위젯은 alert 역할(role)을 가집니다.

3.3 알림(alert) 및 메세지 대화상자

알림(alert) 대화상자는 중요한 메세지를 전달하고 응답을 얻기 위해 사용자의 작업 흐름을 잠시 중단시키는 모달 대화상자입니다. 예제는 작업 확인 프롬프트와 알림(alert) 메세지 확인을 포함합니다. alertdialog 역할(role)은 보조 기술 및 브라우저가 다른 대화상자와 알림(alert) 대화상자를 구별할 수 있게 하기 때문에 시스템 알림(alert)음을 재생하는 것 같은 알림(alert) 대화 상자에 특수 처리를 제공하는 옵션이 있습니다.

예제

알림(alert) 대화상자 예제: 알림(alert) 대화상자를 보여주는 확인 프롬프트.

키보드 인터랙션

모달 대화상자 패턴에 대한 키보드 인터랙션 섹션 참고.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • 알림(alert) 메세지와 대화상자 버튼을 포함하여, 대화상자의 모든 엘리먼트를 포함하는 엘리먼트는 alertdialog 역할(role)을 가집니다.
  • alertdialog 역할(role)을 가진 엘리먼트는:
    • 대화상자가 눈에 보이는 레이블을 가지는 경우 aria-labelledby에 대화상자의 제목을 포함하는 엘리먼트를 참조하는 값을 가지거나
    • 대화상자가 눈에 보이는 레이블을 가지지 않는 경우 aria-label에 값을 가집니다.
  • alertdialog 역할(role)을 가진 엘리먼트는 aria-describedby에 알림(alert) 메세지를 포함하는 엘리먼트를 참조하는 값을 가집니다.

3.5 버튼

button은 양식 제출하기, 대화상자 열기, 작업 취소하기, 삭제 동작 수행하기 같이 사용자가 작업이나 이벤트를 작동 시킬 수 있게 하는 위젯입니다. 사용자에게 버튼이 대화상자를 띄우는 것을 알리는 일반적인 규칙은 버튼 레이블에 "…" (생략) 예를 들어, "다른 이름으로 저장…"을 추가하는 것입니다.

일상적인 버튼 위젯 외에도, WAI-ARIA는 두 가지 다른 유형의 버튼을 지원합니다:

Note

버튼에 의해 수행되는 작업 유형은 링크의 기능과 명백하게 다릅니다 (링크 패턴 참고). 위젯의 겉모습과 역할이 제공하는 기능과 일치하는 것이 중요합니다. 그럼에도 불구하고, 엘리먼트는 때때로 시각적으로 링크의 스타일을 가지지만 버튼의 동작을 수행합니다. 이러한 경우, 엘리먼트에 button 역할(role)을 부여하는 것이 보조 기술 사용자가 엘리먼트의 기능을 이해하는데 도움이 됩니다. 그러나, 더 나은 해결책은 기능과 ARIA 역할(role)에 맞게 시각적 디자인을 조정하는 것입니다.

예제

  • 버튼 예제: 접근 가능한 명령 및 전환 버튼으로 만들어진 클릭 가능한 HTML divspan 엘리먼트의 예제입니다.
  • 버튼 예제 (IDL): 접근 가능한 명령 및 전환 버튼으로 만들어진 클릭 가능한 HTML divspan 엘리먼트의 예제입니다. 이 예제는 IDL 인터페이스를 사용합니다.

키보드 인터랙션

버튼이 초점을 가진 경우:

  • Space: 버튼을 활성화 시킵니다.
  • Enter: 버튼을 활성화 시킵니다.
  • 다음 활성화 후, 초점이 버튼의 동작 유형에 따라 설정됩니다. 예를 들어:
    • 버튼을 활성화 하는 것이 대화 상자를 여는 경우, 초점은 대화상자 내부로 이동합니다. (대화상자 패턴 참고)
    • 버튼을 활성화 하는 것이 대화 상자를 닫는 경우, 대화 상자 컨텍스트에서 수행 된 함수가 다른 엘리먼트로 연결되지 않는 한 일반적으로 초점이 대화 상자를 연 버튼으로 되돌아 갑니다. 예를 들어, 대화 상자의 취소 버튼을 활성화 하는 것은 초점을 대화 상자를 연 버튼으로 돌려줍니다. 하지만, 대화 상자가 열려 있는 페이지를 삭제 하는 작업을 수락하는 경우, 초점은 논리적으로 새로운 컨텍스트로 이동 될 것입니다.
    • 버튼을 활성화 하는 것이 현재 컨텍스트를 종료하지 않는 경우, 예를 들어 적용이나 재계산 버튼, 초점은 일반적으로 활성화 이후 버튼에 유지됩니다.
    • 버튼 동작이 마법사의 다음 단계로 이동 또는 다른 검색 기준을 추가하는 것과 같이 컨텍스트 변경을 나타내는 경우, 해당 동작의 시작점으로 초점을 이동시키는 것이 적절합니다.
    • 버튼이 단축키로 활성화 되는 경우, 초점은 일반적으로 단축키가 활성화 된 컨텍스트에 유지됩니다. 예를 들어, Alt + U가 목록에 현재 초점을 얻은 항목을 목록의 한 위치 위로 이동 시키는 "Up" 버튼에 할당되어 있다면, 목록에 초점이 있을 때 Alt + U를 누르는 것은 초점을 목록에서 이동시키지 않을 것입니다.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • 버튼은 button 역할(role)을 가집니다.
  • button은 접근 가능한 이름을 가집니다. 기본적으로, 접근 가능한 이름은 버튼 엘리먼트 내부의 텍스트 콘텐트로부터 계산됩니다. 하지만, aria-labelledbyaria-label로 제공 될 수도 있습니다.
  • 버튼의 기능 설명이 존재하는 경우, 버튼 엘리먼트는 설명을 포함하는 엘리먼트의 ID로 설정 된 aria-describedby를 가집니다.
  • 버튼과 관련된 동작이 사용할 수 없는 경우, 버튼은 true로 설정 된 aria-disabled를 가집니다.
  • 버튼이 전환 버튼인 경우, aria-pressed 상태를 가집니다. 버튼이 켜져 있는 경우, 이 상태의 값은 true이고, 꺼져 있는 경우 상태는 false입니다.

3.7 체크상자

WAI-ARIA체크상자 위젯의 두 가지 형태를 지원합니다:

  1. 이중 상태: 체크상자의 가장 일반적인 유형, 사용자가 두 선택 -- 체크와 미체크 사이를 전환 할 수 있도록 합니다.
  2. 삼중 상태: 이 유형의 체크상자는 부분적으로 체크 된 것으로 알려진 추가적인 세 번째 상태를 지원합니다.

삼중 상태 체크상자의 한 가지 일반적인 사용은 단일 삼중 상태 체크상자가 설치 옵션 항목 전체 그룹의 상태를 나타내고 조작하는데 사용되는 소프트웨어 설치 마법사에서 발견 될 수 있습니다. 그리고, 각 그룹의 각 옵션 항목은 개별적으로 이중 상태 체크상자로 켜거나 끌 수 있습니다.

사용자는 삼중 상태 체크상자를 다음의 단일 동작과 함께 그룹 내 모든 옵션 항목을 변경하는데 사용할 수 있습니다:

예제

키보드 인터랙션

체크상자가 초점을 얻을 때, Space키를 눌러 체크상자의 상태를 변경합니다.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • 체크상자는 checkbox 역할(role)을 가집니다.
  • 체크상자는 다음 중 하나에 의해 제공 된 접근 가능한 레이블을 가집니다:
    • checkbox 역할(role)을 가진 엘리먼트 내에 포함된 눈에 보이는 텍스트 콘텐츠.
    • checkbox 역할(role)을 가진 엘리먼트에 설정 된 aria-labelledby 값에 의해 참조 된 눈에 보이는 레이블.
    • checkbox 역할(role)을 가진 엘리먼트에 설정 된 aria-label.
  • 체크 된 경우, 체크상자 엘리먼트는 true로 설정 된 aria-checked 상태를 가집니다.
  • 체크 되지 않은 경우, false로 설정 된 aria-checked 상태를 가집니다.
  • 부분적으로 체크 된 경우, mixed로 설정 된 aria-checked 상태를 가집니다.
  • 체크상자 세트가 눈에 보이는 레이블을 가진 논리적 그룹으로 존재한다면, 체크상자들은 레이블을 포함하는 엘리먼트의 ID로 설정 된 aria-labelledby 속성(property)을 가진 group 역할(role)을 가진 엘리먼트 안에 포함되어야 합니다.
  • 화면이 체크상자나 체크상자 그룹과 관련 된 부가 설명적인 정적 텍스트를 포함한다면, 체크상자나 체크상자 그룹은 설명을 포함하는 엘리먼트의 ID로 설정 된 aria-describedby 속성(property)을 가집니다.

3.8 콤보박스

콤보박스는 사용자가 콤보박스에 대한 값을 가능한 값들의 모음에서 선택할 수 있도록 한 입력 위젯 및 연관 된 팝업입니다. 일부 구현에서는 팝업이 허용 된 값을 나타내는 반면 일부 다른 구현에서는 팝업이 추천 값을 나타내기도 하며, 사용자는 제안 된 것 중 하나를 선택하거나 값을 타이핑 할 수 있습니다. 팝업은 목록상자그리드, 트리, 혹은 대화상자일 수 있습니다. 많은 구현들은 제 3의 선택적인 엘리먼트 -- 팝업의 사용 가능성을 나타내는 콤보박스에 인접한 그래픽 열기 버튼도 포함합니다. 열기 버튼을 활성화면 제안이 사용 가능한 경우 팝업을 노출합니다.

콤보박스 패턴은 몇 가지 선택적인 동작을 제공합니다. 가장 구체화 된 형태 중 하나는 텍스트 입력입니다. 일부 콤보박스는 사용자가 콤보박스에 텍스트를 입력하고 수정할 수 있도록 하고 다른 일부는 아닙니다. 콤보박스가 텍스트 입력을 지원하지 않는다면, 사용자가 값을 선택할 수 있는 유일한 방법이 팝업에 있는 값을 선택하는 것임을 의미하는, 선택 전용으로 간주됩니다. 예를 들어, 일부 브라우저에서, size="1"인 HTML select 엘리먼트는 보조 기술에 콤보박스로 표현됩니다. 그렇지 않고, 콤보박스가 텍스트 입력을 지원하는 경우, 편집 가능한 것으로 간주됩니다. 편집 가능한 콤보박스는 사용자가 임의의 값을 입력하도록 허용하거나, 타이핑 입력이 팝업에 나타난 제안을 필터링 하도록 제공되는 경우 허용 된 값의 별개 집합으로 값을 제한 할 수 있습니다.

팝업은 기본적으로 숨겨집니다, 즉, 기본 상태는 접혀있습니다. 확장-- 팝업 표시 -- 을 작동시키는 조건은 각 구현에 따라 다릅니다. 확장을 작동시키는 일부 가능한 조건은 다음과 같습니다:

콤보박스 위젯은 다음 두 가지 시나리오 중 하나에서 사용자 입력을 획득하는데 유용합니다:

  1. 값은 미리 정의 된 허용 된 값 세트 중 하나여야(must) 합니다. 예를 들어, 위치 필드는 유효한 위치 이름을 포함해야 합니다. 목록상자와 메뉴 버튼 패턴이 이 시나리오에 유용하다는 것을 참고하세요; 콤보박스와 대체 패턴의 차이점은 아래에 기술 되어 있습니다.
  2. 임의의 값이 허용되지만, 사용자에게 가능한 값을 제안하는 것이 유리합니다. 예를 들어, 검색 필드는 사용자 시간을 절약하기 위해 유사하거나 이전의 검색을 제안할 수 있습니다.

팝업으로 표시되는 가능한 값의 특성과 그것들이 표시되는 방식을 자동완성 동작이라고 부릅니다. 콤보박스는 다음 4가지 자동완성 형식 중 하나를 가질 수 있습니다:

  1. 자동완성 없음: 콤보박스가 편집 가능하고, 팝업이 작동 되었 때, 콤보박스에 입력된 문자와 관계 없이 제안 값은 동일한 값을 포함합니다. 예를 들어, 팝업은 최근 입력되었던 값들을 제안하고, 제안 항목은 사용자 타이핑에 따라 변경되지 않습니다.
  2. 수동 선택 목록 자동완성: 팝업이 작동 되었을 때, 제안 값이 나타납니다. 콤보박스가 편집 가능한 경우, 제안 값은 콤보박스에 입력 된 문자와 완전히 또는 논리적으로 일치합니다. 사용자가 타이핑 한 문자열은 사용자가 팝업의 값을 선택하지 않는 한 콤보박스의 값이 됩니다.
  3. 자동 선택 목록 자동완성: 콤보박스가 편집 가능하고, 팝업이 작동 되었을 때, 콤보박스에 타이핑 된 문자와 정확히 또는 논리적으로 일치하는 값이 나타나고, 첫 번째 제안 항목이 자동으로 선택된 것으로 강조 표시 됩니다. 사용자가 다른 제안 항목을 선택하거나 콤보박스의 문자열을 변경하지 않는 한 콤보박스가 초점을 잃을 때 자동으로 선택 된 제안 항목이 콤보박스의 값이 됩니다.
  4. 인라인 자동완성 목록: 자동 선택 목록과 동일하며 한 가지 추가 기능이 있습니다. 선택 된 제안 항목인 완성 문자열의 사용자가 타이핑 하지 않은 부분은 콤보박스의 입력 커서 뒤에 인라인으로 표시됩니다. 인라인 완성 문자열은 시각적으로 강조 표시되고 선택 된 상태를 가집니다.

콤보박스가 편집 가능하고 자동완성 목록 형식이 있는 경우, 사용자가 타이핑 할 때 팝업이 나타났다 사라질 수 있습니다. 예를 들어, 사용자가 다섯 개의 제안이 표시되도록 하는 두 개 문자를 입력하고 일치하는 제안을 가지지 않는 문자열을 형성하는 세 번째 문자를 타이핑 한다면, 팝업이 닫히고 인라인 완성 문자열이 있다면 사라집니다.

시각적으로 간결하고 사용자가 개별 선택 항목들로부터 단일 항목을 선택할 수 있도록 하는 다른 2가지 위젯은 목록상자메뉴 버튼입니다. 콤보박스를 목록상자와 메뉴 버튼으로부터 구별하는 한 가지 기능은 사용자의 선택이 편집 가능한 필드에 값으로 표현될 수 있다는 것이고, 이는 사용자가 클립보드에 복사할 값의 일부 또는 전체를 선택할 수 있게 한다는 것입니다. 콤보박스와 메뉴 버튼은 사용자가 이전에 선택한 항목을 잃지 않고 허용된 선택 항목을 탐색 할 수 있도록 구현될 수 있습니다. 즉, 사용자가 콤보박스 팝업이나 메뉴의 사용 가능한 선택 항목을 탐색한 뒤 escape를 누를 수 있고, 이는 이전 입력 변경 없이 팝업이나 메뉴를 닫습니다. 대조적으로, 단일 선택 목록상자의 옵션 항목을 탐색하는 것은 즉시 그 값을 변경하고, escape는 취소 메커니즘을 제공하지 않습니다. 콤보박스와 목록상자는 aria-required="true"로 필수 항목으로 표시 될 수 있고, 다른 값과 구별하는 접근 가능한 이름을 가집니다. 따라서, 보조 기술 사용자가 기본 상태의 콤보박스나 목록상자에 초점을 주면, 위젯에 대한 이름과 값을 모두 인식할 수 있습니다. 하지만, 메뉴 버튼은 필수 표기가 될 수 없고, 접근 가능한 이름은 있지만 값은 가지지 못하므로 접힌 상태에서 사용자의 선택을 전달하는데 적합하지 않습니다.

예제

키보드 인터랙션

  • Tab: 콤보박스가 페이지 Tab 시퀀스에 있습니다.
  • 주의: 팝업 표시 아이콘이나 버튼(이 있다면), 팝업, 팝업 하위 항목들은 페이지 Tab 시퀀스에서 제외됩니다.
콤보박스 키보드 인터랙션

초점이 콤보박스에 있는 경우:

  • Down Arrow: 팝업이 사용 가능한 경우, 팝업 내부로 초점을 이동시킵니다:
    • Down Arrow가 눌리기 전에, 자동완성 동작이 자동으로 제안을 선택한 경우, 초점이 자동으로 선택된 제안의 다음 제안에 지정됩니다.
    • 그렇지 않으면, 팝업 내 첫 번째 초점을 얻을 수 있는 (focusable) 엘리먼트에 초점이 지정됩니다.
  • Up Arrow (선택사항): 팝업이 사용 가능한 경우, 팝업 내 마지막 초점을 얻을 수 있는 (focusable) 엘리먼트에 초점이 지정됩니다.
  • Escape: 팝업이 노출되어 있는 경우 팝업을 닫습니다. 선택적으로, Escape가 눌리기 전에 팝업이 숨겨져 있는 경우, 콤보박스를 지웁니다(clear).
  • Enter: 콤보박스가 편집 가능하고 팝업에서 자동 선택이 선택 된 경우, 콤보박스의 허용된 값의 맨 뒤에 입력 커서를 위치시키거나 값에 기본 작업을 수행하여 제안을 수락합니다. 예를 들어, 메시징 응용프로그램에서, 기본 작업은 허용된 값을 메시지 수신인 목록에 추가한 후 사용자가 다른 수신인을 추가할 수 있도록 콤보박스를 지우는 것입니다.
  • 출력 가능한 문자:
    • 콤보박스가 편집 가능한 경우, 콤보박스에 문자를 입력합니다. 일부 구현에서는 특정 문자를 유효하지 않은 것으로 간주하여 입력할 수 없음에 주의하세요.
    • 콤보박스가 편집 가능하지 않은 경우, 선택적으로 초점을 입력 문자로 시작하는 값으로 이동시킵니다.
  • 콤보박스가 편집 가능한 경우, 이는 기기 플랫폼에 적절한 표준 단일 라인 텍스트 편집 키를 지원합니다. (아래 참고).
  • Alt + Down Arrow (선택사항): 팝업이 사용 가능하지만 노출되지 않았다면, 초점 이동 없이 팝업을 노출시킵니다.
  • Alt + Up Arrow (선택사항): 팝업이 노출되어 있다면:
    • 팝업이 초점을 포함하고 있다면, 초점을 콤보박스에 되돌려 줍니다.
    • 팝업을 닫습니다.
Note

기기 플랫폼에 적절한 표준 단일 라인 텍스트 편집 키:

  1. 입력, 커서 이동, 선택, 텍스트 조작을 위한 키를 포함합니다.
  2. 편집 기능을 위한 표준 키 할당은 기기 운영 체제에 따라 다릅니다.
  3. 텍스트 입력 기능을 제공하기 위한 가장 강력한 방법은 브라우저에 의존하는 것으로, 브라우저는 text 유형을 가진 HTML 입력(input)과 contenteditable HTML 어트리뷰트를 가진 엘리먼트에 대해 텍스트 입력 기능을 제공합니다.
  4. 중요: JavaScript가 브라우저 제공 텍스트 편집 기능을 수행하는데 사용되는 키에 대해 키 이벤트를 캡쳐하여 간섭하지 않도록 하세요.
목록상자 팝업 키보드 인터랙션

목록상자 팝업에 초점이 있는 경우:

  • Enter: 팝업을 닫고, 콤보박스에 승인 된 값을 위치시키고, 콤보박스가 편집 가능한 경우 입력 커서를 값의 끝에 위치시켜 목록상자의 초점을 얻은 옵션 항목을 승인합니다.
  • Escape: 팝업을 닫고 콤보박스로 초점을 되돌려줍니다. 선택적으로, 콤보박스가 편집 가능한 경우, 콤보박스의 콘텐츠를 지웁니다.
  • Down Arrow: 다음 옵션 항목으로 초점을 이동시키고 선택합니다. 마지막 옵션 항목에 초점이 있는 경우, 콤보박스로 초점을 되돌려주거나 아무 것도 하지 않습니다.
  • Up Arrow: 이전 옵션 항목으로 초점을 이동시키고 선택합니다. 첫 번째 옵션 항목에 초점이 있는 경우, 콤보박스로 초점을 되돌려주거나 아무 것도 하지 않습니다.
  • Right Arrow: 콤보박스가 편집 가능한 경우, 팝업을 닫지 않고 콤보박스로 초점을 되돌려주고 입력 커서를 오른쪽으로 한 글자 이동시킵니다. 입력 커서가 맨 오른쪽 문자에 있다면, 커서는 이동시키지 않습니다.
  • Left Arrow: 콤보박스가 편집 가능한 경우, 팝업을 닫지 않고 콤보박스로 초점을 되돌려주고 입력 커서를 왼쪽으로 한 글자 이동시킵니다. 입력 커서가 맨 왼쪽 문자에 있다면, 커서는 이동시키지 않습니다.
  • Home (선택사항): 첫 번째 옵션 항목으로 초점을 이동시키고 선택하거나, 콤보박스가 편집 가능한 경우 콤보박스로 초점을 되돌려주고 첫 번째 문자에 커서를 위치시킵니다.
  • End (선택사항): 마지막 옵션 항목으로 초점을 이동시키고 선택하거나, 콤보박스가 편집 가능한 경우 콤보박스로 초점을 되돌려주고 마지막 문자에 커서를 위치시킵니다.
  • 출력 가능한 문자:
    • 콤보박스가 편집 가능한 경우, 팝업을 닫지 않고 콤보박스로 초점을 되돌려주고 문자를 입력합니다.
    • 그렇지 않으면, 입력된 문자로 시작하는 이름을 가진 다음 옵션 항목으로 초점을 이동시킵니다.
  • Backspace (선택사항): 콤보박스가 편집 가능한 경우, 콤보박스로 초점을 되돌려주고 커서 앞의 문자를 삭제합니다.
  • Delete (선택사항): 콤보박스가 편집 가능한 경우, 콤보박스로 초점을 되돌려주고, 제안이 선택된 경우 제안 된 상태를 제거하고, 자동완성 문자열이 있는 경우 삭제합니다.
Note
  1. DOM 초점은 콤보박스에 유지되고 aria-activedescendant를 사용하여 복합 컴포넌트에서 초점 관리에 기술 된 대로 aria-activedescendant를 사용하여 목록상자 내에서 보조 기술 초점이 이동됩니다.
  2. 선택은 목록상자의 초점을 따릅니다; 목록상자는 콤보박스 값에 대해 한 번에 하나의 제안된 값만 선택 될 수 있습니다.
그리드 팝업 키보드 인터랙션

그리드 팝업에서, 각 제안 값은 단일 셀 또는 전체 행으로 표현될 수 있습니다. 그리드 설계의 이러한 측면이 초점 이동에 대한 응답에서 키보드 인터랙션 설계와 선택 이동 방식에 어떻게 영향을 주는지 다음 사항을 참고하세요.

  • Enter: 팝업을 닫고 콤보박스에 선택 된 값을 위치시키고, 콤보박스가 편집 가능한 경우 값의 끝에 입력 커서를 위치시켜 현재 선택된 제안된 값을 수락합니다.
  • Escape: 팝업을 닫고 콤보박스로 초점을 되돌려줍니다. 선택적으로, 콤보박스가 편집 가능한 경우 콤보박스의 콘텐츠를 지웁니다.
  • Right Arrow: 초점을 오른쪽으로 한 셀 이동시킵니다. 선택적으로, 초점이 행의 가장 오른쪽 셀에 있다면, 다음 행의 첫 번째 셀로 초점을 이동시킬 수 있습니다. 초점이 그리드의 마지막 셀에 있다면, 아무 것도 하지 않거나 콤보박스로 초점을 되돌려줍니다.
  • Left Arrow: 초점을 왼쪽으로 한 셀 이동시킵니다. 선택적으로, 초점이 행의 가장 왼쪽 셀에 있다면, 이전 행의 마지막 셀로 초점을 이동시킬 수 있습니다. 초짐이 그리드의 첫 번째 셀에 있다면, 아무 것도 하지 않거나 콤보박스로 초점을 되돌려줍니다.
  • Down Arrow: 초점을 아래로 한 셀 이동시킵니다. 초점이 그리드의 마지막 행에 있다면, 아무 것도 하지 않거나 콤보박스로 초점을 되돌려줍니다.
  • Up Arrow: 초점을 위로 한 셀 이동시킵니다. 초점이 그리드의 첫 번째 행에 있다면, 아무 것도 하지 않거나 콤보박스로 초점을 되돌려줍니다.
  • Page Down (선택사항): 초점을 아래로 작성자가 정의한 행 개수 만큼, 일반적으로 현재 보이는 행 세트의 맨 아래 행이 첫 번째 보이는 행이 되도록 이동시킵니다. 초점이 그리드의 마지막 행에 있다면, 초점은 이동하지 않습니다
  • Page Up (선택사항): 초점을 위로 작성자가 정의한 행 개수 만큼, 일반적으로 현재 보이는 행의 세트의 첫 번째 행이 보이는 행의 마지막 행이 되도록 이동시킵니다. 초점이 그리드의 첫 번째 행에 있다면, 초점은 이동하지 않습니다.
  • Home (선택사항): 다음 중 하나:
    • 초점을 초점을 포함하고 있는 행의 첫 번째 셀로 이동시킵니다. 또는 그리드가 행 당 셀이 3개 미만이거나 행 당 여러 개의 제안 값을 가지는 경우, 그리드의 첫 번째 셀로 초점을 이동시킬 수 있습니다.
    • 콤보박스가 편집 가능한 경우, 초점을 콤보박스로 되돌려주고 입력 커서를 첫 번째 문자로 위치시킵니다.
  • End (선택사항): 다음 중 하나:
    • 초점을 초점을 포함하고 있는 행의 마지막 셀로 이동시킵니다. 또는 그리드가 행 당 셀이 3개 미만이거나 행 당 여러 개의 제안 값을 가지는 경우, 그리드의 마지막 셀로 초점을 이동시킬 수 있습니다.
    • 콤보박스가 편집 가능한 경우, 초점을 콤보박스로 되돌려주고 입력 커서를 마지막 문자 뒤로 위치시킵니다.
  • Control + Home (선택사항): 첫 번째 행으로 초점을 이동시킵니다.
  • Control + End (선택사항): 마지막 행으로 초점을 이동시킵니다.
  • 출력 가능한 문자: 콤보박스가 편집가능하다면, 팝업을 닫지 않고 콤보박스로 초점을 돌려주고 문자를 입력합니다.
  • Backspace (선택사항): 콤보박스가 편집 가능하다면, 콤보박스로 초점을 돌려주고 커서 앞의 문자를 삭제합니다.
  • Delete (선택사항): 콤보박스가 편집 가능하다면, 콤보박스로 초점을 돌려주고, 제안이 선택되었다면 선택 상태를 제거하고 인라인 자동완성 문자열이 있다면 이를 제거합니다.
Note
  1. DOM 초점은 콤보박스에 유지되고 aria-activedescendant를 사용하여 복합 컴포넌트에서 초점 관리에 기술 된 대로 aria-activedescendant를 사용하여 그리드 내에서 보조기술 초점이 이동됩니다.
  2. 그리드는 콤보박스 값에 대해 한 번에 오직 하나의 제안 값만 선택될 수 있습니다.
  3. 그리드 팝업에서, 각 제안 값은 단일 셀 또는 전체 행으로 표현될 수 있습니다. 설계의 이러한 측면은 초점과 선택 이동에 영향을 줍니다:
    1. 모든 셀이 서로 다른 제안된 값을 가지는 경우:
      • 선택은 초점을 따르므로 초점을 포함하는 셀이 선택됩니다.
      • 상하 방향키는 일반적으로 행에서 다른 행으로 탐색합니다.
      • 좌우 방향키는 일반적으로 열에서 다른 열로 탐색합니다.
    2. 행의 모든 셀이 동일한 제안 값에 대한 정보를 포함하는 경우:
      • 동일한 행의 셀이 초점을 포함하는 경우 초점을 포함하는 행이 선택되거나 선택 된 값을 포함하는 셀이 선택됩니다.
      • 상하 방향키는 행에서 다른 행으로 탐색할 수 있습니다.
      • 좌우 방향키는 행에서 다른 행으로 탐색하지 않습니다
트리 팝업 키보드 인터랙션

트리 팝업의 일부 구현에서, 일부 혹은 모든 상위 노드들은 제안 카테고리 레이블로 제공 될 수 있으므로 선택 될 수 있는 값이 아닐 수 있습니다. 설계의 이 측면이 초점 이동에 대한 응답에서 선택 이동 방법에 어떻게 영향을 주는지에 대해서 다음을 참고하세요.

초점이 수직 방향 트리 팝업에 있는 경우:

  • Enter: 팝업을 닫지 않고 콤보박스에 선택 된 값을 위치시키고 콤보박스가 편집 가능 하다면 값의 끝에 입력 커서를 위치시켜 현재 선택 된 제안 값을 승인합니다.
  • Escape: 팝업을 닫고 콤보박스로 초점을 돌려줍니다. 선택적으로 콤보박스의 콘텐츠를 지웁니다.
  • Right arrow:
    • 초점이 닫힌 노드에 있다면, 노드를 엽니다; 초점과 선택은 이동시키지 않습니다.
    • 초점이 열린 노드에 있다면, 초점을 첫 번째 자식 노드로 이동시키고 선택 가능하다면 선택합니다.
    • 초점이 마지막 노드에 있다면, 아무것도 하지 않습니다.
  • Left arrow:
    • 초점이 열린 노드에 있다면, 노드를 닫습니다.
    • 초점이 마지막 노드이거나 닫힌 노드인 자식 노드에 있다면, 부모 노드로 초점을 이동 시키고 선택 가능하다면 선택합니다.
    • 초점이 마지막 노드이거나 닫힌 노드인 최상위 노드에 있다면, 아무 것도 하지 않습니다.
  • Down Arrow: 노드를 열거나 닫지 않고 초점을 얻을 수 있는(focusable) 다음 노드로 초점을 이동시키고 선택 가능하다면 선택합니다.
  • Up Arrow: 노드를 열거나 닫지 않고 초점을 얻을 수 있는(focusable) 이전 노드로 초점을 이동시키고 선택 가능하다면 선택합니다.
  • Home: 노드를 열거나 닫지 않고 트리의 첫 번째 초점을 얻을 수 있는(focusable) 노드로 초점을 이동시키고 선택 가능하다면 선택합니다.
  • End: 노드를 열거나 닫지 않고 트리의 마지막 초점을 얻을 수 있는(focusable) 마지막 노드로 초점을 이동시키고 선택 가능하다면 선택합니다.
  • 출력 가능한 문자:
    • 콤보박스가 편집 가능하다면, 팝업을 닫지 않고 콤보박스로 초점을 돌려주고 문자를 타이핑합니다.
    • 그렇지 않으면, 입력 된 문자로 시작하는 이름을 가진 다음 제안 값으로 초점을 이동시킵니다.
Note
  1. DOM 초점은 콤보박스에 유지되고 aria-activedescendant를 사용하여 복합 컴포넌트에서 초점 관리에 기술 된 대로 aria-activedescendant를 사용하여 트리 내에서 보조 기술 초점이 이동됩니다.
  2. 트리는 콤보박스 값에 대해 한 번에 오직 하나의 제안 값만 선택 될 수 있습니다.
  3. 트리 팝업에서, 일부 또는 모든 부모 노드는 선택 가능한 값이 되지 않을 수 있습니다; 제안 값에 대한 카테고리 레이블로 제공 될 수 있습니다. 선택 가능한 값이 아닌 노드로 초점이 이동하는 경우:
    • 이전에 선택된 노드가 있다면 선택 가능한 노드로 초점이 이동 될 때까지 선택 된 상태를 유지하거나
    • 선택된 값이 없거나
    • 어느 경우에나, 초점이 선택과 시각적으로 구별되어 사용자가 값이 선택되었는지의 여부를 쉽게 확인할 수 있습니다.
  4. 트리의 노드가 수평으로 배열 된 (aria-orientationhorizontal로 설졍 된) 경우:
    1. Down Arrow는 위에 설명된 Right Arrow와 동일하게 수행하고, 그 반대의 경우도 마찬가지입니다.
    2. Up Arrow는 위에 설명된 Left Arrow와 동일하게 수행하고, 그 반대의 경우도 마찬가지입니다.
대화상자 팝업 키보드 인터랙션

초점이 대화상자 팝업에 있는 경우:

  • 팝업을 닥고 콤보박스로 초점을 되돌리는 두 가지 방법이 있습니다:
    1. 버튼을 활성화 하는 것과 같이 콤보박스에 대한 특정 값을 지정하는 대화상자의 동작을 수행합니다.
    2. 대화상자 밖에서 취소, 예를 들어 Escape를 누르거나 대화상자의 취소 버튼을 활성화합니다. 취소하는 것은 콤보박스를 변경하지 않고 텍스트 박스로 초점을 되돌려주거나 콤보박스로 초점을 되돌려주고 콤보박스를 지웁니다.
  • 대화상자는 모달 대화상자 패턴에 기술 된 키보드 인터랙션을 구현합니다.
Note

다른 콤보박스 팝업과는 달리, 대화상자는 aria-activedescendant를 지원하지 않으므로 DOM 초점이 콤보박스로부터 대화상자로 이동합니다.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • input으로 제공하고 콤보박스 값을 표시하는 엘리먼트는 combobox를 가집니다.
  • 콤보박스 엘리먼트는 팝업으로 제공하는 엘리먼트를 가리키는 값으로 설정 된 aria-controls를 가집니다. aria-controls는 팝업이 보일 때에만 설정이 필요함에 주의하세요. 하지만, 보이지 않는 엘리먼트를 참조하는 것도 유효합니다.
  • 팝업은 listbox, tree, grid 또는 dialog 역할(role)을 가지는 엘리먼트입니다..
  • 팝업이 listbox와 다른 역할(role)을 가진다면, combobox 역할(role)을 가진 엘리먼트는 팝업 유형에 해당하는 값으로 설정 된 aria-haspopup을 가집니다. 즉, aria-haspopupgrid, tree, 또는 dialog로 설정됩니다. combobox 역할(role)을 가진 엘리먼트가 명시적인 listbox 값의 aria-haspopup을 가지는 것에 유의하세요.
  • 콤보박스 팝업이 보이지 않는 경우, combobox 역할(role)을 가진 엘리먼트는 false로 설정 된 aria-expanded를 가집니다. 팝업 엘리먼트가 보이는 경우, aria-expandedtrue로 설정 됩니다. combobox 역할(role)을 가진 엘리먼트가 aria-expanded에 대한 기본 값으로 false를 가짐에 유의하세요.
  • 콤보박스가 초점을 얻을 때, DOM 초점이 콤보박스 엘리먼트에 위치합니다.
  • 목록상자, 그리드, 트리 팝업의 후손이 초점을 얻을 때, DOM 초점은 콤보박스에 유지되고 콤보박스는 팝업 내의 초점을 얻은 엘리먼트를 가리키는 값으로 설정 된 aria-activedescendant를 가집니다.
  • 목록상자, 그리드, 트리 팝업을 제어하는 콤보박스의 경우, 제안 값이 시각적으로 현재 선택 된 값으로 보여진다면, 값을 포함하고 있는 option, gridcell, row, treeitemtrue로 설정 된 aria-selected를 가집니다.
  • 콤보박스가 보이는 레이블을 가지고 콤보박스 엘리먼트가 label 엘리먼트를 사용하여 레이블이 지정될 수 있는 HTML 엘리먼트라면(예를 들어, input엘리먼트), label 엘리먼트를 사용하여 레이블이 지정됩니다. 그렇지 않고 보이는 레이블이 있는 경우, 콤보박스 엘리먼트는 레이블을 지정하는 엘리먼트를 가리키는 값으로 설정 된 aria-labelledby를 가집니다. 그렇지 않으면, 콤보박스는 aria-label로 제공되는 레이블을 가집니다..
  • 콤보박스 엘리먼트는 자동완성 동작에 해당하는 값으로 설정 된 aria-autocomplete를 가집니다:
    • none: 팝업이 노출 될 때, 콤보박스에 입력된 문자와 상관없이 팝업에 포함 된 제안 값은 동일합니다.
    • list: 팝업이 트리거 될 때, 제안 값을 나타냅니다. 콤보박스가 편집 가능하다면, 값은 완전히 또는 논리적으로 콤보박스에 입력 된 문자와 일치합니다.
    • both: 팝업이 트리거 될 때, 콤보박스에 입력된 문자와 완전히 또는 논리적으로 일치하는 제안 값을 나타냅니다. 또한 사용자가 입력하지 않은 선택된 제안의 일부가 (완성 문자열로 알려진), 콤보박스의 입력 커서 뒤에 인라인으로 나타납니다. 인라인 완성 문자열은 시각적으로 강조 표시되고 선택된 상태를 가집니다.
Note
  1. ARIA 1.0에서, 콤보박스는 aria-controls 대신 aria-owns로 팝업이 참조되었습니다. 유저 에이전트가 레거시 콘텐츠와의 하위 호환성을 위해 aria-owns를 가진 콤보박스를 지원할 수 있지만, aria-controls를 사용하는 것이 강력히 권장됩니다.
  2. 팝업에 사용되는 패턴의 다음 목록에 대한 역할(role), 상태(state), 속성(property) 문서를 참조할 때, 콤보박스가 선택이 팝업 내의 초점을 따르는 단일 선택 위젯이라는 점을 유념하세요.
  3. 팝업 엘리먼트에 대한 역할(role), 상태(state), 속성(property)는 각각의 설계 패턴에서 정의됩니다:

3.9 대화상자 (모달)

대화상자는 기본 창 또는 다른 대화상자 창에 오버레이 된 창입니다. 모달 대화상자 하위의 창은 비활성(inert) 상태입니다. 즉, 사용자는 활성 대화상자 창 외부에서 콘텐츠와 상호작용 할 수 없습니다. 비활성(inert) 콘텐츠는 일반적으로 시각적으로 보기 어렵게 되거나 어둑하게 되므로 식별하기 어렵고, 일부 구현에서는, 비활성(inert) 콘텐츠와 상화작용 하려고하면 대화상자가 닫힙니다.

비모달 대화상자와 마찬가지로, 대화상자는 자체 탭 시퀀스를 포함합니다. 즉, TabShift + Tab은 대화상자 밖으로 초점을 이동시키지 않습니다. 하지만, 대부분의 비모달 대화상자와 달리, 모달 대화상자는 대화상자를 닫지 않고 대화상자 창 밖으로 키보드 초점을 이동시키는 방법을 제공하지 않습니다.

alertdialog 역살(role)은 간단하고 중요한 메세지에 사용자의 주의를 돌리는 대화상자에 대해 특별히 설계된 특별 케이스 대화상자입니다. 이것의 사용법은 alert dialog 설계 패턴에 기술되어 있습니다.

예제

키보드 인터랙션

다음 설명에서, 용어 tabbable 엘리먼트tabindex이 0 이상의 값을 가지는 엘리먼트를 가리킵니다. 0을 초과하는 값은 강력히 지양됨에 주의하세요.

  • 대화상자가 열릴 때, 대화상자 내부 엘리먼트로 초점을 이동시킵니다. 초기 초점 위치에 관련하여 아래 사항을 참고하세요.
  • Tab:
    • 대화상자 내부의 다음 tabbable 엘리먼트로 초점을 이동시킵니다.
    • 초점이 대화상자 내부의 마지막 tabbable 엘리먼트에 있다면, 대화상자 내부의 첫 번째 tabbable 엘리먼트로 초점을 이동시킵니다.
  • Shift + Tab:
    • 대화상자 내부의 이전 tabbable 엘리먼트로 초점을 이동시킵니다.
    • 초점이 대화상자 내부의 첫 번째 tabbable 엘리먼트에 있다면, 대화상자 내부의 마지막 tabbable 엘리먼트로 초점을 이동시킵니다.
  • Escape: 대화상자를 닫습니다.
Note
  1. 대화상자가 열릴 때, 대화상자에 포함되는 엘리먼트로 초점을 이동시킵니다. 일반적으로, 초점은 초기에 첫 번째 초점을 얻을 수 있는(focusable) 엘리먼트에 설정됩니다. 하지만, 가장 적절한 초점 위치는 콘텐츠의 성격과 크기에 의해 결정될 것입니다. 예제는 다음을 포함합니다:
    • 대화상자 콘텐츠가 내용을 쉽게 이해하기 위해 목록, 표, 여러 문단과 같이 인식 될 필요가 있는 의미론적 구조를 포함하는 경우, 즉, 콘텐츠가 끊어지지 않은 단일 문자열로 낭독되면 이해하기 어렵게 될 경우, 콘텐츠의 시작부분에 위치한 정적 엘리먼트에 tabindex="-1"를 추가하고 초기에 그 엘리먼트에 초점을 주는 것을 권합니다. 이는 보조기술 사용자가 의미론적 구조를 탐색하여 콘텐츠를 읽기 쉽게 합니다. 또한, 이 시나리오에서 대화상자 컨테이너에 aria-describedby 적용을 생략하는 것을 권장합니다.
    • 초점을 얻는 첫 번째 인터랙티브 엘리먼트가 콘텐츠의 시작 부분을 뷰(view) 밖으로 스크롤을 야기할 수 있을만큼 콘텐츠가 충분히 클 경우, 대화상자 제목이나 첫 번째 문단 같은 대화상자 최상단에 위치한 정적 엘리먼트에 tabindex="-1"를 추가하고 초기에 그 엘리먼트에 초점을 주는 것을 권장합니다.
    • 대화상자가 데이터 삭제나 금융 거래 완료와 같은 쉽게 되돌릴 수 없는 프로세스의 마지막 단계를 포함하는 경우, 특히 동작을 취소하는 것이 어렵거나 불가능하다면, 가장 덜 파괴적인 동작에 초점을 두는 것을 권장합니다. 알람 대화상자 패턴이 이런 상황에서 자주 사용됩니다.
    • 대화상자가 추가 정보를 제공하거나 처리를 계속하는 인터랙션으로 제한 된 경우, OKContinue 버튼과 같은, 가장 자주 사용될 소지가 높은 엘리먼트에 초점을 설정하는 것이 권장됩니다.
  2. 대화상자가 닫힐 경우, 다음의 경우를 제외하고 대화상자를 호출한 엘리먼트로 초점이 되돌아갑니다:
    • 호출 한 엘리먼트가 더 이상 존재하지 않습니다. 따라서, 초점은 논리적 작업 흐름을 제공하는 다은 엘리먼트에 설정 됩니다.
    • 작업 흐름 설계는 가끔 다른 엘리먼트에 초점을 주는 것이 보다 논리적인 선택이 될 수 있는 다음 조건을 포함합니다:
      1. 사용자가 대화상자를 즉시 다시 작동시킬 필요가 거의 없습니다.
      2. 대화상자에서의 완료된 작업이 작업 흐름에서 후속 단계와 직접적인 관련이 있습니다.
      예를 들어, 그리드에 행 추가 버튼을 가진 연관된 툴바가 있습니다. 행 추가 버튼은 행 개수를 묻는 대화상자가 열립니다. 대화상자가 닫히면, 첫 번째 새로운 행의 첫 번째 셀에 초점이 배치됩니다.
  3. 모든 대화상자의 탭 시퀀스는 닫기 아이콘이나 취소 버튼 같은, 대화상자를 닫는 button 역할을 가진 시각적으로 보이는 엘리먼트를 포함하도록 하는 것이 강력히 권장됩니다.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • 대화상자 컨테이너로 제공되는 엘리먼트는 dialog 역할을 가집니다.
  • 대화상자를 운용하는데 필요한 모든 엘리먼트는 dialog 역할을 가진 엘리먼트의 후손입니다.
  • 대화상자 컨테이너 엘리먼트는 true로 설정된 aria-modal를 가집니다.
  • 대화 상자는 다음 중 하나를 가집니다:
    • 가시적으로 보이는 대화상자 제목을 가리키는 값이 설정된 aria-labelledby 속성
    • aria-label로 지정 된 레이블.
  • 선택적으로, aria-describedby 속성은 대화상자의 주 목적이나 메세지를 설명하는 콘텐츠를 포함하는 엘리먼트나 대화상자 컨테이너 내의 엘리먼트들을 가리키도록 dialog 역할을 가진 엘리먼트에 설정됩니다. 설명 엘리먼트를 지정하는 것은 대화상자가 열릴 때 스크린리더에 대화상자 제목과 초기에 초점을 얻는 엘리먼트와 함께 설명을 알릴 수 있으며, 이는 일반적으로 설명 콘텐츠가 간단하고 구조적 정보 없이 쉽게 이해될 수 있는 경우에만 유용합니다. 대화상자 콘텐츠가 목록, 표, 여러 문단과 같이 콘텐츠를 쉽게 이해하도록 인식 될 필요가 있는 의미론적 구조를 포함하는 경우, 즉, 콘텐츠가 끊어지지 않은 단일 문자열로 낭독 될 때 내용을 이해하기 어려운 경우, aria-describedby를 지정하는 것을 생략하는 것이 권장됩니다.
Note
  • aria-modaltrue로 설정하여 대화상자를 만드는 것은 보조 기술 사용자가 대화상자 밖의 콘텐츠를 인식하는 것을 막을 수 있기 때문에, 대화상자가 모달로 표시되었지만 다른 사용자들에게는 모달로 작동하지 않는다면 보조 기술 사용자는 심각하게 부정적인 결과를 경험하게 될 것 입니다. 따라서, 다음과 같은 경우에만 대화상자를 모달로 표시하세요:
    1. 어플리케이션 코드가 모든 사용자가 외부 콘텐츠와 상호작용하는 것을 방지합니다.
    2. 시각적 스타일링이 외부 콘텐츠를 가립니다.
  • ARIA 1.1에 도입된 aria-modal 속성은 대화상자 외부 콘텐츠가 비활성 상태임을 보조 기술에 알리기 위한 aria-hidden를 대체합니다. 하지만, 대화상자 외부 콘텐츠를 보조 기술 사용자에게 비활성으로 만드는데 aria-hidden가 사용되는 레거시 대화상자 구현에서는 다음 상항이 중요합니다:
    1. 비활성 레이어의 일부를 포함하는 각 엘리먼트에 aria-hiddentrue로 설정됩니다.
    2. 대화상자 엘리먼트는 true로 설정된 aria-hidden을 가지는 엘리먼트의 하위 요소가 아닙니다.

3.10 디스클로저 (노출/숨김)

디스클로저는 컨텐츠가 축소(숨김) 또는 확장(노출)될 수 있도록 하는 위젯입니다. 두 가지 엘리먼트를 가집니다: 디스클로저 버튼과 버튼에 의해 가시성이 제어되는 컨텐츠 섹션. 제어된 컨텐츠가 숨겨져있다면, 버튼을 활성화 하는 것이 추가 컨텐츠를 표시할 것이라는 암시하기 위해 오른쪽을 가리키는 화살표나 삼각형이 있는 일반적인 푸시 버튼으로 종종 스타일링 됩니다. 컨텐츠가 노출되어 있다면, 화살표나 삼각형은 일반적으로 아래를 가리킵니다.

예제

키보드 인터랙션

디스클로저 컨트롤이 초점을 가지고 있을 때:

  • Enter: 디스클로저 컨트롤을 활성화 하고 디스클로저 컨텐츠의 가시성을 전환합니다.
  • Space: 디스클로저 컨트롤을 활성화 하고 디스클로저 컨텐츠의 가시성을 전환합니다.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • 컨텐츠를 노출시키고 숨기는 엘리먼트는 button 역할(role)을 가집니다.
  • 컨텐츠가 노출될 때, button 역할을 가진 엘리먼트는 true로 설정된 aria-expanded를 가집니다. 컨텐츠가 숨겨질 때, false로 설정됩니다.
  • 선택적으로, button을 가진 엘리먼트는 노출되거나 숨겨지는 모든 컨텐츠를 포함하는 엘리먼트를 가리키도록 설정 된 aria-controls 값을 가집니다.

3.11 피드

피드는 사용자가 스크롤 할 때 콘텐츠의 새로운 섹션을 자동으로 로드하는 페이지의 섹션입니다. 패드의 콘텐츠 섹션은 article 엘리먼트 안에 존재합니다. 따라서, 피드는 종종 무한하게 스크롤되는 것처럼 보이는 게시글의 동적 목록으로 생각될 수 있습니다.

사용자가 스크롤할 때 데이터 로딩을 지원하는 다른 ARIA 패턴과(예를 들어 grid) 피드가 가장 구별되는 특징은 위젯이 아닌 구조라는 점입니다. 따라서, 스크린리더와 같이 읽기 모드를 가진 보조 기술은 피드 콘텐트와 상호작용 할 때 기본적으로 읽기 모드로 설정됩니다. 그러나, 다른 대부분의 WAI-ARIA 구조와 달리, 피드는 웹 페이지와 보조 기술 간의 상호운용성 규약을 수립합니다. 규약은 보조 기술 사용자가 읽기 모드인 동안 게시글을 읽고, 게시글 별 앞뒤로 이동하고, 새 게시글을 안정적으로 트리거 할 수 있도록 스크롤 인터랙션을 제어합니다.

예를 들어, 쇼핑 사이트의 제품 페이지는 한 번에 5개 제품을 노출하는 연관 제품 섹션이 있을 수 있을 수 있습니다. 사용자가 스크롤 할 때, 더 많은 제품이 요청되고 DOM에 로드 됩니다. 정적 디자인에는 5개 이상의 제품을 로드하기 위한 다음 버튼이 포함될 수 있지만, 사용자가 스크롤 할 때 추가 데이터를 자동으로 로드하는 동적 구현은 사용자 경험을 단순화하고 처음 5개 제품 제안 이상을 보는 것과 관련된 타성을 줄입니다. 하지만, 불행하게도 웹 페이지가 스크롤 이벤트를 기반으로 콘덴트를 동적으로 로드할 때, 보조 기술 사용자에게 사용성 및 상호운용성 문제를 일으킬 수 있습니다.

피드 패턴은 웹 페이지와 보조 기술 사이에 다음의 상호운용성 규약을 설정하여 안정적인 보조 기술 읽기 모드 인터랙션을 가능하게 합니다:

  1. 피드 맥락에서, 웹 페이지 코드는 다음을 담당합니다:
    • DOM 초점을 포함하는 게시글을 기반으로 콘텐트의 적절한 시각적 스크롤
    • DOM 초점을 포함하는 게시글을 기반으로 피드 게시글을 로드하거나 제거
  2. 피드의 맥락에서, 읽기 모드를 가진 보조 기술은 다음을 담당합니다:
    • 게시글 요소 또는 하위 항목 중 하나가 DOM 초점을 가지고 있는지 확인하여 읽기 커서를 포함하고 있는 게시글 표시
    • DOM 초점을 다음 및 이전 게시글로 이동시키는 읽기 모드 키 제공
    • 피드의 끝 이후와 피드의 시작 부분 이전으로 읽기 커서와 DOM 초점 이동을 위한 읽기 모드 키 제공

따라서, 피드 패턴 구현은 스크린리더가 읽기 모드를 유지하면서 피드 콘텐트를 안정적으로 읽고 로드할 수 있습니다.

피드 패턴의 다른 특징은 보조 기술 사용자를 위한 훑어보기를 용이하게 하는 기능입니다. 웹 페이지 작성자는 각 게시글에 대한 접근 가능한 이름과 설명을 제공할 수 있습니다. 제목과 주요 내용을 제공하는 게시글 내부의 요소를 식별함으로써, 보조 기술은 사용자가 게시글에서 게시글로 이동하고 어떤 게시글이 더 주의를 기울일 가치가 있는지 효율적으로 파악할 수 있도록 하는 기능을 제공할 수 있습니다.

예제

피드 패턴의 구현 예제

키보드 인터랙션

피드 패턴은 데스크탑 GUI 위젯을 기반으로 하지 않으므로 feed 역할은 잘 확립된 키보드 규칙과 연관되지 않습니다. 다음 또는 유사한 인터페이스를 지원하는 것이 권장됩니다.

초점이 피드 내부에 있는 경우:

  • Page Down: 다음 게시글로 초점을 이동시킵니다.
  • Page Up: 이전 게시글로 초점을 이동시킵니다.
  • Control + End: 피드 이후 첫 번째 초점을 얻을 수 있는(focusable) 요소로 초점을 이동시킵니다.
  • Control + Home: 피드 이전 첫 번째 초점을 얻을 수 있는(focusable) 요소로 초점을 이동시킵니다.
Note
  1. 규칙이 없기 때문에, 쉽게 찾을 수 있는 키보드 인터페이스 문서를 제공하는 것이 특히 중요합니다.
  2. 어떤 경우, 피드는 중첩된 피드를 포함할 수 있습니다. 예를 들어, 소셜 미디어 피드의 게시글은 그 게시글에 대한 댓글 피드를 포함할 수 있습니다. 중첩된 피드를 탐색하려면, 사용자는 먼저 중첩된 피드 내부로 초점을 이동시킵니다. 중첩된 피드 탐색을 지원하기 위한 옵션은 다음을 포함합니다:
    • 사용자는 Tab으로 게시글을 포함하는 콘텐트로부터 중첩된 피드로 초점을 이동시킵니다. 이는 게시글이 상당한 링크, 버튼, 다른 위젯들을 포함할 경우 느리게 만들 수 있습니다.
    • 게시글을 포함하는 요소로부터 중첩된 피드 안의 첫 번째 항목으로 초점을 이동시키는 키를 제공하세요, 예를 들어 Alt + Page Down.
    • 바깥 피드를 계속 읽기 위해, Control + End가 바깥 피드 안의 다음 게시글로 초점을 이동시킵니다.
  3. 피드 게시글이 위에서 제안된 키를 사용하는 위젯을 포함하는 드문 상황에서, 피드 탐색 키는 포함된 위젯을 작동시킬 것이고, 사용자는 피드를 탐색하기 위한 피드 탐색 키를 사용하지 않는 요소로 초점을 이동시켜야 합니다.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • 피드 게시글 모음을 포함하는 엘리먼트는 feed 역할(role)을 가집니다.
  • 피드가 가시적 레이블을 가지고 있는 경우, feed 엘리먼트는 제목을 포함항 엘리먼트를 참조하는 aria-labelledby를 가집니다. 그렇지 않으면, feed 엘리먼트는 aria-label로 설정된 레이블을 가집니다.
  • 피드의 각 콘텐트 단위는 article 역할(role)을 가진 엘리먼트에 포함됩니다. 피드 내 모든 콘텐트는 article 엘리먼트 안에 포함됩니다.
  • article 엘리먼트는 게시글 안의 다른 것과 구별되는 레이블로 제공할 수 있는 엘리먼트를 참조하는 aria-labelledby를 가집니다.
  • 선택사항이지만 각 article 엘리먼트가 게시글 내의 게시글의 주요 콘텐트로 제공되는 하나 이상의 엘리먼트를 참조하는 aria-describedby를 가지도록 강력히 권장됩니다.
  • article 엘리먼트는 피드 내 위치를 나타내는 값으로 설정 된 aria-posinset을 가집니다.
  • article 엘리먼트는 사용자에게 더 도움이 되는 것으로 여겨지는 값을 기반으로 로드 된 게시글의 전체 수나 피드 내 전체 수를 나타내는 값으로 설정 된 aria-setsize를 가집니다. 피드 내 전체 개수가 미정인 경우, -1 값의 aria-setsize로 표현될 수 있습니다.
  • article 엘리먼트가 feed 컨테이너로부터 추가되거나 삭제되고, 작동이 여러 DOM 조작을 요구하는 경우, feed 엘리먼트는 업데이트 중에 true로 설정 된 aria-busy를 가집니다. 작동이 완료되거나 변경 사항이 일부 보조 기술 사용자에게 볼 수 있도록 바뀌지 않을 경우, aria-busyfalse로 설정하는 것이 매우 중요함에 유의하세요.

3.12 Grids : Interactive Tabular Data and Layout Containers

A grid widget is a container that enables users to navigate the information or interactive elements it contains using directional navigation keys, such as arrow keys, Home, and End. As a generic container widget that offers flexible keyboard navigation, it can serve a wide variety of needs. It can be used for purposes as simple as grouping a collection of checkboxes or navigation links or as complex as creating a full-featured spreadsheet application. While the words "row" and "column" are used in the names of WAI-ARIA attributes and by assistive technologies when describing and presenting the logical structure of elements with the grid role, using the grid role on an element does not necessarily imply that its visual presentation is tabular.

When presenting content that is tabular, consider the following factors when choosing between implementing this grid pattern or the table pattern.

Uses of the grid pattern broadly fall into two categories: presenting tabular information (data grids) and grouping other widgets (layout grids). Even though both data grids and layout grids employ the same ARIA roles, states, and properties, differences in their content and purpose surface factors that are important to consider in keyboard interaction design. To address these factors, the following two sections describe separate keyboard interaction patterns for data and layout grids.

Examples

  • Layout Grid Examples: Three example implementations of grids that are used to lay out widgets, including a collection of navigation links, a message recipients list, and a set of search results.
  • Data Grid Examples: Three example implementations of grid that include features relevant to presenting tabular information, such as content editing, sort, and column hiding.
  • Advanced Data Grid Example: Example of a grid with behaviors and features similar to a typical spreadsheet, including cell and row selection.

Data Grids For Presenting Tabular Information

A grid can be used to present tabular information that has column titles, row titles, or both. The grid pattern is particularly useful if the tabular information is editable or interactive. For example, when data elements are links to more information, rather than presenting them in a static table and including the links in the tab sequence, implementing the grid pattern provides users with intuitive and efficient keyboard navigation of the grid contents as well as a shorter tab sequence for the page. A grid may also offer functions, such as cell content editing, selection, cut, copy, and paste.

In a grid, every cell contains a focusable element or is itself focusable, regardless of whether the cell content is editable or interactive. There is one exception: if column or row header cells do not provide functions, such as sort or filter, they do not need to be focusable. One reason it is important for all cells to be able to receive or contain keyboard focus is that screen readers will typically be in their application reading mode, rather than their document reading mode, when users are interacting with the grid. While in application mode, a screen reader user hears only focusable elements and content that labels focusable elements. So, screen reader users may unknowingly overlook elements contained in a grid that are either not focusable or not used to label a column or row.

Keyboard Interaction For Data Grids

The following keys provide grid navigation by moving focus among cells of the grid. Implementations of grid make these key commands available when an element in the grid has received focus, e.g., after a user has moved focus to the grid with Tab.

  • Right Arrow: Moves focus one cell to the right. If focus is on the right-most cell in the row, focus does not move.
  • Left Arrow: Moves focus one cell to the left. If focus is on the left-most cell in the row, focus does not move.
  • Down Arrow: Moves focus one cell down. If focus is on the bottom cell in the column, focus does not move.
  • Up Arrow: Moves focus one cell Up. If focus is on the top cell in the column, focus does not move.
  • Page Down: Moves focus down an author-determined number of rows, typically scrolling so the bottom row in the currently visible set of rows becomes one of the first visible rows. If focus is in the last row of the grid, focus does not move.
  • Page Up: Moves focus up an author-determined number of rows, typically scrolling so the top row in the currently visible set of rows becomes one of the last visible rows. If focus is in the first row of the grid, focus does not move.
  • Home: moves focus to the first cell in the row that contains focus.
  • End: moves focus to the last cell in the row that contains focus.
  • Control + Home: moves focus to the first cell in the first row.
  • Control + End: moves focus to the last cell in the last row.
Note
  • When the above grid navigation keys move focus, whether the focus is set on an element inside the cell or the grid cell depends on cell content. See Whether to Focus on a Cell or an Element Inside It.
  • While navigation keys, such as arrow keys, are moving focus from cell to cell, they are not available to do something like operate a combobox or move an editing caret inside of a cell. If this functionality is needed, see Editing and Navigating Inside a Cell.
  • If navigation functions can dynamically add more rows or columns to the DOM, key events that move focus to the beginning or end of the grid, such as control + End, may move focus to the last row in the DOM rather than the last available row in the back-end data.

If a grid supports selection of cells, rows, or columns, the following keys are commonly used for these functions.

  • Control + Space: selects the column that contains the focus.
  • Shift + Space: Selects the row that contains the focus. If the grid includes a column with checkboxes for selecting rows, this key can serve as a shortcut for checking the box when focus is not on the checkbox.
  • Control + A: Selects all cells.
  • Shift + Right Arrow: Extends selection one cell to the right.
  • Shift + Left Arrow: Extends selection one cell to the left.
  • Shift + Down Arrow: Extends selection one cell down.
  • Shift + Up Arrow: Extends selection one cell Up.
Note

See 6.8 공통 기능에 대한 키 할당 규칙 for cut, copy, and paste key assignments.

Layout Grids for Grouping Widgets

The grid pattern can be used to group a set of interactive elements, such as links, buttons, or checkboxes. Since only one element in the entire grid is included in the tab sequence, grouping with a grid can dramatically reduce the number of tab stops on a page. This is especially valuable if scrolling through a list of elements dynamically loads more of those elements from a large data set, such as in a continuous list of suggested products on a shopping site. If elements in a list like this were in the tab sequence, keyboard users are effectively trapped in the list. If any elements in the group also have associated elements that appear on hover, the grid pattern is also useful for providing keyboard access to those contextual elements of the user interface.

Unlike grids used to present data, A grid used for layout does not necessarily have header cells for labelling rows or columns and might contain only a single row or a single column. Even if it has multiple rows and columns, it may present a single, logically homogenous set of elements. For example, a list of recipients for a message may be a grid where each cell contains a link that represents a recipient. The grid may initially have a single row but then wrap into multiple rows as recipients are added. In such circumstances, grid navigation keys may also wrap so the user can read the list from beginning to end by pressing either Right Arrow or Down Arrow. While This type of focus movement wrapping can be very helpful in a layout grid, it would be disorienting if used in a data grid, especially for users of assistive technologies.

Because arrow keys are used to move focus inside of a grid, a grid is both easier to build and use if the components it contains do not require the arrow keys to operate. If a cell contains an element like a listbox, then an extra key command to focus and activate the listbox is needed as well as a command for restoring the grid navigation functionality. Approaches to supporting this need are described in the section on Editing and Navigating Inside a Cell.

Keyboard Interaction For Layout Grids

The following keys provide grid navigation by moving focus among cells of the grid. Implementations of grid make these key commands available when an element in the grid has received focus, e.g., after a user has moved focus to the grid with Tab.

  • Right Arrow: Moves focus one cell to the right. Optionally, if focus is on the right-most cell in the row, focus may move to the first cell in the following row. If focus is on the last cell in the grid, focus does not move.
  • Left Arrow: Moves focus one cell to the left. Optionally, if focus is on the left-most cell in the row, focus may move to the last cell in the previous row. If focus is on the first cell in the grid, focus does not move.
  • Down Arrow: Moves focus one cell down. Optionally, if focus is on the bottom cell in the column, focus may move to the top cell in the following column. If focus is on the last cell in the grid, focus does not move.
  • Up Arrow: Moves focus one cell up. Optionally, if focus is on the top cell in the column, focus may move to the bottom cell in the previous column. If focus is on the first cell in the grid, focus does not move.
  • Page Down (Optional): Moves focus down an author-determined number of rows, typically scrolling so the bottom row in the currently visible set of rows becomes one of the first visible rows. If focus is in the last row of the grid, focus does not move.
  • Page Up (Optional): Moves focus up an author-determined number of rows, typically scrolling so the top row in the currently visible set of rows becomes one of the last visible rows. If focus is in the first row of the grid, focus does not move.
  • Home: moves focus to the first cell in the row that contains focus. Optionally, if the grid has a single column or fewer than three cells per row, focus may instead move to the first cell in the grid.
  • End: moves focus to the last cell in the row that contains focus. Optionally, if the grid has a single column or fewer than three cells per row, focus may instead move to the last cell in the grid.
  • Control + Home (optional): moves focus to the first cell in the first row.
  • Control + End (Optional): moves focus to the last cell in the last row.
Note
  • When the above grid navigation keys move focus, whether the focus is set on an element inside the cell or the grid cell depends on cell content. See Whether to Focus on a Cell or an Element Inside It.
  • While navigation keys, such as arrow keys, are moving focus from cell to cell, they are not available to do something like operate a combobox or move an editing caret inside of a cell. If this functionality is needed, see Editing and Navigating Inside a Cell.
  • If navigation functions can dynamically add more rows or columns to the DOM, key events that move focus to the beginning or end of the grid, such as control + End, may move focus to the last row in the DOM rather than the last available row in the back-end data.

It would be unusual for a layout grid to provide functions that require cell selection. If it did, though, the following keys are commonly used for these functions.

  • Control + Space: selects the column that contains the focus.
  • Shift + Space: Selects the row that contains the focus. If the grid includes a column with checkboxes for selecting rows, this key can serve as a shortcut for checking the box when focus is not on the checkbox.
  • Control + A: Selects all cells.
  • Shift + Right Arrow: Extends selection one cell to the right.
  • Shift + Left Arrow: Extends selection one cell to the left.
  • Shift + Down Arrow: Extends selection one cell down.
  • Shift + Up Arrow: Extends selection one cell Up.
Note

See 6.8 공통 기능에 대한 키 할당 규칙 for cut, copy, and paste key assignments.

Keyboard Interaction - Setting Focus and Navigating Inside Cells

This section describes two important aspects of keyboard interaction design shared by both data and layout grid patterns:

  1. Choosing whether a cell or an element inside a cell receives focus in response to grid navigation key events.
  2. Enabling grid navigation keys to be used to interact with elements inside of a cell.
Whether to Focus on a Cell Or an Element Inside It

For assistive technology users, the quality of experience when navigating a grid heavily depends on both what a cell contains and on where keyboard focus is set. For example, if a cell contains a button and a grid navigation key places focus on the cell instead of the button, screen readers announce the button label but do not tell users a button is present.

There are two optimal cell design and focus behavior combinations:

  1. A cell contains one widget whose operation does not require arrow keys and grid navigation keys set focus on that widget. Examples of such widgets include link, button, menubutton, toggle button, radio button (not radio group), switch, and checkbox.
  2. A cell contains text or a single graphic and grid navigation keys set focus on the cell.

While any combination of widgets, text, and graphics may be included in a single cell, grids that do not follow one of these two cell design and focus movement patterns add complexity for authors or users or both. The reference implementations included in the example section below demonstrate some strategies for making other cell designs as accessible as possible, but the most widely accessible experiences are likely to come by applying the above two patterns.

Editing and Navigating Inside a Cell

While navigation keys, such as arrow keys, are moving focus from cell to cell, they are not available to perform actions like operate a combobox or move an editing caret inside of a cell. The user may need keys that are used for grid navigation to operate elements inside a cell if a cell contains:

  1. Editable content.
  2. Multiple widgets.
  3. A widget that utilizes arrow keys in its interaction model, such as a radio group or slider.

Following are common keyboard conventions for disabling and restoring grid navigation functions.

  • Enter: Disables grid navigation and:
    • If the cell contains editable content, places focus in an input field, such as a textbox. If the input is a single-line text field, a subsequent press of Enter may either restore grid navigation functions or move focus to an input field in a neighboring cell.
    • If the cell contains one or more widgets, places focus on the first widget.
  • F2:
    • If the cell contains editable content, places focus in an input field, such as a textbox. A subsequent press of F2 restores grid navigation functions.
    • If the cell contains one or more widgets, places focus on the first widget. A subsequent press of F2 restores grid navigation functions.
  • Alphanumeric keys: If the cell contains editable content, places focus in an input field, such as a textbox.

When grid navigation is disabled, conventional changes to navigation behaviors include:

  • Escape: restores grid navigation. If content was being edited, it may also undo edits.
  • Right Arrow or Down Arrow: If the cell contains multiple widgets, moves focus to the next widget inside the cell, optionally wrapping to the first widget if focus is on the last widget. Otherwise, passes the key event to the focused widget.
  • Left Arrow or Up Arrow: If the cell contains multiple widgets, moves focus to the previous widget inside the cell, optionally wrapping to the first widget if focus is on the last widget. Otherwise, passes the key event to the focused widget.
  • Tab: moves focus to the next widget in the grid. Optionally, the focus movement may wrap inside a single cell or within the grid itself.
  • Shift + Tab: moves focus to the previous widget in the grid. Optionally, the focus movement may wrap inside a single cell or within the grid itself.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The grid container has role grid.
  • Each row container has role row and is either a DOM descendant of or owned by the grid element or an element with role rowgroup.
  • Each cell is either a DOM descendant of or owned by a row element and has one of the following roles:
    • columnheader if the cell contains a title or header information for the column.
    • rowheader if the cell contains title or header information for the row.
    • gridcell if the cell does not contain column or row header information.
  • If there is an element in the user interface that serves as a label for the grid, aria-labelledby is set on the grid element with a value that refers to the labelling element. Otherwise, a label is specified for the grid element using aria-label.
  • If the grid has a caption or description, aria-describedby is set on the grid element with a value referring to the element containing the description.
  • If the grid provides sort functions, aria-sort is set to an appropriate value on the header cell element for the sorted column or row as described in the section on grid and table properties.
  • If the grid supports selection, when a cell or row is selected, the selected element has aria-selected set true. If the grid supports column selection and a column is selected, all cells in the column have aria-selected set to true.
  • If the grid provides content editing functionality and contains cells that may have edit capabilities disabled in certain conditions, aria-readonly may be set true on cells where editing is disabled. If edit functions are disabled for all cells, aria-readonly may be set true on the grid element. Grids that do not provide editing functions do not include the aria-readonly attribute on any of their elements.
  • If there are conditions where some rows or columns are hidden or not present in the DOM, e.g., data is dynamically loaded when scrolling or the grid provides functions for hiding rows or columns, the following properties are applied as described in the section on grid and table properties.
  • If the grid includes cells that span multiple rows or multiple columns, and if the grid role is NOT applied to an HTML table element, then aria-rowspan or aria-colspan is applied as described in grid and table properties.
Note
  • If the element with the grid role is an HTML table element, then it is not necessary to use ARIA roles for rows and cells because the HTML elements have implied ARIA semantics. For example, an HTML <TR> has an implied ARIA role of row. A grid built from an HTML table that includes cells that span multiple rows or columns must use HTML rowspan and colspan and must not use aria-rowspan or aria-colspan.
  • If rows or cells are included in a grid via aria-owns, they will be presented to assistive technologies after the DOM descendants of the grid element unless the DOM descendants are also included in the aria-owns attribute.

3.14 Listbox

A listbox widget presents a list of options and allows a user to select one or more of them. A listbox that allows a single option to be chosen is a single-select listbox; one that allows multiple options to be selected is a multi-select listbox.

When screen readers present a listbox, they may render the name, state, and position of each option in the list. The name of an option is a string calculated by the browser, typically from the content of the option element. As a flat string, the name does not contain any semantic information. Thus, if an option contains a semantic element, such as a heading, screen reader users will not have access to the semantics. In addition, the interaction model conveyed by the listbox role to assistive technologies does not support interacting with elements inside of an option. Because of these traits of the listbox widget, it does not provide an accessible way to present a list of interactive elements, such as links, buttons, or checkboxes. To present a list of interactive elements, see the grid pattern.

Avoiding very long option names facilitates understandability and perceivability for screen reader users. The entire name of an option is spoken as a single unit of speech when the option is read. When too much information is spoken as the result of a single key press, it is difficult to understand. Long names inhibit perception by increasing the impact of interrupted speech because users typically have to re-read the entire option. And, if the user does not understand what is spoken, reading the name by character, word, or phrase may be a difficult operation for many screen reader users in the context of a listbox widget.

Sets of options where each option name starts with the same word or phrase can also significantly degrade usability for keyboard and screen reader users. Scrolling through the list to find a specific option becomes inordinately time consuming for a screen reader user who must listen to that word or phrase repeated before hearing what is unique about each option. For example, if a listbox for choosing a city were to contain options where each city name were preceded by a country name, and if many cities were listed for each country, a screen reader user would have to listen to the country name before hearing each city name. In such a scenario, it would be better to have 2 list boxes, one for country and one for city.

Examples

키보드 인터랙션

For a vertically oriented listbox:

  • When a single-select listbox receives focus:
    • If none of the options are selected before the listbox receives focus, the first option receives focus. Optionally, the first option may be automatically selected.
    • If an option is selected before the listbox receives focus, focus is set on the selected option.
  • When a multi-select listbox receives focus:
    • If none of the options are selected before the listbox receives focus, focus is set on the first option and there is no automatic change in the selection state.
    • If one or more options are selected before the listbox receives focus, focus is set on the first option in the list that is selected.
  • Down Arrow: Moves focus to the next option. Optionally, in a single-select listbox, selection may also move with focus.
  • Up Arrow: Moves focus to the previous option. Optionally, in a single-select listbox, selection may also move with focus.
  • Home (Optional): Moves focus to first option. Optionally, in a single-select listbox, selection may also move with focus. Supporting this key is strongly recommended for lists with more than five options.
  • End (Optional): Moves focus to last option. Optionally, in a single-select listbox, selection may also move with focus. Supporting this key is strongly recommended for lists with more than five options.
  • Type-ahead is recommended for all listboxes, especially those with more than seven options:
    • Type a character: focus moves to the next item with a name that starts with the typed character.
    • Type multiple characters in rapid succession: focus moves to the next item with a name that starts with the string of characters typed.
  • Multiple Selection: Authors may implement either of two interaction models to support multiple selection: a recommended model that does not require the user to hold a modifier key, such as Shift or Control, while navigating the list or an alternative model that does require modifier keys to be held while navigating in order to avoid losing selection states.
    • Recommended selection model -- holding modifier keys is not necessary:
      • Space: changes the selection state of the focused option.
      • Shift + Down Arrow (Optional): Moves focus to and toggles the selected state of the next option.
      • Shift + Up Arrow (Optional): Moves focus to and toggles the selected state of the previous option.
      • Shift + Space (Optional): Selects contiguous items from the most recently selected item to the focused item.
      • Control + Shift + Home (Optional): Selects the focused option and all options up to the first option. Optionally, moves focus to the first option.
      • Control + Shift + End (Optional): Selects the focused option and all options down to the last option. Optionally, moves focus to the last option.
      • Control + A (Optional): Selects all options in the list. Optionally, if all options are selected, it may also unselect all options.
    • Alternative selection model -- moving focus without holding a Shift or Control modifier unselects all selected options except the focused option:
      • Shift + Down Arrow: Moves focus to and toggles the selection state of the next option.
      • Shift + Up Arrow: Moves focus to and toggles the selection state of the previous option.
      • Control + Down Arrow: Moves focus to the next option without changing its selection state.
      • Control + Up Arrow: Moves focus to the previous option without changing its selection state.
      • Control + Space Changes the selection state of the focused option.
      • Shift + Space (Optional): Selects contiguous items from the most recently selected item to the focused item.
      • Control + Shift + Home (Optional): Selects the focused option and all options up to the first option. Optionally, moves focus to the first option.
      • Control + Shift + End (Optional): Selects the focused option and all options down to the last option. Optionally, moves focus to the last option.
      • Control + A (Optional): Selects all options in the list. Optionally, if all options are selected, it may also unselect all options.
Note
  1. DOM focus (the active element) is functionally distinct from the selected state. For more details, see this description of differences between focus and selection.
  2. The listbox role supports the aria-activedescendant property, which provides an alternative to moving DOM focus among option elements when implementing keyboard navigation. For details, see Managing Focus in Composites Using aria-activedescendant.
  3. In a single-select listbox, moving focus may optionally unselect the previously selected option and select the newly focused option. This model of selection is known as "selection follows focus". Having selection follow focus can be very helpful in some circumstances and can severely degrade accessibility in others. For additional guidance, see Deciding When to Make Selection Automatically Follow Focus.
  4. If selecting or unselecting all options is an important function, implementing separate controls for these actions, such as buttons for "Select All" and "Unselect All", significantly improves accessibility.
  5. If the options in a listbox are arranged horizontally:
    1. Down Arrow performs as Right Arrow is described above, and vice versa.
    2. Up Arrow performs as Left Arrow is described above, and vice versa.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • An element that contains or owns all the listbox options has role listbox.
  • Each option in the listbox has role option and is contained in or owned by either:
    • The element with role listbox.
    • An element with role group that is contained in or owned by the element with role listbox.
  • Options contained in a group are referred to as grouped options and form what is called an option group. If a listbox contains grouped options, then:
    • All option groups contain at least one option.
    • Each option group has an accessible name provided via aria-label or aria-labelledby.
  • If the element with role listbox is not part of another widget, such as a combobox, then it has either a visible label referenced by aria-labelledby or a value specified for aria-label.
  • If the listbox supports selection of more than one option, the element with role listbox has aria-multiselectable set to true. Otherwise, aria-multiselectable is either set to false or the default value of false is implied.
  • The selection state of each selectable option is indicated with either aria-selected or aria-checked:
    • If the selection state is indicated with aria-selected, then aria-checked is not specified for any options. Alternatively, if the selection state is indicated with aria-checked, then aria-selected is not specified for any options. See notes below regarding considerations for which property to use and for details of the unusual conditions that might allow for both properties in the same listbox.
    • If any options are selected, each selected option has either aria-selected or aria-checked set to true. No more than one option is selected at a time if the element with role listbox does not have aria-multiselectable set to true.
    • All options that are selectable but not selected have either aria-selected or aria-checked set to false.
    • Note that except in listboxes where selection follows focus, the selected state is distinct from focus. For more details, see this description of differences between focus and selection and Deciding When to Make Selection Automatically Follow Focus.
  • If the complete set of available options is not present in the DOM due to dynamic loading as the user scrolls, their aria-setsize and aria-posinset attributes are set appropriately.
  • If options are arranged horizontally, the element with role listbox has aria-orientation set to horizontal. The default value of aria-orientation for listbox is vertical.
Note
  1. Some factors to consider when choosing whether to indicate selection with aria-selected or aria-checked are:
    • Some design systems use aria-selected for single-select widgets and aria-checked for multi-select widgets. In the absence of factors that would make an alternative convention more appropriate, this is a recommended convention.
    • The language of instructions and the appearance of the interface might suggest one attribute is more appropriate than the other. For instance, do instructions say to select items? Or, is the visual indicator of selection a check mark?
    • It is important to adopt a consistent convention for selection models across a site or app.
  2. Conditions that would permit a listbox to include both aria-selected and aria-checked are extremely rare. It is strongly recommended to avoid designing a listbox widget that would have the need for more than one type of state. If both states were to be used within a listbox, all the following conditions need to be satisfied:
    • The meaning and purpose of aria-selected is different from the meaning and purpose of aria-checked in the user interface.
    • The user interface makes the meaning and purpose of each state apparent.
    • The user interface provides a separate method for controlling each state.
  3. If aria-owns is set on the listbox element to include elements that are not DOM children of the container, those elements will appear in the reading order in the sequence they are referenced and after any items that are DOM children. Scripts that manage focus need to ensure the visual focus order matches this assistive technology reading order.

3.17 Meter

A meter is a graphical display of a numeric value that varies within a defined range. For example, a meter could be used to depict a device's current battery percentage or a car's fuel level.

Note
  • A meter should not be used to represent a value like the current world population since it does not have a meaningful maximum limit.
  • The meter should not be used to indicate progress, such as loading or percent completion of a task. To communicate progress, use the progressbar role instead.

Example

Meter Example

키보드 인터랙션

Not applicable.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The element serving as the meter has a role of meter.
  • The meter has aria-valuenow set to a decimal value between aria-valuemin and aria-valuemax representing the current value of the meter.
  • The meter has aria-valuemin set to a decimal value less than aria-valuemax.
  • The meter has aria-valuemax set to a decimal value greater than aria-valuemin.
  • Assistive technologies often present aria-valuenow as a percentage. If conveying the value of the meter only in terms of a percentage would not be user friendly, the aria-valuetext property is set to a string that makes the meter value understandable. For example, a battery meter value might be conveyed as aria-valuetext="50% (6 hours) remaining".
  • If the meter has a visible label, it is referenced by aria-labelledby on the element with role meter. Otherwise, the element with role meter has a label provided by aria-label.

3.18 Radio Group

A radio group is a set of checkable buttons, known as radio buttons, where no more than one of the buttons can be checked at a time. Some implementations may initialize the set with all buttons in the unchecked state in order to force the user to check one of the buttons before moving past a certain point in the workflow.

Examples

키보드 인터랙션

For Radio Groups Not Contained in a Toolbar

This section describes the keyboard interaction implemented for most radio groups. For the special case of a radio group nested inside a toolbar, use the keyboard interaction described in the following section.

  • Tab and Shift + Tab: Move focus into and out of the radio group. When focus moves into a radio group :
    • If a radio button is checked, focus is set on the checked button.
    • If none of the radio buttons are checked, focus is set on the first radio button in the group.
  • Space: checks the focused radio button if it is not already checked.
  • Right Arrow and Down Arrow: move focus to the next radio button in the group, uncheck the previously focused button, and check the newly focused button. If focus is on the last button, focus moves to the first button.
  • Left Arrow and Up Arrow: move focus to the previous radio button in the group, uncheck the previously focused button, and check the newly focused button. If focus is on the first button, focus moves to the last button.
Note

The initial focus behavior described above differs slightly from the behavior provided by some browsers for native HTML radio groups. In some browsers, if none of the radio buttons are selected, moving focus into the radio group with Shift+Tab will place focus on the last radio button instead of the first radio button.

For Radio Group Contained in a Toolbar

Because arrow keys are used to navigate among elements of a toolbar and the Tab key moves focus in and out of a toolbar, when a radio group is nested inside a toolbar, the keyboard interaction of the radio group is slightly different from that of a radio group that is not inside of a toolbar. For instance, users need to be able to navigate among all toolbar elements, including the radio buttons, without changing which radio button is checked. So, when navigating through a radio group in a toolbar with arrow keys, the button that is checked does not change. The keyboard interaction of a radio group nested in a toolbar is as follows.

  • Space: If the focused radio button is not checked, unchecks the currently checked radio button and checks the focused radio button. Otherwise, does nothing.
  • Enter (optional): If the focused radio button is not checked, unchecks the currently checked radio button and checks the focused radio button. Otherwise, does nothing.
  • Right Arrow:
    • When focus is on a radio button and that radio button is not the last radio button in the radio group, moves focus to the next radio button.
    • When focus is on the last radio button in the radio group and that radio button is not the last element in the toolbar, moves focus to the next element in the toolbar.
    • When focus is on the last radio button in the radio group and that radio button is also the last element in the toolbar, moves focus to the first element in the toolbar.
  • Left Arrow:
    • When focus is on a radio button and that radio button is not the first radio button in the radio group, moves focus to the previous radio button.
    • When focus is on the first radio button in the radio group and that radio button is not the first element in the toolbar, moves focus to the previous element in the toolbar.
    • When focus is on the first radio button in the radio group and that radio button is also the first element in the toolbar, moves focus to the last element in the toolbar.
  • Down Arrow (optional): Moves focus to the next radio button in the radio group. If focus is on the last radio button in the radio group, moves focus to the first radio button in the group.
  • Up Arrow (optional): Moves focus to the previous radio button in the radio group. If focus is on the first radio button in the radio group, moves focus to the last radio button in the group.
Note

Radio buttons in a toolbar are frequently styled in a manner that appears more like toggle buttons. For an example, See the Simple Editor Toolbar Example

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The radio buttons are contained in or owned by an element with role radiogroup.
  • Each radio button element has role radio.
  • If a radio button is checked, the radio element has aria-checked set to true. If it is not checked, it has aria-checked set to false.
  • Each radio element is labelled by its content, has a visible label referenced by aria-labelledby, or has a label specified with aria-label.
  • The radiogroup element has a visible label referenced by aria-labelledby or has a label specified with aria-label.
  • If elements providing additional information about either the radio group or each radio button are present, those elements are referenced by the radiogroup element or radio elements with the aria-describedby property.

3.19 Slider

A slider is an input where the user selects a value from within a given range. Sliders typically have a slider thumb that can be moved along a bar or track to change the value of the slider.

Warning

Some users of touch-based assistive technologies may experience difficulty utilizing widgets that implement this slider pattern because the gestures their assistive technology provides for operating sliders may not yet generate the necessary output. To change the slider value, touch-based assistive technologies need to respond to user gestures for increasing and decreasing the value by synthesizing key events. This is a new convention that may not be fully implemented by some assistive technologies. Authors should fully test slider widgets using assistive technologies on devices where touch is a primary input mechanism before considering incorporation into production systems.

Examples

  • Color Viewer Slider Example: Basic horizontal sliders that illustrate setting numeric values for a color picker.
  • Vertical Temperature Slider Example: Demonstrates using aria-orientation to specify vertical orientation and aria-valuetext to communicate unit of measure for a temperature input.
  • Rating Slider Example: Horizontal slider that demonstrates using aria-valuetext to communicate current and maximum value of a rating input for a five star rating scale.
  • Media Seek Slider Example: Horizontal slider that demonstrates using aria-valuetext to communicate current and maximum values of time in media to make the values easy to understand for assistive technology users by converting the total number of seconds to minutes and seconds.

키보드 인터랙션

  • Right Arrow: Increase the value of the slider by one step.
  • Up Arrow: Increase the value of the slider by one step.
  • Left Arrow: Decrease the value of the slider by one step.
  • Down Arrow: Decrease the value of the slider by one step.
  • Home: Set the slider to the first allowed value in its range.
  • End: Set the slider to the last allowed value in its range.
  • Page Up (Optional): Increase the slider value by an amount larger than the step change made by Up Arrow.
  • Page Down (Optional): Decrease the slider value by an amount larger than the step change made by Down Arrow.
Note
  1. Focus is placed on the slider (the visual object that the mouse user would move, also known as the thumb.
  2. In some circumstances, reversing the direction of the value change for the keys specified above, e.g., having Up Arrow decrease the value, could create a more intuitive experience.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The element serving as the focusable slider control has role slider.
  • The slider element has the aria-valuenow property set to a decimal value representing the current value of the slider.
  • The slider element has the aria-valuemin property set to a decimal value representing the minimum allowed value of the slider.
  • The slider element has the aria-valuemax property set to a decimal value representing the maximum allowed value of the slider.
  • If the value of aria-valuenow is not user-friendly, e.g., the day of the week is represented by a number, the aria-valuetext property is set to a string that makes the slider value understandable, e.g., "Monday".
  • If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.
  • If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.

3.20 Slider (Multi-Thumb)

A multi-thumb slider is a slider with two or more thumbs that each set a value in a group of related values. For example, in a product search, a two-thumb slider could be used to enable users to set the minimum and maximum price limits for the search. In many two-thumb sliders, the thumbs are not allowed to pass one another, such as when the slider sets the minimum and maximum values for a range. For example, in a price range selector, the maximum value of the thumb that sets the lower end of the range is limited by the current value of the thumb that sets the upper end of the range. Conversely, the minimum value of the upper end thumb is limited by the current value of the lower end thumb. However, in some multi-thumb sliders, each thumb sets a value that does not depend on the other thumb values.

Warning

Some users of touch-based assistive technologies may experience difficulty utilizing widgets that implement this slider pattern because the gestures their assistive technology provides for operating sliders may not yet generate the necessary output. To change the slider value, touch-based assistive technologies need to respond to user gestures for increasing and decreasing the value by synthesizing key events. This is a new convention that may not be fully implemented by some assistive technologies. Authors should fully test slider widgets using assistive technologies on devices where touch is a primary input mechanism before considering incorporation into production systems.

Example

Multi-Thumb Slider Examples: Demonstrates a two-thumb slider for picking a price range for a hotel reservation.

키보드 인터랙션

  • Each thumb is in the page tab sequence and has the same keyboard interaction as a single-thumb slider.
  • The tab order remains constant regardless of thumb value and visual position within the slider. For example, if the value of a thumb changes such that it moves past one of the other thumbs, the tab order does not change.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • Each element serving as a focusable slider thumb has role slider.
  • Each slider element has the aria-valuenow property set to a decimal value representing the current value of the slider.
  • Each slider element has the aria-valuemin property set to a decimal value representing the minimum allowed value of the slider.
  • Each slider element has the aria-valuemax property set to a decimal value representing the maximum allowed value of the slider.
  • When the range (e.g. minimum and/or maximum value) of another slider is dependent on the current value of a slider, the values of aria-valuemin or aria-valuemax of the dependent sliders are updated when the value changes.
  • If a value of aria-valuenow is not user-friendly, e.g., the day of the week is represented by a number, the aria-valuetext property is set to a string that makes the slider value understandable, e.g., "Monday".
  • If a slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.
  • If a slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.

3.21 Spinbutton

A spinbutton is an input widget that restricts its value to a set or range of discrete values. For example, in a widget that enables users to set an alarm, a spinbutton could allow users to select a number from 0 to 59 for the minute of an hour.

Spinbuttons often have three components, including a text field that displays the current value, an increase button, and a decrease button. The text field is usually the only focusable component because the increase and decrease functions are keyboard accessible via arrow keys. Typically, the text field also allows users to directly edit the value.

If the range is large, a spinbutton may support changing the value in both small and large steps. For instance, in the alarm example, the user may be able to move by 1 minute with Up Arrow and Down Arrow and by 10 minutes with Page Up and Page Down.

Example

Date Picker Spin Button Example: Illustrates a date picker made from three spin buttons for day, month, and year.

키보드 인터랙션

  • Up Arrow: Increases the value.
  • Down Arrow: Decreases the value.
  • Home: If the spinbutton has a minimum value, sets the value to its minimum.
  • End: If the spinbutton has a maximum value, sets the value to its maximum.
  • Page Up (Optional): Increases the value by a larger step than Up Arrow.
  • Page Down (Optional): Decreases the value by a larger step than Down Arrow.
  • If the spinbutton text field allows directly editing the value, the following keys are supported:
    • Standard single line text editing keys appropriate for the device platform (see note below).
    • Printable Characters: Type characters in the textbox. Note that many implementations allow only certain characters as part of the value and prevent input of any other characters. For example, an hour-and-minute spinner would allow only integer values from 0 to 59, the colon ':', and the letters 'AM' and 'PM'. Any other character input does not change the contents of the text field nor the value of the spinbutton.
Note
  1. Focus remains on the text field during operation.
  2. Standard single line text editing keys appropriate for the device platform:
    1. include keys for input, cursor movement, selection, and text manipulation.
    2. Standard key assignments for editing functions depend on the device operating system.
    3. The most robust approach for providing text editing functions is to rely on browsers, which supply them for HTML inputs with type text and for elements with the contenteditable HTML attribute.
    4. IMPORTANT: Be sure that JavaScript does not interfere with browser-provided text editing functions by capturing key events for the keys used to perform them.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The focusable element serving as the spinbutton has role spinbutton. This is typically an element that supports text input.
  • The spinbutton element has the aria-valuenow property set to a decimal value representing the current value of the spinbutton.
  • The spinbutton element has the aria-valuemin property set to a decimal value representing the minimum allowed value of the spinbutton if it has a known minimum value.
  • The spinbutton element has the aria-valuemax property set to a decimal value representing the maximum allowed value of the spinbutton if it has a known maximum value.
  • If the value of aria-valuenow is not user-friendly, e.g., the day of the week is represented by a number, the aria-valuetext property is set on the spinbutton element to a string that makes the spinbutton value understandable, e.g., "Monday".
  • If the spinbutton has a visible label, it is referenced by aria-labelledby on the spinbutton element. Otherwise, the spinbutton element has a label provided by aria-label.
  • The spinbutton element has aria-invalid set to true if the value is outside the allowed range. Note that most implementations prevent input of invalid values, but in some scenarios, blocking all invalid input may not be practical.

3.22 Switch

A switch is an input widget that allows users to choose one of two values: on or off. Switches are similar to checkboxes and toggle buttons, which can also serve as binary inputs. One difference, however, is that switches can only be used for binary input while checkboxes and toggle buttons allow implementations the option of supporting a third middle state. Checkboxes can be checked or not checked and can optionally also allow for a partially checked state. Toggle buttons can be pressed or not pressed and can optionally allow for a partially pressed state.

Since switch, checkbox, and toggle button all offer binary input, they are often functionally interchangeable. Choose the role that best matches both the visual design and semantics of the user interface. For instance, there are some circumstances where the semantics of on or off would be easier for assistive technology users to understand than the semantics of checked or unchecked, and vice versa. Consider a widget for turning lights on or off. In this case, screen reader output of Lights switch on is more user friendly than Lights checkbox checked. However, if the same input were in a group of inputs labeled Which of the following must be included in your pre-takeoff procedures?, Lights checkbox checked would make more sense.

Important: it is critical the label on a switch does not change when its state changes.

Examples

Keyboard Interaction

  • Space: When focus is on the switch, changes the state of the switch.
  • Enter (Optional): When focus is on the switch, changes the state of the switch.

WAI-ARIA Roles, States, and Properties

  • The switch has role switch.
  • The switch has an accessible label provided by one of the following:
    • Visible text content contained within the element with role switch.
    • A visible label referenced by the value of aria-labelledby set on the element with role switch.
    • aria-label set on the element with role switch.
  • When on, the switch element has state aria-checked set to true.
  • When off, the switch element has state aria-checked set to false.
  • If the switch element is an HTML input[type="checkbox"], it uses the HTML checked attribute instead of the aria-checked property.
  • If a set of switches is presented as a logical group with a visible label, either:
    • The switches are included in an element with role group that has the property aria-labelledby set to the ID of the element containing the group label.
    • The set is contained in an HTML fieldset and the label for the set is contained in an HTML legend element.
  • If the presentation includes additional descriptive static text relevant to a switch or switch group, the switch or switch group has the property aria-describedby set to the ID of the element containing the description.

3.23 Table

Like an HTML table element, a WAI-ARIA table is a static tabular structure containing one or more rows that each contain one or more cells; it is not an interactive widget. Thus, its cells are not focusable or selectable. The grid pattern is used to make an interactive widget that has a tabular structure.

However, tables are often used to present a combination of information and interactive widgets. Since a table is not a widget, each widget contained in a table is a separate stop in the page tab sequence. If the number of widgets is large, replacing the table with a grid can dramatically reduce the length of the page tab sequence because a grid is a composite widget that can contain other widgets.

Note

As with other WAI-ARIA roles that have a native host language equivalent, authors are strongly encouraged to use a native HTML table element whenever possible. This is especially important with role table because it is a new feature of WAI-ARIA 1.1. It is thus advisable to test implementations thoroughly with each browser and assistive technology combination that could be used by the target audience.

Examples

  • Table Example: ARIA table made using HTML div and span elements.
  • Sortable Table Example: Basic HTML table that illustrates implementation of aria-sort in the headers of sortable columns.

키보드 인터랙션

Not applicable.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The table container has role table.
  • Each row container has role row and is either a DOM descendant of or owned by the table element or an element with role rowgroup.
  • Each cell is either a DOM descendant of or owned by a row element and has one of the following roles:
    • columnheader if the cell contains a title or header information for the column.
    • rowheader if the cell contains title or header information for the row.
    • cell if the cell does not contain column or row header information.
  • If there is an element in the user interface that serves as a label for the table, aria-labelledby is set on the table element with a value that refers to the labelling element. Otherwise, a label is specified for the table element using aria-label.
  • If the table has a caption or description, aria-describedby is set on the table element with a value referring to the element containing the description.
  • If the table contains sortable columns or rows, aria-sort is set to an appropriate value on the header cell element for the sorted column or row as described in the section on grid and table properties.
  • If there are conditions where some rows or columns are hidden or not present in the DOM, e.g., there are widgets on the page for hiding rows or columns, the following properties are applied as described in the section on grid and table properties.
  • If the table includes cells that span multiple rows or multiple columns, then aria-rowspan or aria-colspan is applied as described in grid and table properties.
Note

If rows or cells are included in a table via aria-owns, they will be presented to assistive technologies after the DOM descendants of the table element unless the DOM descendants are also included in the aria-owns attribute.

3.24 Tabs

Tabs are a set of layered sections of content, known as tab panels, that display one panel of content at a time. Each tab panel has an associated tab element, that when activated, displays the panel. The list of tab elements is arranged along one edge of the currently displayed panel, most commonly the top edge.

Terms used to describe this 설계 패턴 include:

Tabs or Tabbed Interface
A set of tab elements and their associated tab panels.
Tab List
A set of tab elements contained in a tablist element.
tab
An element in the tab list that serves as a label for one of the tab panels and can be activated to display that panel.
tabpanel
The element that contains the content associated with a tab.

When a tabbed interface is initialized, one tab panel is displayed and its associated tab is styled to indicate that it is active. When the user activates one of the other tab elements, the previously displayed tab panel is hidden, the tab panel associated with the activated tab becomes visible, and the tab is considered "active".

Examples

키보드 인터랙션

For the tab list:

  • Tab:
    • When focus moves into the tab list, places focus on the active tab element.
    • When the tab list contains the focus, moves focus to the next element in the page tab sequence outside the tablist, which is the tabpanel unless the first element containing meaningful content inside the tabpanel is focusable.
  • When focus is on a tab element in a horizontal tab list:
    • Left Arrow: moves focus to the previous tab. If focus is on the first tab, moves focus to the last tab. Optionally, activates the newly focused tab (See note below).
    • Right Arrow: Moves focus to the next tab. If focus is on the last tab element, moves focus to the first tab. Optionally, activates the newly focused tab (See note below).
  • When focus is on a tab in a tablist with either horizontal or vertical orientation:
    • Space or Enter: Activates the tab if it was not activated automatically on focus.
    • Home (Optional): Moves focus to the first tab. Optionally, activates the newly focused tab (See note below).
    • End (Optional): Moves focus to the last tab. Optionally, activates the newly focused tab (See note below).
    • Shift + F10: If the tab has an associated popup menu, opens the menu.
    • Delete (Optional): If deletion is allowed, deletes (closes) the current tab element and its associated tab panel, sets focus on the tab following the tab that was closed, and optionally activates the newly focused tab. If there is not a tab that followed the tab that was deleted, e.g., the deleted tab was the right-most tab in a left-to-right horizontal tab list, sets focus on and optionally activates the tab that preceded the deleted tab. If the application allows all tabs to be deleted, and the user deletes the last remaining tab in the tab list, the application moves focus to another element that provides a logical work flow. As an alternative to Delete, or in addition to supporting Delete, the delete function is available in a context menu.
Note
  1. It is recommended that tabs activate automatically when they receive focus as long as their associated tab panels are displayed without noticeable latency. This typically requires tab panel content to be preloaded. Otherwise, automatic activation slows focus movement, which significantly hampers users' ability to navigate efficiently across the tab list. For additional guidance, see 6.4 초점을 따라 자동으로 선택되게 하는 시기 결정.
  2. When a tab list has its aria-orientation set to vertical:
    1. Down Arrow performs as Right Arrow is described above.
    2. Up Arrow performs as Left Arrow is described above.
  3. If the tab list is horizontal, it does not listen for Down Arrow or Up Arrow so those keys can provide their normal browser scrolling functions even when focus is inside the tab list.
  4. When the tabpanel does not contain any focusable elements or the first element with content is not focusable, the tabpanel should set tabindex="0" to include it in the tab sequence of the page.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The element that serves as the container for the set of tabs has role tablist.
  • Each element that serves as a tab has role tab and is contained within the element with role tablist.
  • Each element that contains the content panel for a tab has role tabpanel.
  • If the tab list has a visible label, the element with role tablist has aria-labelledby set to a value that refers to the labelling element. Otherwise, the tablist element has a label provided by aria-label.
  • Each element with role tab has the property aria-controls referring to its associated tabpanel element.
  • The active tab element has the state aria-selected set to true and all other tab elements have it set to false.
  • Each element with role tabpanel has the property aria-labelledby referring to its associated tab element.
  • If a tab element has a popup menu, it has the property aria-haspopup set to either menu or true.
  • If the tablist element is vertically oriented, it has the property aria-orientation set to vertical. The default value of aria-orientation for a tablist element is horizontal.

3.25 Toolbar

A toolbar is a container for grouping a set of controls, such as buttons, menubuttons, or checkboxes.

When a set of controls is visually presented as a group, the toolbar role can be used to communicate the presence and purpose of the grouping to screen reader users. Grouping controls into toolbars can also be an effective way of reducing the number of tab stops in the keyboard interface.

To optimize the benefit of toolbar widgets:

Example

Toolbar Example: A toolbar that uses roving tabindex to manage focus and contains several types of controls, including toggle buttons, radio buttons, a menu button, a spin button, a checkbox, and a link.

키보드 인터랙션

  • Tab and Shift + Tab: Move focus into and out of the toolbar. When focus moves into a toolbar:
    • If focus is moving into the toolbar for the first time, focus is set on the first control that is not disabled.
    • If the toolbar has previously contained focus, focus is optionally set on the control that last had focus. Otherwise, it is set on the first control that is not disabled.
  • For a horizontal toolbar (the default):
    • Left Arrow: Moves focus to the previous control. Optionally, focus movement may wrap from the first element to the last element.
    • Right Arrow: Moves focus to the next control. Optionally, focus movement may wrap from the last element to the first element.
  • Home (Optional): Moves focus to first element.
  • End (Optional): Moves focus to last element.
Note
  1. If the items in a toolbar are arranged vertically:
    1. Down Arrow performs as Right Arrow is described above.
    2. Up Arrow performs as Left Arrow is described above.
  2. Typically, disabled elements are not focusable when navigating with a keyboard. However, in circumstances where discoverability of a function is crucial, it may be helpful if disabled controls are focusable so screen reader users are more likely to be aware of their presence. For additional guidance, see 6.7 비활성화 된 컨트롤의 초점 가능성(focusability).
  3. In applications where quick access to a toolbar is important, such as accessing an editor's toolbar from its text area, a documented shortcut key for moving focus from the relevant context to its corresponding toolbar is recommended.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The element that serves as the toolbar container has role toolbar.
  • If the toolbar has a visible label, it is referenced by aria-labelledby on the toolbar element. Otherwise, the toolbar element has a label provided by aria-label.
  • If the controls are arranged vertically, the toolbar element has aria-orientation set to vertical. The default orientation is horizontal.

3.26 Tooltip Widget

NOTE: This 설계 패턴 is work in progress; it does not yet have task force consensus. Progress and discussions are captured in issue 128.

A tooltip is a popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it. It typically appears after a small delay and disappears when Escape is pressed or on mouse out.

Tooltip widgets do not receive focus. A hover that contains focusable elements can be made using a non-modal dialog.

Example

Work to develop a tooltip example is tracked by issue 127.

키보드 인터랙션

Escape: Dismisses the Tooltip.

Note
  1. Focus stays on the triggering element while the tooltip is displayed.
  2. If the tooltip is invoked when the trigger element receives focus, then it is dismissed when it no longer has focus (onBlur). If the tooltip is invoked with mouseIn, then it is dismissed with on mouseOut.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The element that serves as the tooltip container has role tooltip.
  • The element that triggers the tooltip references the tooltip element with aria-describedby.

3.27 Tree View

A tree view widget presents a hierarchical list. Any item in the hierarchy may have child items, and items that have children may be expanded or collapsed to show or hide the children. For example, in a file system navigator that uses a tree view to display folders and files, an item representing a folder can be expanded to reveal the contents of the folder, which may be files, folders, or both.

Terms for understanding tree views include:

Node
An item in a tree.
Root Node
Node at the base of the tree; it may have one or more child nodes but does not have a parent node.
Child Node
Node that has a parent; any node that is not a root node is a child node.
End Node
Node that does not have any child nodes; an end node may be either a root node or a child node.
Parent Node
Node with one or more child nodes. It can be open (expanded) or closed (collapsed).
Open Node
Parent node that is expanded so its child nodes are visible.
Closed Node
Parent node that is collapsed so the child nodes are not visible.

When using a keyboard to navigate a tree, a visual keyboard indicator informs the user which node is focused. If the tree allows the user to choose just one item for an action, then it is known as a single-select tree. In some implementations of single-select tree, the focused item also has a selected state; this is known as selection follows focus. However, in multi-select trees, which enable the user to select more than one item for an action, the selected state is always independent of the focus. For example, in a typical file system navigator, the user can move focus to select any number of files for an action, such as copy or move. It is important that the visual design distinguish between items that are selected and the item that has focus. For more details, see this description of differences between focus and selection and Deciding When to Make Selection Automatically Follow Focus.

Examples

키보드 인터랙션

For a vertically oriented tree:

  • When a single-select tree receives focus:
    • If none of the nodes are selected before the tree receives focus, focus is set on the first node.
    • If a node is selected before the tree receives focus, focus is set on the selected node.
  • When a multi-select tree receives focus:
    • If none of the nodes are selected before the tree receives focus, focus is set on the first node.
    • If one or more nodes are selected before the tree receives focus, focus is set on the first selected node.
  • Right arrow:
    • When focus is on a closed node, opens the node; focus does not move.
    • When focus is on a open node, moves focus to the first child node.
    • When focus is on an end node, does nothing.
  • Left arrow:
    • When focus is on an open node, closes the node.
    • When focus is on a child node that is also either an end node or a closed node, moves focus to its parent node.
    • When focus is on a root node that is also either an end node or a closed node, does nothing.
  • Down Arrow: Moves focus to the next node that is focusable without opening or closing a node.
  • Up Arrow: Moves focus to the previous node that is focusable without opening or closing a node.
  • Home: Moves focus to the first node in the tree without opening or closing a node.
  • End: Moves focus to the last node in the tree that is focusable without opening a node.
  • Enter: activates a node, i.e., performs its default action. For parent nodes, one possible default action is to open or close the node. In single-select trees where selection does not follow focus (see note below), the default action is typically to select the focused node.
  • Type-ahead is recommended for all trees, especially for trees with more than 7 root nodes:
    • Type a character: focus moves to the next node with a name that starts with the typed character.
    • Type multiple characters in rapid succession: focus moves to the next node with a name that starts with the string of characters typed.
  • * (Optional): Expands all siblings that are at the same level as the current node.
  • Selection in multi-select trees: Authors may implement either of two interaction models to support multiple selection: a recommended model that does not require the user to hold a modifier key, such as Shift or Control, while navigating the list or an alternative model that does require modifier keys to be held while navigating in order to avoid losing selection states.
    • Recommended selection model -- holding a modifier key while moving focus is not necessary:
      • Space: Toggles the selection state of the focused node.
      • Shift + Down Arrow (Optional): Moves focus to and toggles the selection state of the next node.
      • Shift + Up Arrow (Optional): Moves focus to and toggles the selection state of the previous node.
      • Shift + Space (Optional): Selects contiguous nodes from the most recently selected node to the current node.
      • Control + Shift + Home (Optional): Selects the node with focus and all nodes up to the first node. Optionally, moves focus to the first node.
      • Control + Shift + End (Optional): Selects the node with focus and all nodes down to the last node. Optionally, moves focus to the last node.
      • Control + A (Optional): Selects all nodes in the tree. Optionally, if all nodes are selected, it can also unselect all nodes.
    • Alternative selection model -- Moving focus without holding the Shift or Control modifier unselects all selected nodes except for the focused node:
      • Shift + Down Arrow: Moves focus to and toggles the selection state of the next node.
      • Shift + Up Arrow: Moves focus to and toggles the selection state of the previous node.
      • Control + Down Arrow: Without changing the selection state, moves focus to the next node.
      • Control + Up Arrow: Without changing the selection state, moves focus to the previous node.
      • Control + Space: Toggles the selection state of the focused node.
      • Shift + Space (Optional): Selects contiguous nodes from the most recently selected node to the current node.
      • Control + Shift + Home (Optional): Selects the node with focus and all nodes up to the first node. Optionally, moves focus to the first node.
      • Control + Shift + End (Optional): Selects the node with focus and all nodes down to the last node. Optionally, moves focus to the last node.
      • Control + A (Optional): Selects all nodes in the tree. Optionally, if all nodes are selected, it can also unselect all nodes.
Note
  1. DOM focus (the active element) is functionally distinct from the selected state. For more details, see this description of differences between focus and selection.
  2. The tree role supports the aria-activedescendant property, which provides an alternative to moving DOM focus among treeitem elements when implementing keyboard navigation. For details, see Managing Focus in Composites Using aria-activedescendant.
  3. In a single-select tree, moving focus may optionally unselect the previously selected node and select the newly focused node. This model of selection is known as "selection follows focus". Having selection follow focus can be very helpful in some circumstances and can severely degrade accessibility in others. For additional guidance, see Deciding When to Make Selection Automatically Follow Focus.
  4. If selecting or unselecting all nodes is an important function, implementing separate controls for these actions, such as buttons for "Select All" and "Unselect All", significantly improves accessibility.
  5. If the nodes in a tree are arranged horizontally:
    1. Down Arrow performs as Right Arrow is described above, and vice versa.
    2. Up Arrow performs as Left Arrow is described above, and vice versa.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • All tree nodes are contained in or owned by an element with role tree.
  • Each element serving as a tree node has role treeitem.
  • Each root node is contained in the element with role tree or referenced by an aria-owns property set on the tree element.
  • Each parent node contains or owns an element with role group.
  • Each child node is contained in or owned by an element with role group that is contained in or owned by the node that serves as the parent of that child.
  • Each element with role treeitem that serves as a parent node has aria-expanded set to false when the node is in a closed state and set to true when the node is in an open state. End nodes do not have the aria-expanded attribute because, if they were to have it, they would be incorrectly described to assistive technologies as parent nodes.
  • If the tree supports selection of more than one node, the element with role tree has aria-multiselectable set to true. Otherwise, aria-multiselectable is either set to false or the default value of false is implied.
  • The selection state of each selectable node is indicated with either aria-selected or aria-checked:
    • If the selection state is indicated with aria-selected, then aria-checked is not specified for any nodes. Alternatively, if the selection state is indicated with aria-checked, then aria-selected is not specified for any nodes. See notes below regarding considerations for which property to use and for details of the unusual conditions that might allow for both properties in the same tree.
    • If any nodes are selected, each selected node has either aria-selected or aria-checked set to true. No more than one node is selected at a time if the element with role tree does not have aria-multiselectable set to true.
    • All nodes that are selectable but not selected have either aria-selected or aria-checked set to false.
    • If the tree contains nodes that are not selectable, neither aria-selected nor aria-checked is present on those nodes.
    • Note that except in trees where selection follows focus, the selected state is distinct from focus. For more details, see this description of differences between focus and selection and Deciding When to Make Selection Automatically Follow Focus.
  • The element with role tree has either a visible label referenced by aria-labelledby or a value specified for aria-label.
  • If the complete set of available nodes is not present in the DOM due to dynamic loading as the user moves focus in or scrolls the tree, each node has aria-level, aria-setsize, and aria-posinset specified.
  • If the tree element is horizontally oriented, it has aria-orientation set to horizontal. The default value of aria-orientation for a tree is vertical.
Note
  1. Some factors to consider when choosing whether to indicate selection with aria-selected or aria-checked are:
    • Some design systems use aria-selected for single-select widgets and aria-checked for multi-select widgets. In the absence of factors that would make an alternative convention more appropriate, this is a recommended convention.
    • The language of instructions and the appearance of the interface might suggest one attribute is more appropriate than the other. For instance, do instructions say to select items? Or, is the visual indicator of selection a check mark?
    • It is important to adopt a consistent convention for selection models across a site or app.
  2. Conditions that would permit a tree to include both aria-selected and aria-checked are extremely rare. It is strongly recommended to avoid designing a tree widget that would have the need for more than one type of state. If both states were to be used within a tree, all the following conditions need to be satisfied:
    • The meaning and purpose of aria-selected is different from the meaning and purpose of aria-checked in the user interface.
    • The user interface makes the meaning and purpose of each state apparent.
    • The user interface provides a separate method for controlling each state.
  3. If aria-owns is set on the tree container to include elements that are not DOM children of the container, those elements will appear in the reading order in the sequence they are referenced and after any items that are DOM children. Scripts that manage focus need to ensure the visual focus order matches this assistive technology reading order.

3.28 Treegrid

A treegrid widget presents a hierarchical data grid consisting of tabular information that is editable or interactive. Any row in the hierarchy may have child rows, and rows with children may be expanded or collapsed to show or hide the children. For example, in a treegrid used to display messages and message responses for a e-mail discussion list, messages with responses would be in rows that can be expanded to reveal the response messages.

In a treegrid both rows and cells are focusable. Every row and cell contains a focusable element or is itself focusable, regardless of whether individual cell content is editable or interactive. There is one exception: if column header cells do not provide functions, such as sort or filter, they do not need to be focusable. One reason it is important for all cells to be able to receive or contain keyboard focus is that screen readers will typically be in their application reading mode, rather than their document reading mode, when users are interacting with the grid. While in application mode, a screen reader user hears only focusable elements and content that labels focusable elements. So, screen reader users may unknowingly overlook elements contained in a treegrid that are either not focusable or not used to label a column or row.

When using a keyboard to navigate a treegrid, a visual keyboard indicator informs the user which row or cell is focused. If the treegrid allows the user to choose just one item for an action, then it is known as a single-select treegrid, and the item with focus also has a selected state. However, in multi-select treegrids, which enable the user to select more than one row or cell for an action, the selected state is independent of the focus. For example, in a hierarchical e-mail discussion grid, the user can move focus to select any number of rows for an action, such as delete or move. It is important that the visual design distinguish between items that are selected and the item that has focus. For more details, see this description of differences between focus and selection.

Examples

  • E-mail Inbox treegrid Example: A treegrid for navigating an e-mail inbox that demonstrates three keyboard navigation models -- rows first, cells first, and cells only.

키보드 인터랙션

The following keys provide treegrid navigation by moving focus among rows and cells of the grid. Implementations of treegrid make these key commands available when an element in the grid has received focus, e.g., after a user has moved focus to the grid with Tab. Moving focus into the grid may result in the first cell or the first row being focused. Whether focus goes to a cell or the row depends on author preferences and whether row focus is supported, since some treegrids may not provide focus to rows.

  • Enter: If cell-only focus is enabled and focus is on the first cell with the aria-expanded property, opens or closes the child rows.,Otherwise, performs the default action for the cell.
  • Tab: If the row containing focus contains focusable elements (e.g., inputs, buttons, links, etc.), moves focus to the next input in the row. If focus is on the last focusable element in the row, moves focus out of the treegrid widget to the next focusable element.
  • Right Arrow:
    • If focus is on a collapsed row, expands the row.
    • If focus is on an expanded row or is on a row that does not have child rows, moves focus to the first cell in the row.
    • If focus is on the right-most cell in a row, focus does not move.
    • If focus is on any other cell, moves focus one cell to the right.
  • Left Arrow:
    • If focus is on an expanded row, collapses the row.
    • If focus is on a collapsed row or on a row that does not have child rows, focus does not move.
    • If focus is on the first cell in a row and row focus is supported, moves focus to the row.
    • If focus is on the first cell in a row and row focus is not supported, focus does not move.
    • If focus is on any other cell, moves focus one cell to the left.
  • Down Arrow:
    • If focus is on a row, moves focus one row down. If focus is on the last row, focus does not move.
    • If focus is on a cell, moves focus one cell down. If focus is on the bottom cell in the column, focus does not move.
  • Up Arrow:
    • If focus is on a row, moves focus one row up. If focus is on the first row, focus does not move.
    • If focus is on a cell, moves focus one cell up. If focus is on the top cell in the column, focus does not move.
  • Page Down:
    • If focus is on a row, moves focus down an author-determined number of rows, typically scrolling so the bottom row in the currently visible set of rows becomes one of the first visible rows. If focus is in the last row, focus does not move.
    • If focus is on a cell, moves focus down an author-determined number of cells, typically scrolling so the bottom row in the currently visible set of rows becomes one of the first visible rows. If focus is in the last row, focus does not move.
  • Page Up:
    • If focus is on a row, moves focus up an author-determined number of rows, typically scrolling so the top row in the currently visible set of rows becomes one of the last visible rows. If focus is in the first row, focus does not move.
    • If focus is on a cell, moves focus up an author-determined number of cells, typically scrolling so the top row in the currently visible set of rows becomes one of the last visible rows. If focus is in the first row, focus does not move.
  • Home:
    • If focus is on a row, moves focus to the first row. If focus is in the first row, focus does not move.
    • If focus is on a cell, moves focus to the first cell in the row. If focus is in the first cell of the row, focus does not move.
  • End:
    • If focus is on a row, moves focus to the last row. If focus is in the last row, focus does not move.
    • If focus is on a cell, moves focus to the last cell in the row. If focus is in the last cell of the row, focus does not move.
  • Control + Home:
    • If focus is on a row, moves focus to the first row. If focus is in the first row, focus does not move.
    • If focus is on a cell, moves focus to the first cell in the column. If focus is in the first row, focus does not move.
  • Control + End:
    • If focus is on a row, moves focus to the last row. If focus is in the last row, focus does not move.
    • If focus is on a cell, moves focus to the last cell in the column. If focus is in the last row, focus does not move.
Note
  • When the above treegrid navigation keys move focus, whether the focus is set on an element inside the cell or on the cell depends on cell content. See Whether to Focus on a Cell or an Element Inside It.
  • While navigation keys, such as arrow keys, are moving focus from cell to cell, they are not available to do something like operate a combobox or move an editing caret inside of a cell. If this functionality is needed, see Editing and Navigating Inside a Cell.
  • If navigation functions can dynamically add more rows or columns to the DOM, key events that move focus to the beginning or end of the grid, such as control + End, may move focus to the last row in the DOM rather than the last available row in the back-end data.

If a treegrid supports selection of cells, rows, or columns, the following keys are commonly used for these functions.

  • Control + Space:
    • If focus is on a row, selects all cells.
    • If focus is on a cell, selects the column that contains the focus.
  • Shift + Space:
    • If focus is on a row, selects the row.
    • If focus is on a cell, selects the row that contains the focus. If the treegrid includes a column with checkboxes for selecting rows, this key can serve as a shortcut for checking the box when focus is not on the checkbox.
  • Control + A: Selects all cells.
  • Shift + Right Arrow:
    • If focus is on a row, does not change selection.
    • if focus is on a cell, extends selection one cell to the right.
  • Shift + Left Arrow:
    • If focus is on a row, does not change selection.
    • if focus is on a cell, extends selection one cell to the left.
  • Shift + Down Arrow:
    • If focus is on a row, extends selection to all the cells in the next row.
    • If focus is on a cell, extends selection one cell down.
  • Shift + Up Arrow:
    • If focus is on a row, extends selection to all the cells in the previous row.
    • If focus is on a cell, extends selection one cell up.
Note

See 6.8 공통 기능에 대한 키 할당 규칙 for cut, copy, and paste key assignments.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The treegrid container has role treegrid.
  • Each row container has role row and is either a DOM descendant of or owned by the treegrid element or an element with role rowgroup.
  • Each cell is either a DOM descendant of or owned by a row element and has one of the following roles:
    • columnheader if the cell contains a title or header information for the column.
    • rowheader if the cell contains title or header information for the row.
    • gridcell if the cell does not contain column or row header information.
  • A row that can be expanded or collapsed to show or hide a set of child rows is a parent row. Each parent row has the aria-expanded state set on either the row element or on a cell contained in therow. The aria-expanded state is set to false when the child rows are not displayed and set to true when the child rows are displayed. Rows that do not control display of child rows do not have the aria-expanded attribute because, if they were to have it, they would be incorrectly described to assistive technologies as parent rows.
  • If the treegrid supports selection of more than one row or cell, it is a multi-select treegrid and the element with role treegrid has aria-multiselectable set to true. Otherwise, it is a single-select treegrid, and aria-multiselectable is either set to false or the default value of false is implied.
  • If the treegrid is a single-select treegrid, aria-selected is set to true on the selected row or cell, and it is not present on any other row or cell in the treegrid.
  • if the treegrid is a multi-select treegrid:
    • All selected rows or cells have aria-selected set to true.
    • All rows and cells that are not selected have aria-selected set to false.
  • If there is an element in the user interface that serves as a label for the treegrid, aria-labelledby is set on the grid element with a value that refers to the labelling element. Otherwise, a label is specified for the grid element using aria-label.
  • If the treegrid has a caption or description, aria-describedby is set on the grid element with a value referring to the element containing the description.
  • If the treegrid provides sort functions, aria-sort is set to an appropriate value on the header cell element for the sorted column or row as described in the section on grid and table properties.
  • If the treegrid provides content editing functionality and contains cells that may have edit capabilities disabled in certain conditions, aria-readonly is set to true on cells where editing is disabled. If edit functions are disabled for all cells, instead of setting aria-readonly to true on every cell, aria-readonly may be set to true on the treegrid element. Treegrids that do not provide cell content editing functions do not include the aria-readonly attribute on any of their elements.
  • If there are conditions where some rows or columns are hidden or not present in the DOM, e.g., data is dynamically loaded when scrolling or the grid provides functions for hiding rows or columns, the following properties are applied as described in the section on grid and table properties.
  • If the treegrid includes cells that span multiple rows or multiple columns, and if the treegrid role is NOT applied to an HTML table element, then aria-rowspan or aria-colspan is applied as described in grid and table properties.
Note
  • A treegrid built from an HTML table that includes cells that span multiple rows or columns must use HTML rowspan and colspan and must not use aria-rowspan or aria-colspan.
  • If rows or cells are included in a treegrid via aria-owns, they will be presented to assistive technologies after the DOM descendants of the treegrid element unless the DOM descendants are also included in the aria-owns attribute.

3.29 Window Splitter

NOTE: ARIA 1.1 introduced changes to the separator role so it behaves as a widget when focusable. While this pattern has been revised to match the ARIA 1.1 specification, the task force will not complete its review until a functional example that matches the ARIA 1.1 specification is complete. Progress on this pattern is tracked by issue 129.

A window splitter is a moveable separator between two sections, or panes, of a window that enables users to change the relative size of the panes. A Window Splitter can be either variable or fixed. A fixed splitter toggles between two positions whereas a variable splitter can be adjusted to any position within an allowed range.

A window splitter has a value that represents the size of one of the panes, which, in this pattern, is called the primary pane. When the splitter has its minimum value, the primary pane has its smallest size and the secondary pane has its largest size. The splitter also has an accessible name that matches the name of the primary pane.

For example, consider a book reading application with a primary pane for the table of contents and a secondary pane that displays content from a section of the book. The two panes are divided by a vertical splitter labelled "Table of Contents". When the table of contents pane has its maximum size, the splitter has a value of 100, and when the table of contents is completely collapsed, the splitter has a value of 0.

Note that the term "primary pane" does not describe the importance or purpose of content inside the pane.

Example

Work to develop an example window splitter widget is tracked by issue 130.

키보드 인터랙션

  • Left Arrow: Moves a vertical splitter to the left.
  • Right Arrow: Moves a vertical splitter to the right.
  • Up Arrow: Moves a horizontal splitter up.
  • Down Arrow: Moves a horizontal splitter down.
  • Enter: If the primary pane is not collapsed, collapses the pane. If the pane is collapsed, restores the splitter to its previous position.
  • Home (Optional): Moves splitter to the position that gives the primary pane its smallest allowed size. This may completely collapse the primary pane.
  • End (Optional): Moves splitter to the position that gives the primary pane its largest allowed size. This may completely collapse the secondary pane.
  • F6 (Optional): Cycle through window panes.
Note

A fixed size splitter omits implementation of the arrow keys.

WAI-ARIA 역할(role), 상태(state), 속성(property)

  • The element that serves as the focusable splitter has role separator.
  • The separator element has the aria-valuenow property set to a decimal value representing the current position of the separator.
  • The separator element has the aria-valuemin property set to a decimal value that represents the position where the primary pane has its minimum size. This is typically 0.
  • The separator element has the aria-valuemax property set to a decimal value that represents the position where the primary pane has its maximum size. This is typically 100.
  • If the primary pane has a visible label, it is referenced by aria-labelledby on the separator element. Otherwise, the separator element has a label provided by aria-label.
  • The separator element has aria-controls referring to the primary pane.

4. 랜드마크 영역

ARIA 랜드마크 역할(role)은 웹 페이지의 구성과 구조를 식별하는 강력한 방법을 제공합니다. 페이지의 섹션을 분류하고 레이블을 지정함으로써, 레이아웃을 통해 시각적으로 전달되는 구조 정보를 프로그래밍 방식으로 나타낼 수 있습니다. 스크린리더는 페이지의 중요한 부분으로의 키보드 탐색을 제공하는데 랜드마크 역할(role)을 활용합니다. 랜드마크 영역은 "스킵 링크"의 대상으로도 사용될 수 있고, 브라우저 확장을 통해 향상된 키보드 탐색으로 사용될 수 있습니다.

이 섹션은 보조 기술 사용자가 페이지의 레이아웃의 의미를 이해하기 쉽게 할 수 있도록 HTML 섹션화 엘리먼트와 ARIA 랜드마크 역할(role)을 사용하는 방법을 설명합니다.

4.1 HTML 섹션화 엘리먼트

몇 몇 HTML 섹션화 엘리먼트는 자동으로 ARIA 랜드마크 영역을 생성합니다. 따라서, 보조 기술 사용자에게 페이지의 논리적 시야를 제공하려면, HTML 섹션화 엘리먼트 사용의 영향을 이해하는 것이 중요합니다. [HTML-ARIA]에는 HTML 엘리먼트 역할 매핑에 대한 자세한 정보가 포함되어 있습니다.

HTML 섹션화 엘리먼트에 대한 기본 랜드마크 역할(role)
HTML 엘리먼트 기본 랜드마크 역할(role)
aside complementary
footer body 엘리먼트의 컨텍스트에 있는 경우 contentinfo
header body 엘리먼트의 컨텍스트에 있는 경우 banner
main main
nav navigation
section aria-labelledbyaria-label을 사용하여 접근 가능한 이름을 가지는 경우 region

4.2 랜드마크 설계 일반 원칙

랜드 마크 영역 중 하나에 페이지의 모든 인식 가능한 콘텐트를 포함시키고 각 랜드 마크 영역에 의미론적으로(semantically) 유의미한(meaningful) 역할을 부여하는 것은 보조 기술 사용자가 그들의 필요와 관련된 정보를 못 보고 지나가지 않도록하는 가장 효과적인 방법 중 하나입니다.

1 단계: 논리적 구조 식별

2 단계: 각 영역에 랜드마크 역할(role) 할당

3 단계: 영역에 레이블 지정

4.3 랜드마크 영역

4.3.1 Banner

banner 랜드마크는 웹 사이트 내 각 페이지의 시작 부분에 있는 사이트 지향적인(site-oriented) 콘텐트를 식별합니다. 사이트 지향적인(site-oriented) 콘텐트는 일반적으로 로고나 사이트 제공자의 신분 같은 것들과, 사이트 지향적인(site-oriented) 검색 도구를 포함합니다. 배너는 보통 페이지의 맨 위에 나타나고 일반적으로 전체 너비에 걸쳐 있습니다.

  • 각 페이지는 하나의 banner 랜드마크를 가질 수 있습니다.
  • banner 랜드마크는 최상위 랜드마크이어야 합니다.
  • 페이지가 중첩된 document와/또는 application 역할(role)을 포함하는 경우 (예를 들어, 일반적으로 iframeframe 엘리먼트의 사용을 통해), 각 documentapplication 역할(role)은 하나의 banner 랜드마크를 가질 수 있습니다.
  • 페이지가 둘 이상의 banner 랜드 마크를 포함한다면, 각각은 고유한 레이블을 가져야 합니다 (위의 3 단계 참고).
HTML 기법
  • HTML header 엘리먼트는 그것의 컨텍스트가 body 엘리먼트인 경우 banner 랜드마크를 정의합니다.
  • HTML header 엘리먼트는 다음 엘리먼트들 중 하나의 후손일 경우 banner 랜드마크로 간주되지 않습니다 (HTML 접근성 매핑 [HTML-AAM] 참고):
    • article
    • aside
    • main
    • nav
    • section
ARIA 기법

HTML header 엘리먼트 기술이 사용되지 않는 경우, role="banner" 어트리뷰트가 banner 랜드마크를 정의하는데 사용되어야 합니다.

Banner Landmark 예제

4.3.2 Complementary

complementary 랜드마크는 문서의 지원(supporting) 섹션으로, DOM 계층상 유사한 수준에서 주 콘텐트를 보완하도록 설계되었으며 주 콘텐트로부터 분리되는 경우에도 여전히 유의미합니다.

  • complementary 랜드마크는 최상위 랜드마크여야 합니다. (예를 들어, 다른 랜드마크에 포함되지 않은).
  • complementary 콘텐트가 주 콘텐트와 관련이 없다면, 좀 더 일반적인 역할(role)이 할당되어야 합니다(예를 들어 region).
  • 페이지가 둘 이상의 complementary 랜드마크를 포함한다면, 각각은 고유한 레이블을 가져야 합니다 (위 3 단계 참고).
HTML 기법

complementary 랜드마크를 정의하도록 HTML aside 엘리먼트를 사용하세요.

ARIA 기법

HTML aside 엘리먼트 기법이 사용되지 않는다면, complementary 랜드마크를 정의하도록 role="complementary" 어트리뷰트를 사용하세요.

예제

Complementary 랜드마크 예

4.3.3 Contentinfo

contentinfo 랜드마크는 저작권 및 개인 정보 보호와 접근성 성명서에 대한 링크 같은 정보를 포함하는 일반적으로 페이지의 "footer"라고 불리는 웹 사이트 내에서 각 페이지의 하단에 있는 일반적인 정보를 식별하는 방법입니다.

  • 각 페이지는 하나의 contentinfo 랜드마크를 가질 수 있습니다.
  • contentinfo 랜드마크는 최상위 랜드마크여야 합니다.
  • 페이지가 중첩된 document와/또는 application 역할(role)을 포함하는 경우 (예를 들어, 일반적으로 iframeframe 엘리먼트의 사용을 통해), 각 documentapplication 역할(role)은 하나의 contentinfo 랜드마크를 가질 수 있습니다.
  • 페이지가 둘 이상의 contentinfo 랜드마크를 포함한다면, 각각은 고유한 레이블을 가져야 합니다 (위 3 단계 참고).
HTML 기법
  • HTML footer 엘리먼트는 그것의 컨텍스트가 body 엘리먼트인 경우 contentinfo 랜드마크를 정의합니다.
  • HTML footer 엘리먼트는 다음 엘리먼트들 중 하나의 후손일 경우 contentinfo 랜드마크로 간주되지 않습니다 (HTML 접근성 매핑 [HTML-AAM] 참고):
    • article
    • aside
    • main
    • nav
    • section
ARIA 기법

HTML footer 엘리먼트 기법이 사용되지 않는다면, contentinfo 랜드마크를 정의하도록 role="contentinfo" 어트리뷰트가 사용되어야 합니다.

예제

Contentinfo 랜드마크 예

4.3.4 Form

form 랜드마크는 다른 기명 랜드마크(예를 들어, main 또는 search)가 적절하지 않은 경우 양식을 만들도록 전체적으로 결합되는 항목과 객체들의 모음을 포함하는 영역을 식별합니다.

  • 양식이 검색 기능으로 사용되는 경우 form 랜드마크 대신 search 랜드마크를 사용하세요.
  • form 랜드마크는 사용자들이 양식의 목적을 이해할 수 있도록 레이블을 가져야 합니다.
  • form 랜드마크에 대한 레이블은 모든 사용자들에게 잘 보여야 합니다(예를 들어, h1-h6 엘리먼트).
  • 페이지가 둘 이상의 form 랜드마크를 포함하는 경우, 각각은 고유한 레이블을 가져야 합니다 (위 3 단계 참고).
  • 가능한 항상 HTML 문서의 form 랜드마크에 포함된 컨트롤들은 네이티브 호스트 의미론을 사용해야 합니다:
    • button
    • input
    • select
    • textarea
HTML 기법

HTML form 엘리먼트는 접근 가능한 이름 (예를 들어, aria-labelledby, aria-labeltitle)을 가질 때 form 랜드마크를 정의합니다.

ARIA 기법

페이지의 영역을 식별하도록 role="form" 을 사용하세요; 모든 양식 필드를 식별하는데 사용하지 마세요.

예제

Form 랜드마크 예

4.3.5 Main

main 랜드마크는 페이지의 주요(primary) 콘텐트를 식별합니다.

  • 각 페이지는 하나의 main 랜드마크를 가져야 합니다.
  • main 랜드마크는 최상위 랜드마크여야 합니다.
  • 페이지에 중첩된 document와/또는 application 역할(roles)을 포함하는 경우 (예를 들어, 일반적으로 iframeframe 엘리먼트의 사용을 통해), 각 documentapplication 역할(role)은 하나의 main 랜드마크를 가질 수 있습니다.
  • 페이지가 둘 이상의 main 랜드마크를 포함하는 경우, 각각은 고유한 레이블을 가져야 합니다 (위 3 단계 참고).
HTML 기법

main 랜드마크를 정의하도록 HTML main 엘리먼트를 사용하세요.

ARIA 기법

HTML main 엘리먼트 기법이 사용되지 않는다면, main 랜드마크를 정의하도록 role="main" 어트리뷰트를 사용하세요.

예제

Main 랜드마크 예

4.3.6 Navigation

Navigation 랜드마크는 웹 사이트나 페이지 콘텐트를 탐색하는데 사용되도록 의도된 링크의 그룹(예를 들어 목록)을 식별하는 방법을 제공합니다.

  • 페이지가 둘 이상의 navigation 랜드마크를 포함하는 경우, 각각은 고유한 레이블을 가져야 합니다.(위 3 단계 참고).
  • navigation 랜드마크가 페이지의 다른 navigation 랜드마크와 동일한 링크 세트를 가지는 경우, 각 navigation 랜드마크에 대해 동일한 레이블을 사용하세요.
HTML 기법

navigation 랜드마크를 정의하도록 HTML nav 엘리먼트를 사용하세요.

ARIA 기법

HTML nav 엘리먼트 기법이 사용되지 않는다면, navigation 랜드마크를 정의하도록 role="navigation" 어트리뷰트를 사용하세요.

예제

Navigation 랜드마크 예

4.3.7 Region

region 랜드마크는 사용자가 섹션으로 이동 할 수 있어야 할 정도로 충분히 중요한 콘텐트를 포함하는 페이지의 인식 가능한 섹션입니다.

  • region 랜드마크는 레이블을 가져야(must) 합니다.
  • 페이지가 둘 이상의 region 랜드마크를 포함한다면, 각각은 고유한 레이블을 가져야 합니다 (위 3 단계 참고).
  • region 랜드마크는 기명 랜드마크로는 적절하게 설명할 수 없는 콘텐트를 식별하는데 사용될 수 있습니다.
HTML 기법

HTML section 엘리먼트가 접근 가능한 이름을(예를 들어 aria-labelledbyaria-labeltitle) 가지는 경우 region 랜드마크를 정의합니다.

ARIA 기법

HTML section 엘리먼트 기법이 사용되지 않는 다면, region 랜드마크를 정의하도록 role="region" 어트리뷰트를 사용하세요.

예제

Region 랜드마크 예

5. 접근 가능한 이름과 설명 제공

접근 가능한 이름과 적절한 경우 접근 가능한 설명을 가진 엘리먼트를 제공하는 것은 접근 가능한 웹 경험을 개발할 때 작성자가 가져야 할 가장 중요한 책임 중 하나입니다. 대부분의 엘리먼트에서는 그렇게 하는 것이 간단한 반면, 보조 기술 사용자들을 완전히 차단할 수 있는 기술적 실수 역시 쉽게 만들 수 있고 불행하게도 흔하게 일어납니다. 작성자가 접근 가능한 이름과 설명을 효과적으로 제공할 수 있도록 돕기 위해, 이 섹션에서는 그 목적과, 작성자가 그것들을 제공해야 하는 경우, 브라우저가 그것들을 모으는 방법, 그것들을 코드화하고 구성하기 위한 규칙을 설명합니다. 또한 작성자에게 다음의 이름 지정와 설명 지정 기법 및 WAI-ARIA 속성 사용에 대해서도 안내합니다:

5.1 접근 가능한 이름과 설명이란?

접근 가능한 이름은 일반적으로 1 ~ 3개 단어의 짧은 문자열로, 작성자가 보조 기술 사용자에게 엘리먼트에 대한 레이블을 제공하기 위해 엘리먼트와 연관시킨 문자열입니다. 예를 들어, 입력 필드는 접근 가능한 "User ID"이라는 이름을 가지거나, 버튼은 "Submit"으로 이름 지을 수 있습니다.

접근 가능한 이름은 스크린리더와 같은 보조 기술 사용자에게 두 가지 주요 목적을 제공합니다:

  1. 엘리먼트의 목적이나 의도를 전달.
  2. 페이지의 다른 엘리먼트로부터 엘리먼트를 구별.

WAI-ARIA 명세와 WCAG 둘 모두 모든 포커서블(focusable), 인터랙티브 엘리먼트들은 접근 가능한 이름을 가지도록 요구합니다. 게다가 대화 상자와 tablesregions 같은 일부 구조 컨테이너들도 이름을 가지도록 요구됩니다. 많은 다른 엘리먼트들도 이름을 지정할 수 있지만, 이름이 접근성을 향상시키는가의 여부는 주변 컨텍스트의 다양한 특성에 따라서 결정됩니다. 마지막으로, 접근 가능한 이름을 제공하는 것이 기술적으로는 가능하지만 권장할만 하지는 않은 일부 엘리먼트들이 있습니다. 역할에 따른 접근 가능한 이름 지침 섹션은 모든 ARIA 역할에 대한 이름 지정 요구 사항과 지침들을 나열합니다.

접근 가능한 설명 역시 보조 기술에 의해 렌더링 되는 작성자가 제공한 문자열입니다. 작성자는 입력 필드에 대한 지시 사항이나 형식 요구 사항과 같은, 엘리먼트와 연관 시킬 필요가 있는 추가적인 정보가 있을 경우 설명을 제공합니다.

보조 기술은 이름과 설명을 다르게 표현합니다. 예를 들어, 스크린리더는 일반적으로 엘리먼트의 이름과 역할을 먼저 낭독합니다. 예를 들어, 대화 음소거라고 명명된 버튼은 대화 음소거 버튼이라고 낭독되어 질 수 있습니다. 엘리먼트가 상태(state)를 가지는 경우, 이름과 역할 앞이나 뒤로 낭독될 수 있습니다; 일반적으로 기본은 이름과 역할 이후입니다. 예를 들어, 꺼짐 상태인 대화 음소거라고 명명된 스위치 버튼은 대화 음소거 스위치 버튼 꺼짐으로 낭독 될 수 있습니다. 설명은 일반적으로 이름보다 상당히 긴 선택적인 문자열이기 때문에, 마지막에 표현되고, 때로는 약간 지연 된 후에 표현됩니다. 예를 들어, 대화 음소거 스위치 버튼 꺼짐, 이 대화의 활동에 대한 알림(alert)과 알림 소리를 없앱니다. 자세한 내용을 줄이기 위해, 일부 스크린리더는 기본적으로 설명을 낭독하지 않고, 대신 사용자에게 그 존재를 알려 사용자가 설명을 낭독시키도록 키를 누르게 할 수 있습니다.

5.2 이름과 설명 문자열은 어떻게 파생되나요?

접근 가능한 이름이나 설명 문자열에 포함 시킬 텍스트를 지정할 엘리먼트와 어트리뷰트들이 여럿 있기 때문에, 그리고 작성자가 거의 끝 없는 방식으로 그 텍스트들을 결합 할 수 있기 때문에, 브라우저는 문자열을 조립하기 위해 상당히 복잡한 알고리즘을 구현합니다. 접근 가능한 이름 계산접근 가능한 설명 계산의 섹션들이 알고리즘과 브라우저들이 우선 순위를 구현하는 방법을 설명합니다. 하지만, 이름이나 설명이 유용한 경우의 거의 모든 상황은 이름 지정 기법설명 지정 기법 섹션에 기술된 코딩 패턴에 따라 지원되기 때문에 대부분의 작성자는 알고리즘에 대한 상세한 이해 같은 것은 필요하지 않습니다.

5.3 이름 지정의 기본 규칙

5.3.1 규칙 1: 경고에 주의하고 철처하게 테스트

아래 몇 가지 이름 지정 기법은 ARIA 명세에 의해 금지되거나 아직 완전히 정의되지 않은 회색 지대에 속하는 특정 코딩 패턴에 대해 경고하는 메모를 포함하고 있습니다. 이러한 금지된 것이나 모호한 패턴 중 일부는 논리적으로 나타나고 일부 브라우저에서 희망했던 이름을 내 줄 수도 있습니다. 하지만, 특히 브라우저 간의 이름 계산의 일관성을 개선하기 위한 작업이 진행됨에 따라 브라우저 전체를 통틀어 일관된 결과를 제공할 가능성이 낮습니다.

이름 지정 기법에 제공되는 경고에 주의를 기울이는 것 외에도, 브라우저가 계산한 이름과 예상 한 것이 일치하도록 보장하기 위해 테스트의 중요성을 지나치게 강조하기란 쉽지 않습니다.

5.3.2 규칙 2: 보이는 텍스트 선택

유저 인터페이스가 적절한 접근 가능한 이름을 제공하는데 사용될 수 있는 보이는 텍스트를 포함하는 경우, 접근 가능한 이름에 대한 보이는 텍스트를 사용하는 것이 유지보수를 간소화하고, 오류를 방지하며 언어 번역 요구 사항을 줄입니다. 이름이 시각적으로 표시되지 않고 마크업 안에만 존재하는 텍스트로부터 생성되는 경우, 유저 인터페이스 설계나 콘텐츠가 변경될 경우 접근 가능한 이름은 업데이트 되지 않을 소지가 높습니다.

입력 상자나 버튼과 같은 대화형 엘리먼트(interactive element)가 시각적으로 사라지지 않는 텍스트 레이블이 없는 경우, 이를 포함하도록 디자인을 조정하세요. 접근 가능한 이름에 대해 더 견고한 소스를 제공하는 것 외에, 보이는 텍스트 레이블은 보이지 않는 이름을 나타내는 보조 기술을 사용하지 않는 많은 장애인들에 대한 접근성을 향상시킵니다. 대부분의 상황에서, 보이는 텍스트 레이블은 또한 유저 인터페이스를 모든 사용자들이 이해하기 더 쉽게 만듭니다.

5.3.3 규칙 3: 기본 기술 선택

HTML 문서에서, 가능할때마다, 폼 엘리먼트에 대한 HTML label 엘리먼트와 표에 대한 caption 엘리먼트와 같은 HTML 이름 지정 기법을 사용하세요. 유연성은 떨어지지만, 보이는 텍스트에 대한 단순성과 의존성은 견고한 접근 가능한 환경을 보장하는데 도움이 됩니다. 몇 몇 이름 지정 기법은 ARIA 속성 대신 HTML 기능을 사용하는 것의 특정 접근성 장점을 강조합니다.

5.3.4 규칙 4: 브라우저 폴백 방지

작성자가 이름 지정을 위해 의도된 엘리먼트나 어트리뷰트를 사용하여 접근 가능한 이름을 지정하지 않는 경우, 브라우저는 이름을 생성하기 위한 폴백 메서드에 기대어 보조 기술 사용자를 도우려 시도합니다. 예를 들어, HTML titleplaceholder 어트리뷰트는 접근 가능한 이름에 대한 콘텐츠의 최후의 수단으로 사용됩니다. 이 어트리뷰트의 목적은 이름 지정이 아니기 때문에, 일반적으로 그 내용은 유효하지 않은 저품질의 접근 가능한 이름을 산출합니다.

5.3.5 규칙 5: 간단하고 유용한 이름 작성

시각적으로 화면을 가득 메우고 모호한 아이콘이 사용성을 떨어뜨리는 방법과 유사하게, 지나치게 길거나 충분히 분명하지 않거나 불확실한 접근 가능한 이름은 유저 인터페이스를 매우 어렵게 만들거나 심지어 유저 인터페이스의 비시각적 형태에 의존하는 사람들의 사용을 불가능하게 만들 수 있습니다. 다시 말해, 접근 가능한 웹 경험을 위해 접근 가능한 이름이 유효해야 합니다. 유효하고 사용자 친화적인 접근 가능한 이름 작성 섹션은 간결성과 명확성의 균형을 위한 지침을 제공합니다.

5.4 이름 지정 기법

5.4.1 자식 콘텐츠로 이름 지정

특정 엘리먼트는 포함하는 콘텐트로부터 이름을 가져옵니다. 예를 들어, 다음 링크는 "Home"으로 이름 지어집니다.

<a href="/">Home</a>

보조 기술이 링크나 버튼과 같이 콘텐트로부터 접근 가능한 이름을 가져오는 엘리먼트를 제공 할 경우, 접근 가능한 이름은 사용자가 그 엘리먼트에 대해 인식 할 수 있는 유일한 콘텐트입니다. 이는 접근 가능한 이름이 엘리먼트의 콘텐트나 값에 추가하여 표시되는 레이블인 텍스트 필드나 표와 같은 다른 엘리먼트들과 대조적입니다. 예를 들어, 표의 접근 가능한 이름은 caption 엘리먼트로부터 파생될 수 있고, 보조 기술은 caption과 테이블 내에 포함된 모든 다른 콘텐트를 모두 제공 합니다.

기본적으로 다음 역할(role) 중 하나를 가지는 엘리먼트는 후손 콘텐츠로부터 계산된 문자열로 이름이 지정됩니다:

  • button
  • cell
  • checkbox
  • columnheader
  • gridcell
  • heading
  • link
  • menuitem (자식 menu 엘리먼트에 포함된 콘텐트는 제외 됨.)
  • menuitemcheckbox
  • menuitemradio
  • option
  • radio
  • row
  • rowheader
  • switch
  • tab
  • tooltip
  • treeitem (자식 group 엘리먼트에 포함된 콘텐트는 제외 됨.)

엘리먼트에 대한 콘텐트로부터 이름을 계산할 경우, 유저 에이전트는 각 후손 엘리먼트를 재귀적으로 확인하고 각 후손에 대한 이름 문자열을 계산하고, 결과 문자열을 연결합니다. 두 가지 특정한 경우, 특정 후손들은 무시됩니다: treeitem 엘리먼트의 후손인 groupmenuitem 엘리먼트의 후손인 menu는 계산에서 생략됩니다. 예를 들어, 다음 tree에서 첫 번째 트리 항목의 이름은 과일입니다; 사과, 바나나, and 오렌지는 생략됩니다.

<ul role="tree">
  <li role="treeitem">과일
    <ul role="group">
      <li role="treeitem">사과</li>
      <li role="treeitem">바나나</li>
      <li role="treeitem">오렌지</li>
    </ul>
  </li>
</ul>
Warning

자식 콘텐츠로부터 이름 지정을 지원하는 위 역할(role) 중 하나를 가지는 엘리먼트가 aria-label이나 aria-labelledby로 이름이 지정되는 경우, 엘리먼트에 포함된 콘텐트와 후손은 후손 콘텐츠가 aria-labelledby에 의해 참조되지 않는 한 보조 기술 사용자에게 숨겨집니다. 보조 기술 사용자로부터 콘텐트를 숨기는 것이 이로운 드문 경우를 제외하고 위 엘리먼트들 중 하나의 콘텐트를 재정의하기 위해 이 속성들 중 하나를 사용하지 않는 것이 강력히 권장됩니다. 또한, 볼 수 있는 콘텐트가 이 속성 중 하나의 사용으로 인해 보조 기술 사용자에게 숨겨지는 경우에서는 보조 기술을 사용한 철저한 테스트가 특히 중요합니다.

5.4.2 aria-label을 통해 문자열 속성으로 이름 지정

aria-label 속성은 작성자가 시각적으로 전달하지 않는 문자열로 엘리먼트에 이름을 지정할 수 있게 합니다. 예를 들어, 다음 버튼의 이름은 "Close"입니다.

<button type="button" aria-label="Close">X</button>

aria-label 속성은 적절한 접근 가능한 이름으로 제공할 보이는 텍스트 콘텐트가 없는 경우에 유용합니다.

aria-label 속성은 적용되는 엘리먼트의 역할(role)에 의존하여 두 가지 다른 방법 중 하나로 보조 기술 사용자에게 영향을 줍니다. 자식 콘텐트로부터 이름 지정을 지원하는 역할(role) 중 하나를 엘리먼트에 적용하는 경우, aria-label은 보조 기술 사용자에게 후손 콘텐트를 숨기고 aria-label의 값으로 교체합니다. 하지만, 거의 모든 다른 유형의 엘리먼트들에 적용되는 경우, 보조 기술은 aria-label의 값과 엘리먼트의 콘텐트를 모두 전달할 것입니다. 예를 들어, 다음 내비게이션 영역의 이름은 "Product" 입니다.

<nav aria-label="Product">
  <!-- 프로덕트 페이지로의 내비게이션 링크 목록 -->
</nav>

이 내비게이션 영역을 만나면, 스크린리더 사용자는 엘리먼트의 이름과 역할을 듣게 될 것이고, 예를 들어, "프로덕트 내비게이션 영역", 영역에 포함된 링크를 통해 읽을 수 있습니다.

Warning
  1. aria-label자식 콘텐트로부터 이름 지정을 지원하는 역할(role) 중 하나로 엘리먼트에 적용된다면, 엘리먼트에 포함되고 엘리먼트의 후손인 콘텐트는 보조 기술 사용자에게 숨깁니다. 보조 기술 사용자로부터 콘텐트를 숨기는 것이 이로운 드문 경우를 제외하고 위 엘리먼트들 중 하나의 콘텐트를 재정의하기 위해 aria-label을 사용하지 않는 것이 강력히 권장됩니다.
  2. aria-label로 이름을 지정하지 않아야 하는, 문단과 목록 항목 같은 특정한 유형의 엘리먼트가 있습니다. 그것들은 역할(role)에 의한 접근 가능한 이름 지정 지침 섹션의 표에 나와 있습니다.
  3. aria-label의 값은 시각적으로 전달되지 않기 때문에, 예상되는 이름이 사용자에게 제공하는 것을 확인하기 위해 보조 기술을 사용하여 테스트하는 것이 특히 중요합니다.
  4. 유저 인터페이스가 여러 언어로 번역되는 경우, aria-label 값이 번역 되는지 확인하세요.

5.4.3 aria-labelledby를 통해 참조된 콘텐트로 이름 지정

aria-labelledby 속성은 작성자가 접근 가능한 이름을 정의하기 위해 페이지의 다른 엘리먼트들을 참조할 수 있게 합니다. 예를 들어, 다음 스위치는 이전 형제 엘리먼트의 텍스트 콘텐트로 이름이 지정됩니다.

<span id="night-mode-label">야간 모드</span>
<span role="switch" aria-checked="false" tabindex="0" aria-labelledby="night-mode-label"></span>

이 상황에서 aria-labelledby를 사용하는 것이 for 어트리뷰트를 가진 HTML label을 사용하는 것과 유사한 반면, 한 가지 중요한 차이점은 브라우저가 레이블을 지정하는 엘리먼트를 클릭하는 것이 레이블이 지정된 엘리먼트를 자동으로 활성화 하지 않는 다는 것에 주목하세요. 그것은 작성자의 책임입니다. 하지만, HTML labelspan 엘리먼트에 레이블을 지정하는데 사용될 수 없습니다. 다행히 HTML type="checkbox"을 가진 input은 ARIA switch 역할(role)을 허용하므로 가능한 경우 다음 접근법을 사용하는 것이 더 견고한 해결책을 만듭니다.

<label for="night-mode">야간 모드</label>
<input type="checkbox" role="switch" id="night-mode">
텍스트가 복잡하여 부연 설명을 덧붙이면, HTML의 기본 기능으로 label을 클릭하면 이 labelfor 어트리뷰트로 연결된 엘리먼트를 활성화 하도록 동작하는데, 위 예제에서와 같이 ARIA의 작성하는 것은 label의 동작과 같은 HTML 네이티브 동작을 제공하지 않음을 의미합니다. 따라서, HTML 네이티브와 동등하게 동작하게 하는 것은 작성자의 몫으로 남겨집니다.

aria-labelledby 속성(property)은 다음의 이유로 여러 상황에서 유용합니다:

  • 브라우저가 접근 가능한 이름을 계산할 때 가장 높은 우선 순위를 가집니다. 즉, 자식 콘텐트로부터의 이름과 aria-label을 포함하여 모든 다른 이름 속성들 보다 우선됩니다.

  • 여러 엘리먼트의 콘텐츠를 단일 이름 문자열로 연결할 수 있습니다.

  • 가시성과 관계 없이 엘리먼트의 콘텐트를 포함합니다. 즉, 계산된 이름 문자열에 hidden 어트리뷰트, CSS display: none이나 CSS visibility: hidden을 가진 엘리먼트의 콘텐트도 포함합니다.

  • input 엘리먼트의 값을 통합합니다. 즉, 텍스트 상자를 참조하는 경우, 텍스트 상자의 값이 계산 된 이름 문자열에 포함됩니다.

aria-labelledby를 가진 숨겨진 엘리먼트를 참조하는 예는 야간 스위치 제어에 대한 레이블 일 수 있습니다:

<span id="night-mode-label" hidden>야간 모드</span>
<input type="checkbox" role="switch" aria-labelledby="night-mode-label">

경우에 따라, 엘리먼트에 대한 가장 효과적인 이름은 다른 엘리먼트의 콘텐트와 자체 콘텐츠가 결합된 것입니다. aria-labelledby는 이름 계산에서 가장 높은 우선 순위를 가지기 때문에, 그 경우 자체 엘리먼트와 다른 엘리먼트를 모두 참조하도록 aria-labelledby를 사용할 수 있습니다. 다음 예에서, "더 보기..." 링크는 엘리먼트 자신과 게시글의 제목에 의해 이름이 지정되어 결과적으로 "더 보기... 벌을 구할 수 있는 7가지 방법"의 링크 이름이 됩니다.

<h2 id="bees-heading">벌을 구할 수 있는 7가지 방법</h2>
<p>벌이 빠르게 사라지고 있습니다. 여기 당신이 도울 수 있는 7가지가 있습니다.</p>
<p><a id="bees-read-more" aria-labelledby="bees-read-more bees-heading">더 보기...</a></p>

여러 엘리먼트들이 aria-labelledby로 참조되는 경우, 각 참조 된 엘리먼트들의 텍스트 콘텐트는 aria-labelledby 값에 정의된 순서로 연결됩니다. 엘리먼트가 두 번 이상 참조되는 경우, 첫 번째 참조만 처리됩니다. 여러 엘리먼트들의 콘텐트를 연결하는 경우, 브라우저는 선행, 후행 공백을 제거하고 각 엘리먼트의 콘텐트를 단일 공백으로 분리합니다.

<button id="download-button" aria-labelledby="download-button download-details">Download</button>
<span id="download-details">PDF, 2.4 MB</span>

위 예에서, 버튼의 접근 가능한 이름은 "DownloadPDF, 2.4 MB"가 아니라 "Download"와 "PDF" 사이에 공백이 있는 "Download PDF, 2.4 MB"가 될 것입니다.

Warning
  1. aria-labelledby 속성(property)은 체이닝 될 수 없습니다. 즉, aria-labelledby를 가진 엘리먼트가 aria-labelledby를 가진 다른 엘리먼트를 참조하는 경우, 참조된 엘리먼트의 aria-labelledby 어트리뷰트는 무시될 것입니다.
  2. 이름 계산 중에 엘리먼트가 두 번 이상 aria-labelledby에 의해 참조되는 경우, 두 번째 및 이후의 참조는 무시될 것입니다.
  3. aria-labelledby로 이름을 지정하지 않아야 하는 문단이나 목록 항목과 같은 특정 유형의 엘리먼트가 있습니다. 그것들은 역할에 따른 접근 가능한 이름 지정 지침 섹션의 표에 나와있습니다.
  4. aria-labelledby자식 콘텐츠로부터 이름 지정을 지원하는 역할(role)의 하나를 가진 엘리먼트에 적용되는 경우, 엘리먼트와 그 엘리먼트의 후손에 포함된 콘텐트는 aria-labelledby에 의해 참조되지 않는 한, 보조 기술 사용자에게 숨겨집니다. 보조 기술 사용자에게 콘텐트를 숨기는 것이 이로운 드문 경우를 제외하고 이 어트리뷰트를 사용하여 이 엘리먼트들 중 하나의 콘텐트를 무시하게 하는 것을 방지하는 것이 강력하게 권장됩니다.
  5. aria-labelledby를 가진 엘리먼트의 이름을 계산하는 것은 복잡하고 숨겨진 콘텐트를 참조할 수 있기 때문에, 기대하는 이름이 사용자에게 노출되는지를 보장하도록 보조 기술을 가지고 테스트 하는 것이 특히 중요합니다.

5.4.4 label 엘리먼트로 폼 컨트롤 이름 지정

HTML label 엘리먼트는 작성자가 레이블로 제공하는 콘텐트를 식별하고 폼 컨트롤과 연결할 수 있게 합니다. label 엘리먼트가 폼 컨트롤과 연결 될 경우, 브라우저는 label 콘텐트로부터 폼 컨트롤에 대한 접근 가능한 이름을 계산합니다.

예를 들어, 체크상자와 나란히 표시되는 텍스트는 체크상자와 시각적으로 연결 될 수 있으므로, 시각적 연관성을 인식할 수 있는 사용자에 의해 체크상자 레이블로 이해됩니다. 하지만, 텍스트가 프로그래밍 방식으로 체크상자와 연결되어 있지 않으면, 보조 기술 사용자는 레이블이 없는 체크상자를 경험하게 될 것입니다. 다음과 같이 체크상자와 label 엘리먼트에 체크상자와 레이블 텍스트를 감싸는 것은 체크상자에 접근 가능한 이름을 제공합니다.

<label>
  <input type="checkbox" name="subscribe">
  뉴스레터 구독
</label>

폼 컨트롤은 label 엘리먼트의 for 어트리뷰트를 사용하여 레이블과 연결될 수도 있습니다. 이는 레이블과 폼 컨트롤이 형제가 되게하거나 DOM에서 부모가 다르지만 폼 컨트롤에 id 어트리뷰트를 추가하는 것을 요구하므로 오류가 발생하게 할 수 있습니다. 가능하다면, 연결을 위해 다음의 for 어트리뷰트 기법 대신 위의 캡슐화 기법을 사용하세요.

<input type="checkbox" name="subscribe" id="subscribe_checkbox">
<label for="subscribe_checkbox">뉴스레터 구독</label>

label 엘리먼트를 사용하는 것은 규칙 2: 보이는 텍스트 선택을 만족시키는 효과적인 기법입니다. 또한 규칙 3: 기본 기술 선택을 만족시킵니다. 네이티브 HTML 레이블은 ARIA 레이블링 기법보다 중요한 사용성과 접근성의 이점을 제공합니다: 브라우저는 자동으로 레이블을 클릭하는 것이 폼 컨트롤을 클릭한 것과 동일하게 합니다. 이는 폼 컨트롤의 누르는 영역을 증가시킵니다.

5.4.5 legend 엘리먼트로 필드셋 이름 지정

HTML fieldset 엘리먼트는 폼 컨트롤을 그룹핑하는데 사용될 수 있고, legend 엘리먼트는 그룹에 이름을 제공하는데 사용될 수 있습니다. 예를 들어, 라디오 버튼 그룹은 legend 엘리먼트가 라디오 버튼들에 대한 그룹에 레이블을 지정하는 fieldset 안에 함께 그룹핑 될 수 있습니다.

<fieldset>
  <legend>시작 클래스 선택</legend>
  <label><input type="radio" name="starter-class" value="green"> Green</label>
  <label><input type="radio" name="starter-class" value="red"> Red</label>
  <label><input type="radio" name="starter-class" value="blue"> Blue</label>
</fieldset>

이 그룹핑 기법은 다중 선택 문제를 표현하는데 특히 유용합니다. 작성자들이 질문과 답변 그룹을 연결 시킬 수 있게 합니다. 질문이 프로그램적으로 답변 그룹과 연결되지 않는 경우, 보조 기술 사용자는 질문을 알지 못한 채 답변에 접근할 것입니다.

fieldsetlegend를 사용하여 다른 유형의 폼 필드를 그룹핑 하고 이름을 지정하는 경우에도 유사한 이점을 얻을 수 있습니다.

<fieldset>
  <legend>배송 주소</legend>
  <p><label>이름 <input name="name" required></label></p>
  <p><label>주소 1 <input name="address-1" required></label></p>
  <p><label>주소 2 <input name="address-2"></label></p>
  ...
</fieldset>
<fieldset>
  <legend>청구서 받을 주소</legend>
  ...
</fieldset>

fieldset 엘리먼트에 이름을 지정하기 위해 legend 엘리먼트를 사용하는 것이 규칙 2: 보이는 텍스트 선택규칙 3: 기본 기술 선택을 만족시킵니다.

5.4.6 캡션으로 표 및 삽화 이름 지정

HTML tablefigure에 대한 접근 가능한 이름은 각각 자식 caption이나 figcaption으로부터 파생될 수 있습니다. 표와 삽화는 종종 그것이 무엇에 관한 것인지, 어떻게 읽는지를 설명하기 위한 캡션을 가지며 때때로 이들에 주변 글에서 이들을 참조하는데 사용되는 숫자를 부여합니다. 캡션은 모든 사용자가 콘텐츠를 더 잘 이해하는데 도움이 되지만, 특히 보조 기술 사용자에게 도움이 됩니다.

HTML에서, table 엘리먼트는 데이터 테이블을 마크업하고 caption 엘리먼트를 사용하여 캡션이 함께 제공될 수 있습니다. table 엘리먼트가 aria-labelaria-labelledby를 가지지 않은 경우, caption이 접근 가능한 이름으로 사용 될 것입니다. 예를 들어 다음 표의 접근 가능한 이름은 특별 영업 시간입니다.

<table>
 <caption>특별 영업 시간</caption>
 <tr><td>5월 30일 <td>휴무</td></tr>
 <tr><td>6월 6일 <td>11:00-16:00</td></tr>
</table>

다음 예는 참조 할 수 있도록 표 번호를 (표 1)을 제공합니다.

<table>
 <caption>표 1. 1950년 오키나와인과 다른 일본인의 전통적인 식이 섭취</caption>
 <thead>
  <tr>
   <th>
   <th>오키나와, 1949</th>
   <th>일본, 1950</th>
  </tr>
 <tbody>
  <tr>
   <th>총 칼로리</th>
   <td>1785</td>
   <td>2068</td>

  [...]

</table>

참고: 위 표는 Caloric restriction, the traditional Okinawan diet, and healthy aging: the diet of the world's longest-lived people and its potential impact on morbidity and life span에서 가져옴.

tablearia-labelaria-labelledby를 사용하여 이름이 지정되고, caption 엘리먼트가 있다면 이는 접근 가능한 설명이 될 것입니다. 예를 들어, 캡션으로 표와 삽화를 설명하기를 참고하세요.

유사하게, HTML figure 엘리먼트는 figcaption 엘리먼트를 사용하여 캡션이 제공 될 수 있습니다. 캡션은 삽화의 앞 혹은 뒤에 나타날 수 있지만, 삽화 뒤에 캡션이 있는 것이 더 일반적입니다.

<figure>
 <img alt="사막에서 걷고 있는 사람의 그림." src="Hole_JesusalDesierto.jpg">
 <figcaption>윌리엄 홀이 상상한 사막으로 들어가는 예수, 1908</figcaption>
</figure>

table 엘리먼트와 같이, figurearia-label이나 aria-labelledby를 사용하여 이름이 지정되지 않은 경우, figcaption 엘리먼트의 콘텐츠가 접근 가능한 이름으로 사용될 것입니다. 하지만 table 엘리먼트와 달리, figcaption 엘리먼트가 이름으로 사용되지 않은 경우, aria-describedby로 참조되지 않는 한 접근 가능한 설명이 되지는 않습니다. 그럼에도 불구하고, 보조 기술은 그것이 이름이나 설명 또는 둘 다로 사용되는지 여부에 관계 없이 figcaption의 콘텐트를 렌더링 합니다.

table 엘리먼트에 이름을 지정하기 위해 caption 엘리먼트를 사용하거나, figure 엘리먼트에 이름을 지정하기 위해 figcaption 엘리먼트를 사용하는 것은 규칙 2: 보이는 텍스트 선택규칙 3: 기본 기술 선택을 만족시킵니다.

5.4.7 title 및 placeholder로부터 파생된 대체 이름

접근 가능한 이름이 주요 기법들 중 하나 (예를 들어, aria-labelaria-labelledby 어트리뷰트) 또는, 네이티브 마크업 기법을 (예를 들어, HTML label 엘리먼트나, HTML img 엘리먼트의 alt 어트리뷰트) 사용하여 제공되지 않은 경우, 브라우저는 대체 매커니즘으로 다른 어트리뷰트로부터 접근 가능한 이름을 계산합니다. 대체 이름 계산으로 사용되는 어트리뷰트는 이름 지정을 위해 의도되지 않았기 때문에, 일반적으로 유효하지 않은 낮은 품질의 접근 가능한 이름을 생성합니다. 따라서, 규칙 4: 브라우저 폴백 방지에 설명된 대로 이 섹션에 설명된 대체 기술 보다 위에서 설명된 명시적 레이블링 기법을 우선하세요.

HTML 엘리먼트는 지정된 title 어트리뷰트를 가질 수 있습니다. title 어트리뷰트는 엘리먼트의 대체 접근 가능한 이름으로 사용될 수 있습니다. title 어트리뷰트는 일반적으로 사용자가 포인팅 기기로 엘리먼트 위를 맴돌 때 툴팁으로 시작적으로 표시되어 특별히 쉽게 찾을 수 없고, 포인팅 기기가 없은 시각 사용자에게도 접근 가능하지 않습니다.

예를 들어, 자식 legend 엘리먼트가 없지만 title 어트리뷰트가 있는 fieldset 엘리먼트는 title 어트리뷰트로부터 접근 가능한 이름을 가져옵니다.

<fieldset title="시작 클래스 선택">
  <label><input type="radio" name="starter-class" value="green"> Green</label>
  <label><input type="radio" name="starter-class" value="red"> Red</label>
  <label><input type="radio" name="starter-class" value="blue"> Blue</label>
</fieldset>

HTML inputtextarea 엘리먼트에 대해, placeholder 어트리뷰트는 다른 (title 어트리뷰트를 포함하여) 레이블을 생성하는 것이 없다면 대체 레이블링 메커니즘으로 사용됩니다. 사용자가 폼 컨트롤에 초점을 주었을 때 시각적으로 사라지지 않기 때문에 label 엘리먼트를 사용하는 것이 더 좋습니다.

<!-- <label>을 사용하는 것이 권장됩니다 -->
<label>검색 <input type=search name=q></label>

<!-- placeholder가 폴백으로 사용됩니다 -->
<input type=search name=q placeholder="검색">

5.5 효과적이고 사용자 친화적인 접근 가능한 이름 구성

보조 기술 사용자, 특히 스크린리더 사용자의 경우, 접근 가능한 이름의 품질은 사용성에 가장 중요한 기여자 중 하나입니다. 충분한 정보를 제공하지 않는 이름이 사용자의 효과성(effectiveness)을 떨어뜨리는 반면 너무 긴 이름은 효율성(efficiency)을 떨어뜨립니다. 그리고 이해하기 어려운 이름은 효과성(effectiveness), 효율성(efficiency), 흥미를 떨어뜨립니다.

다음 지침은 사용자 친화적인 이름에 대한 시작점을 제공합니다.

5.6 역할(role)별 접근 가능한 이름 지정 지침

어떤 엘리먼트는 항상 이름을 요구하고, 어떤 엘리먼트는 보통 또는 종종 이름을 요구하고, 그러나 어떤 엘리먼트들은 결코 이름이 지정되지 않아야 합니다. 다음 표는 ARIA 역할(role)을 나열하고 각각에 대한 다음 정보를 제공합니다:

이름 지정 필요성
작성자가 지정된 역할(role)을 가진 엘리먼트의 콘텐트를 보완하거나 대체하도록 하기 위해 이름을 지정하는 어트리뷰트나 엘리먼트를 추가할 필요성의 정도를 나타냅니다. 이 열은 다음 값들 중 하나를 포함할 수 있습니다:
  • 내용이 불충분한 경우에만 필요: 이 역할(role)을 가진 엘리먼트는 하위 콘텐츠에 의해 이름이 지정됩니다. aria-labelaria-labelledby가 적용된 경우, 엘리먼트와 엘리먼트의 후손에 포함된 콘텐트는 aria-labelledby에 의해 다시 참조되지 않는 한 보조 기술 사용자에게 숨겨집니다. 그렇게 하는 것이 보조 기술 사용자에게 도움이 되는 드문 경우를 제외하고 후손 콘텐트가 숨겨지는 것을 방지하세요.
  • 필수: ARIA 명세는 작성자가 이름을 제공하도록 요구합니다; 이름이 누락되는 것은 접근성 검사기가 오류를 보고합니다.
  • 권장: 이름을 제공하는 것이 강력히 권장됩니다.
  • 재량: 이름을 지정하는 것이 선택적이거나, 지침 컬럼에 설명된 상황에서는 사용되지 않아야 합니다.
  • 이름을 지정하지 말것: 기술적으로 허용된다 하더라도 이름을 지정하는 것은 강력히 권장되지 않습니다; 종종 보조 기술은 이름이 제공 된다 하더라도 이름을 표시하지 않습니다.
  • 금지: ARIA 명세는 엘리먼트에 이름지 지정되는 것을 허용하지 않습니다; 이름이 지정되는 경우, 접근성 검사기는 오류를 보고할 것입니다.
지침:
이름을 제공하는 것이 유익한지 여부를 결정하는데 도움이 되는 정보를 제공하고, 권장 기술을 설명합니다.
역할(role) 이름 지정 필요성 지침
alert 재량 일부 스크린리더는 경고 콘텐트를 낭독하기 전에 경로 이름을 낭독합니다. 따라서, aria-label은 경고의 내용으로 표시되지 않는 텍스트로 경고의 가시적 콘텐트에 대한 말문을 여는 방법을 제공합니다. aria-label을 사용하는 것은, alert 엘리먼트의 aria-label을 지원하지 않는 스크린리더에서는 오프스크린(off-screen) 텍스트가 낭독 될 것이라는 것을 제외하고, 경고 콘텐트의 오프스크린(off-screen) 텍스트를 제공하는 것과 기능적으로 동일합니다.
alertdialog 필수 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
application 필수 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
article 권장
  • 아티클을 서로 구별할 것이 권장됩니다; 아티클을 탐색할 때 사용자를 돕습니다.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
banner 재량
  • 동일한 페이지에 두 개의 banner 랜드마크 영역이 존재하는 일반적이지 않은 상황에 필요합니다. 그렇지 않으면 선택적입니다.
  • 시각적으로 보이는 레이블이 존재한다면 aria-labelledby를 사용하고, 그렇지 않으면 aria-label을 사용하여 이름이 지정됩니다.
  • Banner 랜드마크 섹션을 참고하세요.
blockquote 재량 시각적으로 보이는 레이블이 존재하는 경우, aria-labelledby를 사용하여 인용구를 연결시키는 것은 일부 보조 기술 사용자들에게 이로울 수 있습니다.
button 내용이 불충분한 경우에만 필요
  • 경고! aria-label이나 aria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨�� 것입니다.
  • 시각적 하위 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
caption 금지
cell 내용이 불충분한 경우에만 필요
  • 경고! aria-label이나 aria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 시각적 하위 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • 이름이 요구되지 않는 다는 것에 주목하세요; 보조 기술은 표의 빈 셀은 빈 이름으로 표현될 것으로 기대합니다.
  • 연관된 행 또는 컬럼 헤더가 cell 이름을 지정하지 않는 다는 것에 주목하세요; 표에서 셀의 이름은 그것의 내용 입니다. 헤더는 보완 정보입니다.
checkbox 내용이 불충분한 경우에만 필요
  • 경고! aria-label이나 aria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • HTML type="checkbox" 기반인 경우, label 엘리먼트를 사용하세요.
  • 그렇지 않으면, aria-labelledby를 통해 가시적으로 보이는 콘텐트를 참조시키세요.
code 금지
columnheader 내용이 불충분한 경우에만 필요
  • 경고! aria-label이나 aria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 시각적 하위 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • columnheader 역할(role)이 HTML th에서 암시된 것이라면, HTML abbr 어트리뷰트가 스크린리더가 table, grid, treegrid 내의 연관된 cell을 읽을 때 낭독되기만 하는 이름의 축약 버전을 지정하는데 사용될 수 있습니다.
combobox 필수
  • combobox 역할(role)이 HTML selectinput 엘리먼트에 적용된 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
complementary 권장
  • 동일한 페이지에 둘 이상의 complementary 랜드마크가 존재하는 경우 이름 지정이 필요합니다.
  • 랜드마크 영역을 탐색할 때 사용자가 영역 내용의 목적을 이해하는데 도움을 주기 위해 하나의 영역이 존재할 경우에도 이름을 지정하는 것이 권장됩니다.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Complementary 랜드마크 섹션을 참고하세요.
contentinfo 재량
  • 동일한 페이지에 둘 이상의 contentinfo 랜드마크 영역이 존재하는 일반적이지 않은 상황에 필요합니다. 그렇지 않으면 선택적입니다.
  • 시각적으로 보이는 레이블이 존재한다면 aria-labelledby를 사용하고, 그렇지 않으면 aria-label을 사용하세요.
definition 권장 aria-labelledby를 사용하여, role="term"를 가진 정의되는 용어를 참조시키세요.
deletion 금지
dialog 필수 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
directory 재량
  • 이름을 지정하는 것은 사용자가 디렉토리의 목적을 이해하는데 도움이 될 수 있습니다.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
document 재량 document 역할(role)을 가진 엘리먼트는 application 역할(role)을 가진 엘리먼트 내에 포함되며, 이름을 가져야 할 필요가 있습니다. 일반적으로, application 엘리먼트의 이름은 document 엘리먼트에 대한 충분한 컨텍스트와 정체성을 제공할 것입니다. application 엘리먼트는 흔치 않은 사용자 정의 위젯을 생성하는데에만 사용되기 때문에, 주의 깊은 평가가 접근 가능한 이름을 추가할지의 여부가 유익한지 결정하는데 필요합니다.
emphasis 금지
feed 권장
  • 스크린리더 사용자가 컨텍스트와 feed의 목적을 이해하도록 도와주세요.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Feed 설계 패턴을 참고하세요.
figure 권장
  • HTML의 경우, figurefigcaption 엘리먼트를 사용하세요. figcaptionfigure에 대한 접근 가능한 이름으로서 제공할 것입니다. 캡션으로 표와 삽화 이름 지정 섹션을 참고하세요.
  • HTML을 사용하지 않는 경우, 혹은 레거시 HTML을 개조하는 경우 figure의 캡션을 참조하도록 figure에 aria-labelledby를 사용하세요.
  • 시각적으로 보이는 캡션이 없는 경우 aria-label이 사용될 수 있습니다.
form 권장
  • 스크린리더 사용자가 컨텍스트와 form 랜드마크의 목적을 이해하도록 도와주세요.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Form 랜드마크 섹션을 참고하세요.
generic 금지
grid 권장
  • HTML table 엘리먼트에 grid가 적용된 경우, 접근 가능한 이름은 표의 caption 엘리먼트로부터 파생될 수 있습니다.
  • 그렇지 않으면, 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
gridcell 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • 이름이 필수가 아님을 주의하세요; 보고 기술은 그리드의 빈 셀이 빈 이름으로 표현될 것으으로 예상합니다.
  • 연관된 열이나 행 헤더는 gridcell에 이름을 지정하지 않음에 주의하세요; 그리드에서 셀 이름은 그것의 콘텐트 입니다. 헤더는 보완 정보(complementary information)입니다.
group 재량
  • HTML fieldset 엘리먼트를 사용하는 경우, 접근 가능한 이름은 legend 엘리먼트로부터 파생될 수 있습니다.
  • details 엘리먼트를 사용하는 경우, 이 엘리먼트에 대한 접근 가능한 이름을 제공하지 마세요. 사용자는 summary 엘리먼트로 상호 작용하고, 그것의 콘텐츠로부터 접근 가능한 이름을 파생시킬 수 있습니다.
  • optgroup 엘리먼트를 사용하는 경우, label 어트리뷰트를 사용하세요.
  • 그렇지 않으면, 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
heading 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
insertion 금지
img 필수 HTML img 엘리먼트의 경우, alt 어트리뷰트를 사용하세요. img 역할(role)을 가진 다른 엘리먼트의 경우, aria-labelledbyaria-label을 사용하세요.
link 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
list 재량
  • 잠재적으로 이름 목록과 페이지의 목록 탐색 모두를 지원하는 스크린리더 사용자에게 유용합니다.
  • navigation 영역과 같이 특히 이름이 지정된 컨테이너 내에 중첩된 경우, 잠재적으로 정신없게 만들거나 바람직하지 않게 스크린리더가 장황하게 이야기하는 원인이 됩니다.
  • 가시적으로 보이는 레이블이 존재한다면, aria-labelledby를, 그렇지 않으면 aria-label을 사용하여 이름이 지정될 수 있습니다.
listbox 필수
  • listbox 역할(role)이 (값이 1보다 큰 multiple 속성이나 size 속성을 가진) HTML select 엘리먼트에 적용된 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
  • Listbox 설계 패턴을 참고하세요.
listitem 이름을 지정하지 말것 이름 지정이 보조 기술에 의해 지원되지 않습니다; 목록 항목 내에 관련 내용을 포함시켜야 합니다.
log 재량 일부 스크린리더는 log 엘리먼트의 콘텐트를 낭독하기 전에 log 엘리먼트의 이름을 낭독합니다. 따라서, aria-label은 로그 엘리먼트의 부분으로 노출되지 않는 텍스트로 log 엘리먼트의 보이는 콘텐트를 미리 나타내는 방법을 제공합니다. aria-label을 사용하는 것은 log 엘리먼트에 aria-label을 지원하지 않는 스크린리더에서는 오프스크린(off-screen) 텍스트가 낭독 될 것이라는 것을 제외하고, log 엘리먼트의 콘텐트의 오프스크린(off-screen) 텍스트를 제공하는 것과 기능적으로 동일합니다.
main 재량
  • 잠재적으로 특히 페이지 로드 이벤트를 생성하지 않고 main 콘텐츠 변경을 일으키는 싱글 페이지 어플리케이션에서 보조 기술 사용자를 지향하는데 도움이 됩니다.
  • 가시적으로 보이는 레이블이 존재한다면 aria-labelledby를, 그렇지 않으면 aria-label을 사용하여 이름이 지정될 수 있습니다.
  • Main 랜드마크 섹션을 참고하세요.
marquee 재량 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
math 권장
  • math 엘리먼트가 표현을 위한 자식만을 가지고 접근 가능한 이름이 수학 표현식을 전달하기 위해 의도된 경우, 표현식을 나타내는 문자열을 제공하도록 aria-label을 사용하세요.
  • math 엘리먼트가 수학 표현식을 전달하는 탐색 가능한 콘텐트를 포함하고 표현식에 대한 가시적으로 보이는 레이블이 존재한다면, aria-labelledby를 사용하세요.
  • 그렇지 않으면, 표현식에 이름을 지정하기 위해 aria-label을 사용하세요, 예를 들어, aria-label="피타고라스 정리".
menu 권장
  • 이 엘리먼트의 가시성을 제어하는 메뉴 아이템이나 버튼을 나타내도록 aria-labelledby를 사용하세요.
  • 그렇지 않으면, aria-label을 사용하세요.
  • Menu나 Menu bar 설계 패턴을 참고하세요.
menubar 권장
  • 스크린리더 사용자가 컨텍스트와 menubar 내의 menuitem 엘리먼트의 목적을 이해하도록 도와주세요. menubar에 이름을 지정하는 것은 메뉴 버튼에 이름을 지정하는 것과 비슷합니다. menu를 여는 button의 이름은 메뉴의 목적이 그것을 여는 것(open)임을 전달합니다. menubar 엘리먼트는 지속적으로 노출되기 때문에, menubar의 이름은 동일한 목적을 제공할 수 있습니다.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Menu나 Menu bar 설계 패턴을 참고하세요.
menuitem 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • 주의: 자식 menu 내에 포함된 콘텐트는 자동으로 접근 가능한 계산에서 제외됩니다.
  • Menu나 Menu bar 설계 패턴을 참고하세요.
menuitemcheckbox 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • Menu나 Menu bar 설계 패턴을 참고하세요.
menuitemradio 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • Menu나 Menu bar 설계 패턴을 참고하세요.
meter 필수
  • HTML meter 엘리먼트를 기반으로 하는 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
navigation 권장
  • 스크린리더 사용자가 컨텍스트와 navigation 랜드마크의 목적을 이해하도록 도와주세요.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Navigation 랜드마크 섹션을 참고하세요.
none 금지 role="none"을 가진 엘리먼트는 (오류 케이스를 제외하고) 접근성 트리의 일부가 아닙니다. aria-labelledbyaria-label을 사용하지 마세요.
note 재량
  • 이름 지정은 선택적이지만, 스크린리더 사용자가 컨텍스트와 note의 목적을 이해하도록 도울 수 있습니다.
  • 가시적으로 보이는 레이블이 존재한다면, aria-labelledby를, 그렇지 않으면 aria-label을 사용하여 이름이 지정됩니다.
option 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • Combobox 설계 패턴을 참고하세요.
paragraph 금지
presentation 금지 role="presentation"을 가진 엘리먼트는 (오류 케이스를 제외하고) 접근성 트리의 일부가 아닙니다. aria-labelledbyaria-label을 사용하지 마세요.
progressbar 필수
  • progressbar 역할(role)이 HTML progress 엘리먼트에 적용된 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
radio 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • HTML type="checkbox"를 기반으로 하는 경우, label 엘리먼트를 사용하세요.
  • 그렇지 않으면, aria-labelledby를 통해 가시적으로 보이는 콘텐트를 참조시키세요.
radiogroup 필수
  • 보조 기술 사용자가 radio 버튼 그룹의 목적을 이해하도록 돕는 것이 권장됩니다.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Radio 그룹 설계 패턴을 참고하세요.
region 필수
  • 스크린리더 사용자가 컨텍스트와 랜드마크의 목적을 이해하도록 도와주세요.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Region 랜드마크 섹션을 참고하세요.
row 내용이 불충분하고 treegrid의 후손이며 행이 focusable한 경우에만 필수 row 엘리먼트가 treegrid에서 초점을 얻을 수 있는 경우, 스크린리더는 행으로 탐색하는 경우 행의 전체 콘텐트를 낭독합니다. 이것이 일반적으로 가장 적절한 동작입니다. 하지만, 어떤 상황에서, 셀이 낭독되는 순서를 변경하거나 낭독할 셀을 지정하기위해 aria-labelledby를 사용하여 특정 셀의 낭독을 제외시키는 것이 유리할 수 있습니다.
rowgroup 이름을 지정하지 말것 이름 지정이 보조 기술에 의해 지원되지 않습니다.
rowheader 내용이 불충분한 경우에만 필요
  • 경고! aria-label이나 aria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • rowheader 역할(role)이 HTML th로부터 적용된 경우, HTML abbr 어트리뷰트가 스크린리더가 table, grid, 또는 treegrid 내의 연관된 cell을 읽을 때에만 낭독되는 이름의 축약 버전을 지정하는데 사용될 수 있습니다.
scrollbar 재량
  • 이름 지정은 선택적이지만, 잠재적으로 스크린리더 사용자가 scrollbar의 목적을 이해하도록 도움을 줄 수 있습니다. 목적은 scrollbar에 대해 필요한 aria-controls 어트리뷰트를 사용하여 전달될 수 있습니다.
  • 가시적으로 보이는 레이블이 존재한다면, aria-labelledby를, 그렇지 않으면 aria-label을 사용하여 이름이 지정됩니다.
search 권장
  • 스크린리더 사용자가 컨텍스트와 search 랜드마크의 목적을 이해하도록 도와주세요.
  • 가시적으로 보이는 레이블이 존재한다면, aria-labelledby를, 그렇지 않으면 aria-label을 사용하여 이름이 지정됩니다.
  • Search 랜드마크 섹션을 참고하세요.
searchbox 필수
  • searchbox 역할(role)이 HTML input 엘리먼트에 적용된 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
separator 재량
  • 페이지에 초점을 얻을 수 있는 separator 엘리먼트가 둘 이상 존재하는 경우 권장됩니다.
  • 스크린리더 사용자가 컨텍스트와 separator의 목적을 이해하도록 도울 수 있습니다.
  • 가시적으로 보이는 레이블이 존재한다면, aria-labelledby를, 그렇지 않으면 aria-label을 사용하여 이름이 지정됩니다.
slider 필수
  • slider 역할(role)이 HTML input 엘리먼트에 적용된 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
  • Slider 설계 패턴Slider (Multi-Thumb) 설계 패턴을 참고하세요.
spinbutton 필수
  • textbox 역할(role)이 HTML input 엘리먼트에 적용된 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
  • Spinbutton 설계 패턴을 참고하세요.
status 재량 일부 스크린리더는 status 엘리먼트의 콘텐트를 낭독하기 전에 status 엘리먼트의 이름을 낭독합니다. 따라서, aria-label은 status 엘리먼트의 부분으로 노출되지 않는 텍스트로 로그 엘리먼트의 보이는 콘텐트를 미리 나타내는 방법을 제공합니다. aria-label을 사용하는 것은 status 엘리먼트에 aria-label을 지원하지 않는 스크린리더에서는 오프스크린(off-screen) 텍스트가 낭독 될 것이라는 것을 제외하고, status 엘리먼트의 콘텐트의 오프스크린(off-screen) 텍스트를 제공하는 것과 기능적으로 동일합니다.
strong 금지
subscript 금지
superscript 금지
switch 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • HTML type="checkbox"을 기반으로 하는 경우, label 엘리먼트를 사용하세요.
  • 그렇지 않으면, aria-labelledby를 통해 가시적으로 보이는 콘텐트를 참조시키세요.
tab 내용이 불충분한 경우에만 필요
  • 경고! aria-label이나 aria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
table 필수
  • HTML table 엘리먼트를 사용하는 경우, caption 엘리먼트를 사용하세요.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
  • Table 설계 패턴을 참고하세요.
tablist 권장
  • 스크린리더 사용자가 컨텍스트와 tablist의 목적을 이해하도록 도와주세요.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Carousel 설계 패턴Tabs 설계 패턴을 참고하세요.
tabpanel 필수
term 이름을 지정하지 말것 term은 일반적으로 role="definition" 엘리먼트에 대한 이름이기 때문에, 용어 자체가 이름을 또 가지면 혼동 될 수 있습니다.
textbox 필수
  • textbox 역할(role)이 HTML inputtextarea 엘리먼트에 적용된 경우, HTML label 엘리먼트로 이름이 지정될 수 있습니다.
  • 그렇지 않으면 가시적으로 보이는 레이블이 존재하는 경우 aria-labelledby를 사용하세요.
  • 가시적으로 보이는 레이블이 존재하지 않는 경우 aria-label을 사용하세요.
time 이름을 지정하지 말것 이름 지정이 보조 기술에 의해 지원되지 않습니다.
timer 재량 일부 스크린리더는 timer 엘리먼트의 콘텐트를 낭독하기 전에 timer 엘리먼트의 이름을 낭독합니다. 따라서, aria-label은 timer 엘리먼트의 부분으로 노출되지 않는 텍스트로 timer 엘리먼트의 보이는 콘텐트를 미리 나타내는 방법을 제공합니다. aria-label을 사용하는 것은 timer 엘리먼트에 aria-label을 지원하지 않는 스크린리더에서는 오프스크린(off-screen) 텍스트가 낭독 될 것이라는 것을 제외하고, timer 엘리먼트의 콘텐트의 오프스크린(off-screen) 텍스트를 제공하는 것과 기능적으로 동일합니다.
toolbar 권장
  • 페이지에 둘 이상의 toolbar 엘리먼트가 존재하는 경우, 이름 지정은 필수입니다.
  • 페이지에 오직 하나의 툴바만 존재하는 경우라도, 보조 기술 사용자가 툴바의 목적을 이해하도록 도와주세요.
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Toolbar 패턴을 참고하세요.
tooltip 내용이 불충분한 경우에만 필요
  • 경고! aria-label이나 aria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
tree 필수
  • 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Tree View 설계 패턴을 참고하세요.
treegrid 필수
  • treegrid가 HTML table 엘리먼트에 적용된 경우, 접근 가능한 이름은 표의 caption 엘리먼트로부터 파생될 수 있습니다.
  • 그렇지 않으면, 시각적으로 보이는 레이블이 존재하는 경우 aria-labelledby를, 그렇지 않으면 aria-label을 사용하세요.
  • Treegrid 설계 패턴을 참고하세요.
treeitem 내용이 불충분한 경우에만 필요
  • 경고! aria-labelaria-labelledby를 사용하는 것은 보조 기술에게 후손 콘텐트를 숨길 것입니다.
  • 가시적으로 보이는 후손 콘텐트에 의해 이름이 지정되는 것이 이상적입니다.
  • 주의: 자식 group 내에 포함된 콘텐트는 자동으로 접근 가능한 이름 계산에서 제외됩니다.
  • Tree View 설계 패턴을 참고하세요.

5.7 접근 가능한 이름 계산

유저 에이전트는 잠재적인 이름 지정 방법의 목록을 단계별로 통과하면서 이름을 생성하는 첫 방법을 사용하여 엘리먼트에 대한 접근 가능한 이름 문자열을 구성합니다. 이 알고리즘은 접근 가능한 이름 명세에 정의되어 있습니다. 대략 다음과 같습니다:

  1. aria-labelledby 속성(property)이 있다면 이것이 사용됩니다.

  2. 이름이 여전히 비어있다면, aria-label 속성(property)이 있다면 이것이 사용됩니다.

  3. 이름이 여전히 비어있다면, 호스트-언어별 어트리뷰트나 엘리먼트가 존재한다면 이것이 사용됩니다. HTML의 경우, 엘리먼트에 따라 다음과 같습니다:

    type 어트리뷰트가 Button, Submit Button, 또는 Reset Button 상태에 있는 input
    value 어트리뷰트.
    type 어트리뷰트가 Image Button 상태에 있는 input
    img
    area
    alt 어트리뷰트.
    fieldset
    첫 번째 자식 legend 엘리먼트.
    다른 form 엘리먼트
    연관된 label 엘리먼트(들).
    figure
    첫 번째 자식 figcaption 엘리먼트.
    table
    첫 번째 자식 caption 엘리먼트.
  4. 이름이 여전히 비어있다면, 자식 콘텐츠로부터 이름 지정을 지원하는 역할(role)을 가진 엘리먼트의 경우, 엘리먼트의 콘텐트가 사용됩니다.

  5. 마지막으로, 이름이 여전히 비어있다면, 다른 폴백 호스트-언어별 어트리뷰트나 엘리먼트가 존재한다면 이것이 사용됩니다. HTML의 경우, 엘리먼트에 따라 다음과 같습니다:

    type 어트리뷰트가 Text, Password, Search, Telephone, 또는 URL 상태에 있는 input
    textarea
    title 어트리뷰트. 그렇지 않으면, placeholder 어트리뷰트.
    type 어트리뷰트가 Submit Button 상태에 있는 input
    단어 "submit"의 지역화 된 문자열.
    type 어트리뷰트가 Reset Button 상태에 있는 input
    단어 "reset"의 지역화 된 문자열.
    type 어트리뷰트가 Image Button 상태에 있는 input
    title 어트리뷰트. 그렇지 않으면, 문구 "Submit Query"의 지역화 된 문자열.
    summary
    단어 "Details".
    다른 엘리먼트
    title 어트리뷰트

마지막 단계는 폴백 메커니즘입니다. 일반적으로 엘리먼트에 레이블을 지정할 때는, 폴백이 아닌 메커니즘 중 하나를 사용하세요.

콘텐트로부터 이름을 계산하는 경우, 유저 에이전트는 아래 기술 된 대로 treeitemmenuitem의 경우를 제외하고 모든 후손 노드를 단계별로 통과합니다. 그리고, aria-labelledby 어트리뷰트의 참조를 따르는 경우, 마찬가지로 각 참조된 엘리먼트의 트리를 통과합니다. 따라서, 이름 지정 알고리즘은 재귀적입니다. 다음 두 섹션은 알고리즘이 작동하는 방법의 비재귀 및 재귀 예제를 설명합니다.

treeitem 역할(role)에 대한 콘텐트로부터 이름을 계산하는 경우, 자식 group 엘리먼트의 후손 콘텐트는 포함되지 않습니다. 예를 들어, 다음 tree에서, 첫 번째 트리 항목의 이름은 과일입니다; 사과, 바나나, 오렌지는 자동으로 생략됩니다.

<ul role="tree">
  <li role="treeitem">과일
    <ul role="group">
      <li role="treeitem">사과</li>
      <li role="treeitem">바나나</li>
      <li role="treeitem">오렌지</li>
    </ul>
  </li>
</ul>

비슷하게, menuitem 역할(role)에 대한 콘텐트로부터 이름을 계산하는 경우, 자식 menu 엘리먼트의 후손 콘텐트는 포함되지 않습니다. 따라서, 다음 menu위 첫 번째 부모 menuitem의 이름은 과일입니다.

<ul role="menu">
  <li role="menuitem">과일
    <ul role="menu">
      <li role="menuitem">사과</li>
      <li role="menuitem">바나나</li>
      <li role="menuitem">오렌지</li>
    </ul>
  </li>
</ul>

5.7.1 비재귀적 접근 가능한 이름 계산의 예

연결된 label 엘리먼트가 없고 name 어트리뷰트만 있어서 접근 가능한 이름이 없는 input를 가정해보세요 (이렇게 하지 마세요):

<input name="code">

placeholder 어트리뷰트가 있다면, 이름 지정 폴백 메커니즘으로 제공됩니다 (이렇게 하지 마세요):

<input name="code"
       placeholder="One-time code">

또한 title 어트리뷰트가 존재하는 경우, 이것이 placeholder 대신 접근 가능한 이름으로 사용되지만, 여전히 폴백입니다 (이렇게 하지 마세요):

<input name="code"
       placeholder="123456"
       title="One-time code">

또한 label 엘리먼트가 존재하는 경우 (추천), 그것이 접근 가능한 이름으로 사용되고, title 어트리뷰트는 접근 가능한 설명으로 대신 사용됩니다:

<label>One-time code
 <input name="code"
        placeholder="123456"
        title="Get your code from the app.">
</label>

또한 aria-label 어트리뷰트가 존재하는 경우 (보조 기술 사용자에게 명확성을 더해주기 위해서가 아닌 이상 추천되지 않습니다), 그것이 label 엘리먼트를 대체하여 접근 가능한 이름이 될 것입니다:

<label>Code
 <input name="code"
        aria-label="One-time code"
        placeholder="123456"
        title="Get your code from the app.">
</label>

또한 aria-labelledby 어트리뷰트가 존재하는 경우, 다른 엘리먼트와 어트리뷰트보다 우위에 섭니다 (aria-label 어트리뷰트는 사용되지 않을 경우 제거 되어야 합니다):

<p>Please fill in your <span id="code-label">one-time code</span> to log in.</p>
<p>
 <label>Code
  <input name="code"
         aria-labelledby="code-label"
         aria-label="This is ignored"
         placeholder="123456"
         title="Get your code from the app.">
 </label>
</p>

5.7.2 재귀적 접근 가능한 이름 계산의 예

접근 가능한 이름 계산 알고리즘은 필요할 때 재귀적으로 호출 될 것입니다. aria-labelledby 참조는 알고리즘이 재귀적으로 호출되도록 하고, 콘텐트로부터 접근 가능한 이름을 계산할 때 알고리즘은 각 자식 노드에 대해 재귀적으로 호출됩니다.

이 예에서, 버튼에 대한 레이블은 각 자식 노드로 재귀하여 계산된 결과 휴지통으로 이동입니다.

<button><img src="bin.svg" alt="휴지통">으로 이동</button>

aria-labelledby 참조를 따를 때, 알고리즘은 무한 루프를 방지하기 위해 동일한 참조를 두 번 따르는 것을 방지합니다.

이 예에서, 버튼에 대한 레이블은 우선 aria-labelledby가 참조하는 부모 엘리먼트를 따라 계산되고, 이후 자식 노드들로부터 그 엘리먼트에 대한 레이블을 계산하여 먼저 button 엘리먼트를 다시 방문하지만 aria-labelledby 참조를 무시하고 대신 aria-label을 사용하고, 이후 다음 자식 (테스트 노드)를 방문하여 계산됩니다. 결과 레이블은 회의 삭제: 일일 상태 보고서입니다.

<div id="meeting-1">
  <button aria-labelledby="meeting-1" aria-label="회의 삭제:">X</button>
  일일 상태 보고서
</div>

5.8 설명 기법

5.8.1 aria-describedby로 내용을 참조하여 설명하기

aria-describedby 속성(property)은 aria-labelledby 속성(property)과 비슷하게 동작합니다. 예를 들어, 버튼은 형태 단락에 의해 설명 될 수 있습니다.

<button aria-describedby="trash-desc">휴지통으로 이동</button>
...
<p id="trash-desc">휴지통의 항목은 30일 후 영구적으로 제거될 것입니다.</p>

설명은 텍스트 문자열로 조정 됩니다. 예를 들어, 설명이 img 엘리먼트를 포함하는 경우, 이미지에 해당하는 텍스트가 계산됩니다.

<button aria-describedby="trash-desc"> <img src="bin.svg" alt="휴지통">으로 이동</button>
...
<p id="trash-desc"><img src="bin.svg" alt="휴지통">의 항목은 30일 후 영구적으로 제거 될 것입니다.</p>

aria-labelledby와 마찬가지로, 엘리먼트가 숨겨져 있어도 aria-describedby를 사용하여 엘리먼트를 참조할 수 있습니다. 예를 들어, 양식의 텍스트 필드는 기본적으로 숨겨진 설명을 가질 수 있지만, 공개 위젯을 사용하여 요청 시 나타낼 수 있습니다. 설명은 aria-describedby로 직접적으로 텍스트 필드로부터 참조될 수도 있습니다. 다음 예에서, input 엘리먼트에 대한 접근 가능한 설명은 username은 이 서비스에 로그인하는데 사용되는 이름입니다. 입니다.

<label for="username">Username</label>
<input id="username" name="username" aria-describedby="username-desc">
<button aria-expanded="false" aria-controls="username-desc" aria-label="Help about username">?</button>
<p id="username-desc" hidden>
  username은 이 서비스에 로그인하는데 사용되는 이름입니다.
</p>

5.8.2 캡션으로 표 및 삽화에 설명 지정

HTML에서, tablearia-labelaria-labelledby를 사용하여 이름이 지정되고, 자식 caption 엘리먼트는 접근 가능한 설명이 됩니다. 예를 들어, 앞선 제목은 적절한 접근 가능한 이름으로 제공될 수 있고, caption 엘리먼트는 더 긴 설명을 포함할 수 있습니다. 이러한 상황에서, aria-labelledby은 접근 가능한 이름을 제목 콘텐츠로 설정하기 위해 table에 사용 될 수 있고, caption은 접근 가능한 설명이 될 것입니다.

<h2 id="events-heading">다가오는 일정</h2>
<table aria-labelledby="events-heading">
 <caption>
  다가오는 일정의 달력, 27주에서 31주까지, 매주 월요일에 시작합니다.
  첫 번째 열은 주차입니다.
 </caption>
 <tr><th>주차<th><th><th><th><th><th><th><tr><td>27<td><td><td><td><td><td><td>
 <tr><td>28<td><td><td><td><td><td><td><a href="/events/9856">왕세자비 생일</a>
 <tr><td>29<td><td><td><td><td><td><td>
 <tr><td>30<td><td><td><td><td><td><td>
 <tr><td>31<td><td><td><td><td><td><td>
</table>

HTML figure 엘리먼트은 figcaption 엘리먼트로부터 접근 가능한 이름을 얻을 수 있지만, 접근 가능한 이름으로 사용되지 않더라도 접근 가능한 설명으로는 사용되지 않습니다. figcaption 엘리먼트가 접근 가능한 설명으로 적절하고, 접근 가능한 이름이 aria-labelledbyaria-label를 사용하여 지정되는 경우, figcaptionaria-describedby 어트리뷰트를 사용하여 접근 가능한 설명으로 명시적으로 설정 될 수 있습니다.

<h2 id="neutron">중성자</h2>
<figure aria-labelledby="neutron" aria-describedby="neutron-caption">
 <img src="neutron.svg" alt="중성자 내에는 상호 연결된 3개의 쿼크 (파란색 'u',
 빨간색 'd', 녹색 'd')가 있습니다.">
 <figcaption id="neutron-caption">
  중성자의 쿼크. 개별 쿼크의 색상 배정은 임의이지만,
  세 가지 모든 색상이 표현되어야 합니다.
  쿼크 사이의 힘은 글루온에 의해 매개 됩니다.
 </figcaption>
</figure>

5.8.3 title로부터 파생된 설명

접근 가능한 설명이 aria-describedby 어트리뷰트를 사용하여 또는 주 호스트 언어별 어트리뷰트나 엘리먼트 중 하나를 (예를 들어, table에 대한 caption 엘리먼트) 사용하여 제공되지 않았다면, HTML의 경우 엘리먼트가 title 어트리뷰트를 가지고 있다면 그것이 접근 가능한 설명으로 사용됩니다.

aria-describedby와 함께 가시적으로 보이는 설명이 일반적으로 권장됩니다. 보이지 않는 설명이 필요한 경우, 접근 가능한 설명을 가질 수 있는 HTML 엘리먼트에 대해, title 어트리뷰트가 사용될 수 있습니다.

title 어트리뷰트는 일부 사용자, 특히 hover를 지원하는 포인팅 기기 (예를 들어, 마우스)를 사용하지 않고 스크린리더를 사용하지 않는 정상 시력 사용자에게 접근 가능하지 않을 수 있음을 주의하세요

예를 들어, pattern 어트리뷰트를 사용하여 제한된 입력을 가지는 input 엘리먼트는 예상되는 입력이 무엇인지를 설명하도록 title 어트리뷰트를 사용 할 수 있습니다.

<label> 부품 번호:
 <input pattern="[0-9][A-Z]{3}" name="part"
        title="부품 번호는 숫자 다음에 대문제 3개가 오는 숫자입니다."/>
</label>

이 경우 title 어트리뷰트는 사용자가 컨트롤에 호버하거나 초점을 줄 때 툴팁으로 사용자에게 보여질 수 있지만, 유저 에이전트가 양식을 검증할 때 input 엘리먼트의 값이 pattern과 일치하지 않는 경우 오류 메세지의 일부로도 보여질 수 있습니다.

다른 예로, 링크는 title 어트리뷰트를 링크를 보다 자세히 설명하는데 사용할 수 있습니다.

<a href="http://twitter.com/W3C"
   title="W3C 트위터를 팔로우 하세요">
   <img src="/2008/site/images/Twitter_bird_logo_2012.svg"
        alt="트위터" class="social-icon" height="40" />
</a>

5.9 접근 가능한 설명 계산

접근 가능한 이름 계산과 같이, 접근 가능한 설명 계산은 테스트 문자열을 생성합니다.

접근 가능한 설명 계산 알고리즘은 이름이나 설명이 계산 여부에 따라 몇 가지 지점을 제외하고 접근 가능한 이름 계산 알고리즘과 동일합니다. 특히, 접근 가능한 설명을 위해 텍스트를 누적할 경우, 알고리즘은 aria-labelledby 대신 aria-describedby를 사용합니다.

유저 에이전트는 잠잭적인 설명 방법의 목록을 단계별로 통과하면서 설명을 생성하는 첫 방법을 사용하여 엘리먼트에 대해 접근 가능한 설명 문자열을 구성합니다. 이 알고리즘은 접근 가능한 이름 명세에 정의되어 있습니다. 대략 다음과 같습니다:

  1. aria-describedby 속성(property)이 있다면 이것이 사용됩니다.

  2. 설명이 여전히 비어있다면, 호스트 언어별 어트리뷰트나 엘리먼트가 존재한다면, 그것이 접근 가능한 이름으로 이미 사용되지 않았다면, 이것이 사용됩니다. HTML의 경우, 엘리먼트에 다라 다음과 같습니다:

    type 어트리뷰트가 Button, Submit Button, 또는 Reset Button 상태에 있는 input
    value 어트리뷰트.
    summary
    엘리먼트의 하위 트리.
    table
    첫 번째 자식 caption 엘리먼트.
  3. 마지막으로 설명이 여전히 비어있다면, 다른 호스트 언어별 어트리뷰트나 엘리먼트가 있고, 그것이 접근 가능한 이름으로 이미 사용 되지 않았다면 이것이 사용됩니다. HTML의 경우 이것은 title 어트리뷰트입니다.

6. 키보드 인터페이스 개발

네이티브 HTML 양식 엘리먼트들과 달리, 브라우저는 ARIA로 접근 가능하게 만들어진 그래픽 유저 인터페이스(GUI) 컴포넌트에 대한 키보드 지원을 제공하지 않습니다; 작성자는 코드에 키보드 지원을 제공해야 합니다. 이 섹션은 메뉴와 그리드 같은 ARIA 위젯 뿐 아니라 키보드로 운용할 수 있는 툴바와 대화상자 같은 인터랙티브 컴포넌트를 포함하는 웹 페이지의 기능을 만드는 원칙과 방법을 설명합니다. 초점 관리의 기본 사항과 함께, 이 섹션은 키보드 사용자들에게 다른 사람들이 사용할 수 있는 경험 만큼 효율적이고 즐거운 경험을 제공한다는 목표에 대한 지침을 제공합니다.

이 섹션은 다음을 다룹니다:

  1. ARIA 설계 패턴에 사용되는 초점 이동 규칙의 기본 원칙 이해.
  2. 가시적 초점 유지, 예측 가능한 초점 이동, 키보드 초점과 선택 상태 구분.
  3. 컴포넌트 간 초점 이동 관리, 예를 들어 Tab 키와 Shift+Tab 키가 눌렸을 때 초점 이동 방법.
  4. 초점을 얻을 수 있는 여러 엘리먼트들을 포함하는 컴포넌트 내부에서 키보드 초점 이동 관리, 예를 들어 라디오 그룹, 메뉴, 목록상자, 트리, 그리드와 같이 위젯 내부에 프로그램적으로 초점을 노출하는 두 가지 다른 방식
  5. 비활성화 된 인터랙티브 엘리먼트가 초점을 얻을 수 있게 만드는 시점 결정
  6. 보조 기술, 브라우저, 운영 체제의 키보드 명령과의 충동 문제를 방지하는 방법에 대한 지침을 포함하여, 키보드 단축키를 지정하고 표시

6.1 핵심 키보드 탐색 규칙

ARIA 역할(role), 상태(state), 속성(property)은 마이크로소프트 윈도우, 맥 OS, 그놈을 비롯하여 대중적인 데스스톱 GUI의 GUI 컴포넌트 간에 공유되는 동작과 기능을 모델링 합니다. 마찬가지로, ARIA 설계 패턴은 웹에서 키보드 인터페이스의 쉬운 학습과 효율적인 운영을 용이하게 하는 목적을 가진 공통 규약을 일관되게 포함하여 이 플랫폼들로부터 사용자 기대치와 키보드 규칙을 차용합니다.

웹 페이지가 접근 가능하도록, 모든 인터랙티브 엘리먼트들은 키보드를 통해 운용 가능해야 합니다. 또한, ARIA 설계 패턴에 기술된 공통 GUI 키보드 인터페이스 규칙의 일관된 적용은 특히 보조 기술 사용자에게 중요합니다. 예를 들어, 스크린리더 사용자가 트리를 운용한다고 가정해보세요. 익숙한 시각적 스타일이 사용자가 마우스로 트리 가지를 확장하는 방법을 발견하는데 도움이 되는 것 처럼, ARIA 어트리뷰트는 데스크톱 어플리케이션에서 트리의 소리와 느낌을 제공합니다. 따라서, 스크린리더 사용자는 일반적으로 오른쪽 방향키를 누르는 것이 축소된 노드를 확장할 것이라고 예상할 것입니다. 스크린리더는 엘리먼트가 트리임을 알고 있기 때문에, 초보자에게 운용하는 방법을 지시하는 기능을 가질 수도 있습니다. 마찬가지로, 음성 인식 소프트웨어는 엘리먼트를 트리로 인식하기 때문에 가지를 확장하고 축소하는 기능을 구현할 수 있고, 적절한 키보드 명령을 실행 할 수 있습니다. 이 모든 것들은 트리가 ARIA 트리 패턴에 기술된 대로 GUI 키보드 규약이 구현될 경우에만 가능합니다.

모든 플랫폼에서 주요 키보드 탐색 규칙은 일반적으로 tabshift+tab키가 한 UI 컴포넌트에서 다른 컴포넌트로 이동하는 반면 다른 키, 주로 방향키는 여러 초점을 얻을 수 있는(focusable) 엘리먼트들을 포함하는 컴포넌트의 내부로 초점을 이동시킨다는 것입니다. tab 키를 누를 때 초점이 따르는 경로를 탭 시퀀스 혹은 탭 링이라고 부릅니다.

초점을 얻을 수 있는 여러 엘리먼트들을 포함하는 UI 컴포넌트의 일반적인 예는 라디오 그룹, 탭 목록, 메뉴, 그리드입니다. 예를 들어, 라디오 그룹은 각각이 초점을 얻을 수 있는 여러 라디오 버튼을 포함합니다. 하지만 오직 한 개 라디오 버튼만이 탭 시퀀스에 포함됩니다. Tab 키를 누른 후 초점은 그룹 내의 라디오 버튼으로 이동하고, 방향키를 누르면 그룹 내의 라디오 버튼 간에 초점이 이동하며, 다시 Tab 키를 누르면 라디오 그룹을 벗어나 탭 시퀀스 내의 다음 엘리먼트로 초점이 이동됩니다.

ARIA 명세는 composite 위젯으로 여러 초점을 얻을 수 있는(focusable) 엘리먼트를 포함하는 개별 UI 컴포넌트를 참조합니다. composite 내에서 초점 이동을 제어하는 프로세스를 초점 관리라고 합니다. 다음은 초점 관리를 보여주는 예제 구현이 포함된 일부 ARIA 설계 패턴입니다:

6.2 식별 가능하고 예측 가능한 키보드 초점

이 섹션을 완료하기 위한 작업은 issue 217에서 추적됩니다.

키보드로 조작할 경우, 좋은 경험의 두 가지 필수 요소는 키보드 초점의 위치를 쉽게 식별할 수 있고 탐색 키가 눌린 후 초점이 놓인 위치를 예측 할 수 있는 기능입니다. 다음 요인들은 웹 페이지가 사용자에게 이러한 기능을 제공하는 정도에 영향을 줍니다.

  1. 초점 표시의 가시성: 사용자는 키보드 초첨 표시를 다른 시각적 디자인 기능과 쉽게 구별 할 수 있어야 합니다. 마우스 사용자가 마오스 포인터를 찾기 위해 마우스를 움직이는 것 처럼, 키보드 사용자는 움직임을 보기 위해 탐색 키를 눌러 볼 수 있습니다. 초점 이동에 대한 시각적 변화가 감지하기 어려우면, 많은 사용자들은 초점을 잃어버리고 조작 할 수 없게 됩니다. 작성자들은 브라우저에서 제공되는 기본 초점 표시기를 사용하는 것이 좋습니다. 기본값을 재정의하려면 다음을 고려하세요:
    • 어떤 것들은... 고대비 모드에서 색상과 그라디언트가 사라질 수 있습니다.
    • 사용자는 초첨 vs 선택 그리고 이중 초점의 인식에 기술된 대로 초점과 선택 사이를 쉽게 구별할 수 있어야 합니다. 특히, 선택된 엘리먼트들을 포함하는 컴포넌트가 초점을 포함하고 있지 않은 경우.
    • ... 다른 추가 고려 사항들 ...
  2. 초점의 지속성: 유저 인터페이스 내에 활성화 된 컴포넌트가 항상 있고 (document.activeElement가 null이 아니거나 body 엘리먼트가 아닌) 활성 엘리먼트는 시각적인 초점 표시기를 가져야 하는 것이 필수적입니다. 작성자는 현재 활성 엘리먼트에 영향을 주는 이벤트를 관리하여 초점이 여전히 표시되고 논리적으로 이동하도록 해야 합니다. 예를 들어, 사용자가 대화 상자를 닫거나 목록에서 항목을 삭제하는 것과 같이 파괴적인 작업을 수행하는 경우, 활성 엘리먼트는 숨겨지거나 DOM에서 제거될 것입니다. 이러한 이벤트가 대화상자를 발생시킨 버튼이나 삭제된 항목 다음의 목록 항목으로 초점을 설정하지 않으면, 브라우저는 body 엘리먼트로 초점을 설정하여, 사실상 유저 인터페이스 내에서 초점을 잃게 만듭니다.
  3. 이동의 예측 가능성: 키보드 인터페이스의 사용성은 사용자가 탐색 키를 누른 이후 초점이 어디로 놓일 지 얼마나 손쉽게 추측할 수 있는가에 따라 크게 영향을 받습니다. 예측 가능성을 최적화 하는 몇 가지 가능한 접근 방식은 다음과 같습니다:
    • 페이지 언어의 읽기 순서와 일치하는 패턴으로 초점을 이동시킵니다. 예를 들어, 왼쪽에서 오른쪽 방향의 언어에서는 왼쪽에서 오른쪽으로, 위에서 아래로 초점이 이동하는 탭 시퀀스를 만드세요.
    • 다른 섹션으로 초점을 이동시키기 전에 페이지의 섹션의 모든 엘리먼트를 탭 시퀀스에 포함시키세요. 예를 들어, 왼쪽 사이드 바, 가운데 영역, 오른쪽 사이드 바에 콘텐트가 있는 여러 열을 가진 페이지에서, 가운데 열의 첫 번째 초점을 얻을 수 있는(focusable) 엘리먼트로 초점을 이동시키기 전에 왼쪽 사이드 바의 모든 엘리먼트를 포함하는 탭 시퀀스를 만드세요.
    • 탭 시퀀스에서 연속된 두 엘리먼트간의 거리가 중요한 경우, 뒤로 돌아가는 것으로 인지되는 움직임을 피하세요. 예를 들어, 왼쪽에서 오른쪽 방향의 언어를 가진 페이지에서, 메인 콘텐트의 우측 하단에 있는 마지막 엘리먼트에서 왼쪽 사이드바의 상위 엘리먼트로 점프하는 것은, 특히 시야가 좁은 사용자에게, 예측하기 어렵고 따라가기가 더 어렵습니다.
    • 사이트 전체적으로 일관적인 패턴을 따르세요. 유사한 페이지에 유사한 초점 이동 패턴이 있을 때 키보드 경험은 더 예측 가능합니다.
    • 다음과 같은 경우를 제외하고 페이지가 로드 될 때 초기 초점을 설정하지 마세요:
      • 페이지가 로드 된 직후 거의 모든 사용자가 사용하는 단일의 주요 기능만을 제공하는 경우
      • 어느 사용자든 페이지를 자주 사용할 가능성이 높은 경우

6.3 초점 vs 선택, 이중 초점 인식

경우에 따라, 동시에 한 페이지에 두 엘리먼트가 초점을 가지는 것처럼 나타날 수 있습니다. 예를 들어, 다중 선택 목록상자에서, 옵션 항목이 선택되는 경우 회색으로 표시 될 것입니다. 그러나, 초점 표시기는 선택 될 수 있는 다른 옵션 항목으로 여전히 이동 될 수 있습니다. 마찬가지로, 사용자가 탭 목록에서 탭을 활성화시키면, 선택된 상태가 탭에 설정되고 시각적 모양이 변경됩니다. 하지만 사용자는 탭이 선택 된 모양과 상태를 유지하면서 페이지의 다른 곳으로 초점 포시기를 이동하면서 여전히 탐색 할 수 있습니다.

초점과 선택은 상당히 다릅니다. 키보드 사용자의 관점에서, 초점은 마우스 포인터와 같은 포인터 입니다; 탐색 경로를 추적합니다. 초점 포인트는 항상 하나 뿐이며 모든 작업은 초점 포인트에서 이루어집니다. 반면에, 선택은 목록상자, 트리, 탭 목록과 같은 일부 위젯에서 수행될 수 있는 작업입니다. 위젯이 단 한 개 선택만 지원하는 경우, 단 한 개 항목만 선택 가능하고 초점이 위젯 내부를 이동할 때 선택 된 상태가 단순히 초점을 따라가는 경우가 많습니다. 즉, 일부 위젯에서, 초점 이동이 선택 작업을 수행 할 수도 있습니다. 하지만, 위젯이 다중 선택을 지원하는 경우, 선택된 상태는 한 개 이상이 될 수 있고, 초점 이동에 대한 키는 선택을 수행하지 않습니다. 일부 다중 선택 위젯은 초점 이동과 선택 변경 키 명령을 지원하지만, 이러한 키는 일반 탐색 키와는 다릅니다. 마지막으로 초점이 선택된 엘리먼트를 포함하는 위젯을 떠날 때, 선택 된 상태는 지속됩니다.

개발자 관점에서, 차이점은 간단합니다 -- 초점을 얻은 엘리먼트는 활성 엘리먼트 (document.activeElement)입니다. 선택된 엘리먼트는 aria-selected="true"를 가지는 엘리먼트입니다.

초점과 선택 된 상태와 관련하여, 디자이너와 개발자에게 중요한 고려사항은 다음과 같습니다:

바로 위 "시각적으로 구별"에 대해서 한 가지 언급해보면, 단순히 "디자이너의 눈으로 보기에" 구별되는게 아니라, 색맹·색약·저시력자의 눈에도 시각적으로 구분이 가능해야 함을 의미한다.

6.4 초점을 따라 자동으로 선택되게 하는 시기 결정

탭 목록이나 단일 선택 목록상자와 같이 단 하나의 엘리먼트만 선택 될 수 있는 복합 위젯에서, 초점 이동은 초점을 얻은 엘리먼트가 선택 된 엘리먼트가 되게 할 수 있습니다. 이를 초점을 따라 선택 되도록 하는 것이라고 합니다. 초점을 따라 선택 되도록 하는 것은 종종 사용자에게 유익하지만, 일부 상황에서는 접근성에 매우 해롭습니다.

예를 들어, 탭 목록에서, 선택 상태는 패널이 노출되어 있음을 나타내는데 사용 됩니다. 따라서, 탭 목록에서 선택이 초점을 따르는 경우, 한 탭에서 다른 탭으로 초점 이동은 자동으로 노출되는 패널을 변경시킵니다. DOM에 패널의 콘텐츠가 존재한다면, 새로운 패널의 노출은 거의 즉시 이루어집니다. 6개 탭 중 4번째 탭을 노출시키기 원하는 키보드 사용자는 오른쪽 키를 3번 빠르게 눌러 그렇게 할 수 있습니다. 그리고 탭의 레이블을 탐색하여 인식하는 스크린리더 사용자는 대기 시간 없이 전체 탭 목록을 효율적을 읽을 수 있습니다.

반면에, 새로운 패널을 노출시키는 것이 네트워크 요청을 발생시키고 페이지가 갱신(refresh) 될 수 있는 경우, 초점을 따라 자동으로 선택되게 하는 것은 키보드와 스크린리더 사용자의 경험을 파괴할 수 있습니다. 이 경우, 네 번째 탭을 표시하거나 탭 목록을 읽는 것은 사용자가 각 초점의 이동과 함께 상당한 지연 시간을 경험하기 때문에 지루하고 시간을 낭비하는 작업이 됩니다. 게다가, 새 탭이 페이지를 갱신하면 사용자는 새 페이지가 로드 될 때까지 기다려야 할 뿐만 아니라 탭 목록으로 초점을 다시 보내야 합니다.

선택이 초점을 따르지 않는 경우, 사용자는 EnterSpace 키를 눌러 선택 된 엘리먼트를 변경합니다.

6.5 컴포넌트 간 키보드 탐색 (탭 시퀀스)

여기서 컴포넌트(component)는 구성 요소로의 의미입니다. Front-End 개발에서 이야기하는 컴포넌트 단위와는 차이가 있습니다.

6.1 핵심 키보드 탐색 규칙 섹션에 설명된 대로, 모든 대화형 UI 컴포넌트는 키보드를 통해 접근 할 수 있어야 합니다. 이것은 탭 시퀀스에 그것들을 포함시키거나 탭 시퀀스에 있는 컴포넌트에 (예를 들어, 복합 컴포넌트의 일부) 접근 할 수 있도록 함으로써 가장 잘 달성됩니다. 이 섹션에서는 탭 시퀀스를 만들고 관리하는 방법을 다루고, 이후 섹션에서는 컴포넌트 내에 포함된 초점을 얻을 수 있는(focusable) 엘리먼트가 키보드 접근 가능하도록 하는 내용을 다룹니다.

[HTML] tabindex와 [SVG2] tabindex 어트리뷰트는 탭 시퀀스에 엘리먼트를 추가하거나 제거하는데 사용될 수 있습니다. tabindex 값은 탭 시퀀스 순서에도 영향을 미칠 수도 있지만, 그 목적으로 tabindex를 사용하지 않는 것을 강력히 권합니다.

HTML 에서, 웹 페이지의 기본 탭 시퀀스는 maxOS에서는 form 엘리먼트만 포함하는 것을 제외하고, 링크와 form 엘리먼트만 포함합니다. macOS 시스템 환경 설정에는 탭 키가 모든 초점을 얻을 수 있는(focusable) 엘리먼트로 초점을 이동할 수 있는 키보드 설정이 포함되어 있습니다.

탭 시퀀스의 기본 엘리먼트 순서는 DOM의 엘리먼트 순서입니다. DOM 순서는 또한 스크린리더 낭독 순서를 결정합니다. 이는 6.2 식별 가능하고 예측 가능한 키보드 초점에 기술된 대로 키보드 탭 시퀀스와 스크린리더 낭독 순서를 정렬되고, 논리적이고, 예측 가능하게 유지하는데 중요합니다. 읽기 순서와 함께 정렬을 유지하면서 탭 시퀀스 순서를 조작하는 모든 브라우저에서 현재 사용 가능한 가장 강력한 방법은 DOM에서 엘리먼트를 재정렬 하는 것입니다.

tabindex 어트리뷰트 값은 다음 효과를 가집니다.

tabindex 가 없거나 유효한 값을 가지지 않는 경우
엘리먼트는 기본 초점 동작을 가집니다. HTML에서, form 컨트롤과 HREF 어트리뷰트를 가진 앵커만 탭 시퀀스에 포함됩니다.
tabindex="0"
엘리먼트 DOM에서의 위치에 따라 탭 시퀀스에 포함됩니다.
tabindex="-1"
엘리먼트는 탭 시퀀스에 포함되지 않지만 element.focus()로 초점을 얻을 수 있습니다.
tabindex="X", X는 1 <= X <= 32767 범위의 정수
이 값을 사용하지 않는 것을 강력히 권합니다. 엘리먼트는 tabindex의 값에 따라 탭 시퀀스에 배치됩니다. tabindex 값이 0인 엘리먼트와 기본적으로 초점을 얻을 수 있는(focusable) 엘리먼트들은 tabindex 값이 1 이상인 엘리먼트 이후 시퀀스에 있게 됩니다.

6.6 컴포넌트 내부 키보드 탐색

6.1 핵심 키보드 탐색 규칙 섹션에 기술된 대로, 탭 시퀀스는 단 하나의 복합 UI 컴포넌트의 초점을 얻을 수 있는(focusable) 엘리먼트만 포함해야 합니다. 일단 복합 컴포넌트가 초점을 포함하면, TabShift + Tab 이외의 키들로 사용자가 복합 컴포넌트의 초점을 얻을 수 있는(focusable) 엘리먼트 간에 초점 이동을 할 수 있게 합니다. 작성자는 복합 컴포넌트 내부에서 초점을 이동시키는 키를 자유롭게 선택할 수 있지만, 3. 설계 패턴과 위젯에 설명 된 대로 공통 GUI 운영 체제의 유사한 컴포넌트와 동일한 키 바인딩을 사용하는 것을 강력히 권합니다.

Tab 키 이벤트의 결과로 초점을 얻을 때 복합 컴포넌트 내 초점을 얻을 위치에 대한 규칙은 복합 컴포넌트의 유형에 따라 다릅니다. 일반적으로 다음 중 하나입니다.

다음 섹션에서는 복합 엘리먼트에서 초점을 관리하기 위한 두가지 전략: 이동(roving) tabindex 생성과 aria-activedescendant 속성(property) 사용에 대해 설명합니다.

6.6.1 이동(roving) tabindex를 사용하여 컴포넌트에서 초점 관리

복합 UI 컴포넌트에서 초점을 관리하기 위해 이동 tabindex를 사용하는 경우, 탭 시퀀스에 포함 되어야 할 엘리먼트는 0 값의 tabindex를 가지고 복합 컴포넌트의에 포함 된 다른 모든 초점을 얻을 수 있는(focusable) 엘리먼트는 -1 값의 tabindex를 가집니다. 이동 tabindex 전략에 대한 알고리즘은 다음과 같습니다.

  • 컴포넌트 컨테이너가 로드되거나 생성될 때, 초기에 탭 시퀀스에 포함되는 엘리먼트에 tabindex="0"를 설정하고 포함 된 다른 모든 초점을 얻을 수 있는(focusable) 엘리먼트에 tabindex="-1"을 설정하세요.
  • 컴포넌트가 초점을 포함하고 사용자가 컴포넌트 내에서 방향키와 같이 초점을 이동시키는 탐색 키를 누를 때:
    • tabindex="0"를 가진 엘리먼트에 tabindex="-1"를 설정하세요.
    • 키 이벤트의 결과로 초점을 얻게 될 엘리먼트에 tabindex="0"를 설정하세요.
    • tabindex="0"를 가진 엘리먼트에 element.focus()로 초점을 설정하세요.
  • 설계가 다음에 사용자가 Tab이나 Shift+Tab으로 복합 컴포넌트 내로 초점을 이동시킬 때 특정 엘리먼트가 초점을 얻도록 요구하는 경우, 복합 컴포넌트가 초점을 잃을 때 그 대상 엘리먼트가 tabindex="0"를 가지고 있는지 확인하세요. 그렇지 않으면, 대상 엘리먼트에 tabindex="0"를 설정하고 이전에 tabindex="0"를 가졌던 엘리먼트에 tabindex="-1"을 설정하세요.

초점을 관리하기 위해 aria-activedescendant 보다 이동 tabindex 사용의 한 가지 이점은 유저 에이전트가 새롭게 초점을 얻은 엘리먼트를 뷰(view)로 스크롤 한다는 것입니다.

6.6.2 aria-activedescendant를 사용하여 복합 컴포넌트에서 초점 관리

컴포넌트 컨테이너가 aria-activedescendant 속성을 지원하는 ARIA 역할(role)을 가지는 경우, tabindex 어트리뷰트를 관리하고 컨테이너 내에 초점을 얻을 수 있는(focusable) 엘리먼트 간에 DOM 초점을 이동시킬 필요가 없습니다. 대신, 컨테이너 엘리먼트만 탭 시퀀스에 포함되면 됩니다. 컨테이너가 DOM 초점을 가지는 경우, 컨테이너의 aria-activedescendant 값은 위젯에서 활성화 되는 엘리먼트를 보조 기술에 알려줍니다. 보조 기술은 DOM 초점이 aria-activedescendant 속성(property)를 가진 엘리먼트에 있다 하더라도 활성화 된 것으로 참조되는 엘리먼트를 초점을 얻은 엘리먼트라고 간주할 것입니다. 그리고, aria-activedescendant 값이 변경될 때, 보조 기술은 DOM 초점이 실제로 이동될 때 받는 것과 동일한 초점 변경 이벤트를 받을 것입니다.

초점 관리의 aria-activedescendant 사용 방법 단계는 다음과 같습니다.

  • aria-activedescendant를 지원하는 역할(role)을 가진 컨테이터 엘리먼트가 로드되거나 생성될 때, 다음을 보장하세요:
    • 컨테이너 엘리먼트가 6.5 컴포넌트 간 키보드 탐색 (탭 시퀀스)에 기술된 대로 탭 시퀀스에 포함되거나, 이동 tabindex를 구현하는 복합 컴포넌트의 초점을 얻을 수 있는(focusable) 엘리먼트입니다.
    • IDREF가 위젯이 초점을 받을 때 컨테이너 내의 활성으로 식별되어야 하는 엘리먼트의 ID인 aria-activedescendant="IDREF"가집니다. 참조 된 엘리먼트는 아래 설명된 DOM 관계 요구 사항을 충족해야 합니다.
  • 컨테이너 엘리먼트가 DOM 초점을 얻을 때, 활성 엘리먼트에 시각적 초점 표시기를 그리고 활성 엘리먼트가 뷰(view) 안으로 스크롤 되도록 보장하세요.
  • 복합 위젯이 초점을 포함하고 사용자가 위젯 내에서 방향키와 같은 초점을 이동하는 탐색 키를 누를 때:
    • 보조 기술에 활성으로 보고되어야 하는 엘리먼트를 참조하도록 컨테이너에 aria-activedescendant의 값을 변경시킵니다
    • 필요하다면, 시각적 초점 표시기를 이동시키고 뷰(view) 안으로 활성 엘리먼트를 스크롤 되게 하세요.
  • 설계가 다음에 사용자가 Tab이나 Shift+Tab으로 복합 컴포넌트 내로 초점을 이동시킬 때 특정 엘리먼트가 초점을 얻도록 요구하는 경우, 컨테이너가 초점을 잃을 때 aria-activedescendant가 그 대상 엘리먼트를 가리키고 있는지 확인하세요. 그렇지 않으면, aria-activedescendant를 대상 엘리먼트를 가리키도록 설정하세요.

aria-activedescendant에 대한 명세는 aria-activedescendant 어트리뷰트를 가진 초점을 얻은 엘리먼트와 어트리뷰트 값에 의해 활성으로 참조되는 엘리먼트 간의 DOM 관계에 중요한 제한 사항을 둡니다. 다음 세 가지 조건 중 하나가 충족되어야 합니다.

  1. 활성으로 참조 된 엘리먼트는 초점을 얻은 참조 하는 엘리먼트의 DOM 후손입니다.
  2. 초점을 얻은 참조 하는 엘리먼트는 aria-owns 속성(property)에 활성으로 참조 되는 엘리먼트의 ID를 포함하도록 지정된 값을 가집니다.
  3. 초점을 얻은 엘리먼트가 combobox, textbox, 또는 searchbox 역할(role)을 가지고 있고 aria-activedescendant를 지원하는 역할(role)을 가지면서 다음 중 하나에 해당하는 엘리먼트를 참조하는 aria-controls 속성(property)을 가집니다:
    1. 활성으로 참조 된 엘리먼트가 제어 엘리먼트의 후손이거나
    2. 제어 엘리먼트는 활성으로 참조되는 엘리먼트의 ID를 포함하는 aria-owns 속성(property)에 지정된 값을 가집니다.

6.7 비활성화 된 컨트롤의 초점 가능성(focusability)

기본적으로 비활성화 된 HTML input 엘리먼트는 탭 시퀀스에서 제거됩니다. 대부분의 상황에서, 일반적인 예상은 비활성화 된 인터랙티브 엘리먼트는 초점을 얻을 수 없다는 것입니다. 하지만, 비활성화 된 엘리먼트가 초점을 얻을 수 있는 것이 일반적인 상황이 있습니다, 특히 복합 위젯 내부에서. 예를 들어, 3.15 Menu or Menu bar 패턴에서 보여지는 것처럼, 비활성화 된 항목이 방향키로 메뉴를 탐색할 때 초점을 얻을 수 있습니다.

비활성화 된 엘리먼트에서 초점 가능성을 제거하는 것은 사용자에게 장점과 단점을 모두 제공할 수 있습니다. 키보드 사용자가 비활성화 된 엘리먼트를 건너 뛰는 것을 허용하는 것은 일반적으로 작업을 완료하는데 필요한 키 누름 회수를 줄입니다. 하지만, 비활성화 된 엘리먼트로의 이동으로부터 초점을 차단하는 것은 초점 이동을 통해 "보는" 스크린리더 사용자에게 해당 엘리먼트의 존재를 숨기게 될 수 있습니다.

작성자는 비활성화 된 엘리먼트의 초점 가능성에 대해 일관된 규칙을 채택하도록 권장됩니다. 이 지침의 예는 일반적인 사례를 반영하고 우선순위를 조정하려고 시도하는 다음 규칙을 채택합니다.

  1. 활성화 되었을 때 탭 시퀀스에 있는 엘리먼트의 경우, 비활성화 될 때 탭 시퀀스에서 제거합니다.
  2. 다음 복합 위젯 엘리먼트의 경우, 비활성화 될 때 초점을 얻을 수 있도록 유지합니다:
  3. 툴바에 포함 된 엘리먼트의 경우, 발견 가능성(discoverability)이 중요하다면 초점을 얻을 수 있도록 유지합니다. 이 판단에 도움이 되는 두 가지 예가 있습니다.
    1. 목록의 항목을 이동시키거나, 제거하거나, 추가하기 위한 버튼을 가지는 툴바가 "위", "아래", "추가", "제거" 버튼을 포함합니다. 목록의 첫 번째 항목이 선택 된 경우 "위" 버튼이 비활성화 되고 초점 가능성이 제거됩니다. "아래" 버튼의 존재가 주어졌다면, "위" 버튼의 발견 가능성(discoverability)은 문제 되지 않습니다.
    2. 편집기의 툴바는 클립보드가 비어있거나 기능이 클립보드의 현재 콘텐츠에 적합하지 않다면 비활성화 되어있는 특별한 스마트 기능 세트를 포함합니다. 기능을 발견할 수 있는 것이 주로 그것들이 툴바에 존재하는 가를 통해 이루어지는 경우 비활성화 된 버튼이 초점을 얻을 수 있도록 유지하는 것이 도움이 될 수 있습니다.

비활성화 된 엘리먼트를 키보드 초점 경로에 포함시키는 것의 영향을 완화시키는 한 가지 설계 기법은 6.9 키보드 단축키에 기술 된 대로 적절한 단축키를 사용하는 것입니다.

6.8 공통 기능에 대한 키 할당 규칙

다음의 키 할당은 전통적으로 연관된 기능이 적절한 모든 컨텍스트에서 사용될 수 있습니다. Windows와 Linux 플램폼과 관련 된 할당은 macOS에서 실행되는 브라우저에서 구현되고 사용될 수 있지만, macOS 기기에서 실행되는 브라우저에서 macOS 할당으로 그것들을 대체하는 것은 그 사용자들에 대해 키보드 인터페이스를 보다 쉽게 찾게 할 수 있고 직관적으로 만들 수 있습니다. 경우에 따라, 시스템이나 브라우저 키보드 충돌을 방지하는데 도움이 될 수도 있습니다.

기능 Windows/Linux 키 macOS 키
컨텍스트 메뉴 열기 Shift + F10
클립보드에 복사 Control + C Command + C
클립보드에서 붙여 넣기 Control + V Command + V
클립보드로 잘라내기 Control + X Command + X
마지막 작업 되돌리기 Control + Z Command + Z
작업 다시 실행 Control + Y Command + Shift + Z

6.9 키보드 단축키

효과적으로 설계 된 경우, 엘리먼트에 초점을 주거나, 위젯을 활성화 시키는 키보드 단축키는 페이지나 사이트의 자주 사용되는 기능의 사용성을 극적으로 향상시킬 수 있습니다. 이 섹션은 다음을 포함하여 효율성에 가장 큰 영향을 미치는 키보드 단축키 설계와 구현 요소에 대해 설명합니다:

  1. 키보드 단축키가 키보드 인터페이스를 확장시키는 방법과 특정 단축키가 초점을 이동시키는지, 기능을 수행하는지, 혹은 둘 모두인지 여부에 대한 이해.
  2. 키 할당과 보조 기술, 브라우저, 운영 체제와의 할당 충돌 방지.
  3. 키 할당 노출과 문서화.

6.9.1 키보드 단축키의 범위와 동작 설계

이 섹션은 키보드 단축키를 할당할 엘리먼트 및 기능과 각 단축키에 제공할 동작을 결정할 때 다음 요소에 대해 설명합니다:

  1. 탐색을 통한 발견 보장; 키보드 단축키는 표준 키보드 접근을 대체하는 것이 아니라 향상시키는 것입니다.
  2. 다음 동작 중 효과적인 것을 선택:
    1. 탐색: 엘리먼트로 초점 이동.
    2. 활성화: 초점을 가지지 않고 보이지 않을 수도 있는 엘리먼트와 연관된 작업 수행.
    3. 탐색 및 활성화: 엘리먼트로 초점을 이동하고 그것을 활성화.
  3. 효율성(efficiency)과 인지 부하(cognitive load)의 균형: 단축키가 없으면 효율성이 저하될 수 있는 반면 너무 많은 단축키는 인지 부하를 증가시키고 경험을 혼잡하게 만들 수 있습니다.
6.9.1.1 탐색을 통한 기본 접근 보장

단축키를 할당하기 전에, 기능(feature)과 단축키가 할당되는 기능(function)이 키보드 단축키 없이도 접근 가능함을 보장하는 것이 중요합니다. 다시 말해, 키보드 단축키에 대한 대상이 될 수 있는 모든 엘리먼트는 다음에 설명된 방법을 사용하여 키보드를 통해 초점을 얻을 수 있어야 합니다:

탐색을 통한 접근에 대한 대체로 키보드 단축키를 사용하지 마세요. 이것은 다음의 이유로 전체 키보드 접근에 필수적입니다:

  1. 기능을 만들고 단축키를 쉽게 찾을 수 있게 하는 주요 수단이 대상 엘리먼트가 초점을 얻을 수 있게 하고 엘리먼트 자체에 키 할당을 표시하도록 하는 것입니다.
  2. 키보드를 사용하는 사람들이 인터페이스를 사용하는 데 필요한 키를 학습하기 위해 문서를 읽어야 하는 경우, 인터페이스는 기술적으로는 일부 접근성 표준을 충족할 수 있지만 실제로는 그러한 문서가 존재한다는 사실을 알고 있고 가용한 추가 시간이 있으며, 필요한 정보를 기억할 수 있는 능력을 가진 비교적 적은 수의 사람만이 접근할 수 있습니다.
  3. 키보드 인터페이스에 의존하는 모든 장치가 키보드 단축키를 지원할 수 있는 것은 아닙니다.
6.9.1.2 적절한 단축키 동작 선택

다음 규칙은 키보드 단축키에 대한 가장 유리한 동작을 식별하는데 도움이 될 수 있습니다.

  • 기본 목표가 탐색을 보다 효과적으로 만드는 것인 경우, 예를 들어 사용자가 Tab이나 방향키를 눌려야 하는 횟수를 줄이는 것인 경우 초점을 이동시키세요. 이 동작은 일반적으로 텍스트 상자, 툴바 또는 목록상자, 트리, 그리드, 메뉴바와 같은 복합 컴포넌트에 단축키를 할당 할 경우 예상됩니다. 이 동작은 또한 메인 콘텐츠나 complementary 랜드마크 섹션과 같은 페이지의 섹션으로 초점을 이동하는데에도 유용합니다.
  • 기능의 대상 콘텍스트가 초점을 포함하는 콘텍스트 인 경우 초점 이동 없이 엘리먼트를 작동 시키세요. 이 동작은 명령 버튼 및 메뉴를 통해서 접근 가능한 "저장" 옵션 항목과 같이 보이지 않는 엘리먼트에 연관 된 기능에 가장 일반적입니다. 예를 들어, 초점이 목록상자의 옵션 항목에 있고 툴바가 옵션 항목을 이동시키고 제거하는 버튼을 포함하는 경우, 사용자가 툴바 내 버튼 중 하나에 대한 단축 키를 누를 때 목록상자에 초점을 유지하는 것이 가장 좋습니다. 이 동작은 수행 된 작업의 확인을 제공하고 여러 명령을 수행하는 것을 더 효율적으로 만들 수 있기 때문에 스크린리더 사용자에게 특히 중요할 수 있습니다. 예를 들어 스크린리더 사용자가 "위" 버튼에 대한 단축키를 누를 때, 사용자는 여전히 초점을 가지고 있기 때문에 목록의 옵션 항목의 새로운 위치를 들을 수 있습니다. 마찬가지로, 사용자가 옵션 항목을 삭제하는 단축키를 누를 때, 사용자는 목록의 다음 옵션 항목을 들을 수 있고 즉시 다시 삭제 단축키를 누를지를 결정할 수 있습니다.
  • 단축키 대상이 단일 기능을 가지고 그 기능의 컨텍스트가 대상과 동일할 경우 초점을 이동하고 활성화 시키세요. 이 동작은 단축키가 메뉴나 대화상자를 여는 버튼이나, 체크상자, 내비게이션 링크나 버튼에 할당 될 경우 일반적입니다.
6.9.1.3 단축키를 추가할 위치 선택

이 섹션에 대한 초안 콘텐트 작업은 issue 219에서 추적됩니다.

키보드 인터페이스를 설계할 때 첫 번째 목표는 기본 키보드 내비게이션 지원만으로 간단하고, 효율적이며, 직관적인 조작입니다. 키보드 인터페이스의 기본 조작이 비효율적인 경우, 키보드 단축키를 구현하여 최적화 되지 않은 레이아웃이나 명령 구조와 같은 근본적인 설계 이슈에 대한 보완을 위한 시도하는 것은 사용자 불만을 줄일 수 없을 것입니다. 이것의 실질적인 의미는, 대부분의 잘 설계된 유저 인터페이스에서는 최적화 된 사용성을 만들기 위해 키보드 단축키를 통해 접근 할 수 있어야 하는 기능의 비율이 높지 않다는 것입니다. 많은 단순한 유저 인터페이스에서, 키보드 단축키는 완전히 불필요할 수 있습니다. 그리고, 키보드 단축키가 너무 많은 유저 인터페이스에서는, 가장 유용한 단축키를 기억하기 어렵게 만드는 인지 부하를 발생시킵니다.

키보드 단축키를 할당을 결정할 때 다음 사항을 고려하세요:

  1. 작성 예정...

6.9.2 키보드 단축키 할당

할당할 단축키를 선택할 때 고려해야 할 많은 요소들이 있습니다.

  • 니모닉(예를 들어, "저장"을 위해 Control + S)을 사용하거나 논리적 혹은 공간적 패턴을 따라 학습하고 기억하기 쉽게 만듦
  • 사용 가능한 키와 동작 방식의 차이, 그리고 니모닉에 영향을 줄 수 있는 언어 고려사항을 포함하여 인터페이스를 지역화
  • 보조 기술, 브라우저, 운영 체제에서 사용되는 키 할당과의 충돌 방지 및 관리

학습과 기억을 지원하는 단축키 체계를 설계하는 방법은 이 지침의 범위를 벗어납니다. 단축키 체계가 광범위 하지 않은 이상, 브라우저와 같은 일반적인 데스크탑 소프트웨어에서 익숙한 개념을 모방하는 것으로 충분합니다. 마찬가지로 지역화가 중요하지만, 이를 해결하는 방법을 설명하는 것은 그 토픽을 전문으로 하는 다른 리소스에 맡깁니다.

이 섹션의 나머지 부분에서는 키 할당 충돌과 관련된 요구 사항과 우려 사항을 조정하는 지침을 제공합니다. 일반적으로 키 할당은 사용자의 운영 체제, 브라우저, 보조 기술의 기능에 할당 된 키와 충돌하지 않는 경우가 이상적입니다. 충돌은 사용자에게 필수적인 기능에 대한 유효한 접근을 차단할 수 있고, 충돌의 더할 수 없이 나쁜 상황은 사용자를 가두어 버릴 수 있습니다. 동시에, 의도적인 충돌이 유용한 상황도 있습니다. 그리고 방대한 운영 체제, 브라우저, 보조 기술 키를 감안할 때, 일부 충돌이 존재하지 않는 다는 것은 거의 불가능합니다. 따라서 의도적이든 알려지지 않았든, 충돌의 영향을 완화하는 전략을 채택하는 것도 중요합니다.

Note

다음 섹션에서, meta키는 Windows 호환 키보드의 Windows와 MacOS 호환 키보드의 Command키를 가리킵니다.

6.9.2.1 운영 체제 키 충돌

어플리케이션 및 창 관리, 디스플레이 및 사운드 제어와 같은 시스템 수준 기능을 수행하는 키와의 충돌을 방지하는 것이 중요합니다. 일반적으로, 다음과 같은 유형의 할당을 자제함으로써 이를 달성 할 수 있습니다.

  1. 임의의 보조 키(modifier key) + Tab, Enter, Space, Escape 중 하나.
  2. Meta 키 + 다른 단일 키(single key) (예외가 있지만, 이 키들은 운영체제 버전에 따라 변경될 수 있으므로 위험할 수 있습니다.).
  3. Alt + 기능 키.

"보조 키(modifier key)"는 Shift, Ctrl, Alt 키를 의미합니다.

또한, 브라우저를 포함하여 대부분의 어플리케이션이 일반적으로 지원하는 몇 가지 중요한 어플리케이션 수준 기능이 있습니다. 다음이 포함됩니다:

  1. 확대
  2. 복사/붙여넣기
  3. ... to be continued ...
6.9.2.2 보조 기술 키 충돌

보조 기술은 통틀어 수천 개의 키 할당을 취했지만 충돌을 피하는 것은 비교적 쉽습니다. 이는 보조 기술이 운영 체제 및 어플리케이션과의 충돌을 피하는 키 할당 체계를 개발해야 했기 때문입니다. 특정 키를 키 명령을 고유하게 정의하는 보조 키로 가로채는 방식으로 이를 수행합니다. 예를 들어, 많은 보조 기술들이 보조 키로 Caps Lock를 사용합니다.

다음 유형의 할당을 피하여 보조 기술 키 충돌을 피하세요.

  1. Caps Lock + 다른 키 조합.
  2. Insert + 다른 키 조합.
  3. Scroll Lock + 다른 키 조합.
  4. macOS only: Control+Option + 다른 키 조합.
6.9.2.3 브라우저 키 충돌

브라우저 키보드 체계에는 상당한 유사성이 있지만 체계 내의 패턴은 동질적이지 않습니다. 따라서 브라우저 키 할당과의 충돌을 피하는 것이 더 어렵습니다. 충돌의 영향은 거의 모든 기능 -- 키보드 접근 가능한 메뉴와 키보드 단축키에 대한 두 가지 경로를 사용할 수 있기 때문에 다소 완화되지만, 많이 사용되는 기능에 대한 단축키와의 충돌을 피하는 것이 중요합니다. 다음 단축키와의 충돌을 방지하기 위해 각별히 주의하세요:

  1. 주소 또는 위치바
  2. 알림 바
  3. 페이지 새로 고침
  4. 북마크와 히스토리 기능
  5. 기능 찾기
6.9.2.4 의도적인 키 충돌

키 충돌을 피하는 것이 일반적으로 바람직하지만, 브라우저 기능과 의도적으로 충돌하는 것이 적절하거나 심지어 바람직한 상황이 있습니다. 다음 조건의 조합이 유발하는 경우 발생할 수 있습니다:

  • 웹 어플리케이션에는 브라우저 기능과 유사한 자주 사용되는 기능이 있습니다.
  • 사용자가 종종 웹 어플리케이션 기능을 실행하려고 합니다.
  • 사용자가 브라우저 기능을 거의 실행하지 않습니다.
  • 브라우저 기능에 대한 효율적인 대체 경로가 있습니다.

예를 들어, 초점이 편집기에 있을 경우 사용 가능한 저장 키를 생각해보세요. 대다수의 브라우저가 ... to be continued ...

7. Grid와 Table 속성(property)

그리드 또는 테이블을 완전히 나타내고 설명하려면, 그리드 패턴이나 테이블 패턴에 기술 된 역할(role)을 사용하여 헤더, 행(row), 셀(cell)을 해석하는 것 외에도 보조 기술이 다음을 결정할 수 있어야 합니다:

브라우저는 자동으로 렌더링 된 DOM을 기준으로 그리드나 테이블의 행과 열 개수로 접근 가능한 트리를 채웁니다. 하지만, 데이터가 너무 커서 완전히 렌더링 할 수 없는 경우와 같이 DOM이 전체 그리드나 테이블이 포함하지 않는 많은 상황이 있습니다. 게다가, 건너 뛴 열이나 행 및 데이터 정렬 방법과 같은 일부 정보는 DOM 구조에서 파생될 수 없습니다.

아래 섹션에서는 ARIA가 그리드와 테이블에 접근성을 제공하는 속성(property)들을 사용하는 방법을 설명합니다.

그리드와 테이블 속성(property) 정의
속성(property) 정의
aria-colcount table, grid, treegrid의 총 열 개수를 정의.
aria-rowcount table, grid, treegrid의 총 행 개수를 정의.
aria-colindex
  • table, grid, treegrid 내의 총 열 개수에 대한 셀 위치를 정의.
  • 참고: 번호 매김은 0이 아닌 1로 시작.
aria-rowindex
  • table, grid, treegrid 내의 행 총 개수에 대한 셀 위치를 정의.
  • 참고: 번호 매김은 0이 아닌 1로 시작.
aria-colspan table, grid, treegrid 내의 셀 또는 그리드셀에 합쳐진 열의 수 정의 .
aria-rowspan table, grid, treegrid 내의 셀 또는 그리드셀에 합쳐진 행의 수 정의.
aria-sort 행 또는 열이 오름차순 혹은 내림차순으로 정렬 되는지 여부를 나타냅니다.

7.1 aria-rowcountaria-rowindex 사용

DOM 구조가 나타낸 행의 개수가 table, grid, treegrid에 사용 가능한 총 행 개수가 아닌 경우, aria-rowcount 속성(property)이 사용 가능한 총 행 개수를 전달하는데 사용되고, DOM에 있는 행의 행 인덱스를 식별하기 위해 aria-rowindex 속성(property)이 수반됩니다.

aria-rowcounttable, grid, treegrid 역할(role)이 있는 엘리먼트에 지정됩니다. 값은 헤더 행을 포함하여 사용 가능한 행의 총 개수와 동일한 정수입니다. 행의 총 개수를 알 수 없는 경우, -1 값이 지정 될 수 있습니다. -1 값을 사용하는 것은 사용 가능한 공급의 크기를 지정하지 않고 사용 가능한 더 많은 행을 DOM에 포함 시킬 수 있음을 나타냅니다

table, grid, treegridaria-rowcount가 사용되는 경우, aria-rowindex 속성(property) 값이 헤더 행을 포함하여 각 하위 행에 지정됩니다. aria-rowindex 값은 다음과 같은 정수입니다:

  1. 1 이상.
  2. 이전 행의 aria-rowindex 값보다 큰 값.
  3. 셀이 여러 행에 합쳐진 경우 합쳐진 첫 번째 행의 인덱스로 설정.
  4. 전체 행 수 이하.

주의! aria-rowindex의 누락 또는 부적합한 값은 보조 기술 동작에 치명적인 영향을 미칠 수 있습니다. 예를 들어, aria-rowindex에 유효하지 않은 값을 지정하거나 테이블에 모든 행이 아니라 일부에만 설정하는 것은 스크린리더 테이블 낭독 기능이 행을 건너 뛰거나 단순히 기능을 중지 시키게 할 수 있습니다.

다음 코드는 가상의 수업 목록을 포함하는 표에 aria-rowcountaria-rowindex 속성(property)의 사용을 보여줍니다.


  <!--
    aria-rowcount는 마크업에 4개의 행만 존재함에도 불구하고 그리드의 실제 크기가
    463개 행이라고 보조 기술에 알려줍니다.
  -->
  <table role="grid" aria-rowcount="463"
    aria-label="역사 101 학생 명부">
    <thead>
      <tr aria-rowindex="1">
        <th></th>
        <th>이름</th>
        <th>E-mail</th>
        <th>전공</th>
        <th>부전공</th>
        <th>학년</th>
      </tr>
    </thead>
    <tbody>
        <!--
          aria-rowindex는 이 행이 463 행 중
          51번째 행이라고 보조 기술에 알려줍니다
        -->
      <tr aria-rowindex="51">
        <td>Henderson</td>
        <td>Alan</td>
        <td>ahederson56@myuniveristy.edu</td>
        <td>경영</td>
        <td>스페인어</td>
        <td>3학년</td>
      </tr>
        <!--
          aria-rowindex는 이 행이 463 행 중
          52번째 행이라고 보조 기술에 알려줍니다.
        -->
      <tr aria-rowindex="52">
        <td>Henderson</td>
        <td>Alice</td>
        <td>ahederson345@myuniveristy.edu</td>
        <td>공학</td>
        <td>없음</td>
        <td>2학년</td>
      </tr>
        <!--
          aria-rowindex는 이 행이 463 행 중
          53번째 행이라고 보조 기술에 알려줍니다.
        -->
      <tr aria-rowindex="53">
        <td>Henderson</td>
        <td>Andrew</td>
        <td>ahederson75@myuniveristy.edu</td>
        <td>General Studies</td>
        <td>없음</td>
        <td>1학년</td>
      </tr>
    </tbody>
  </table>

7.2 aria-colcountaria-colindex사용

DOM 구조에 나타난 열 개수가 table, grid, treegrid에 사용 가능한 열의 총 개수가 아닐 경우, aria-colcount 속성(property)이 사용 가능한 열의 총 개수를 전달하는데 사용되고, DOM에 있는 열의 열 인덱스를 식별하기 위해 aria-colindex 속성(property)이 수반됩니다.

aria-colcounttable, grid, or treegrid 역할(role)이 있는 엘리먼트에 지정됩니다. 값은 사용 가능한 열의 총 개수와 동일한 정수입니다. 열의 총 개수를 알 수 없는 경우, -1 값이 지정될 수 있습니다. -1 값을 사용하는 것은 사용 가능한 공급의 크기를 지정하지 않고 사용 가능한 더 많은 열을 DOM에 포함 시킬 수 있음을 나타냅니다.

table, grid, treegridaria-colcount가 사용되는 경우, aria-colindex 속성(property) 값은 아래 기술된 대로 열이 연속되어 있는지에 따라 각 후손 행이나 후손 행의 모든 셀에 지정됩니다. aria-colindex의 값은 다음과 같은 정수입니다:

  1. 1 이상.
  2. 셀에 설정할 경우, 동일한 행 내의 이전 셀에 설정 된 모든 값보다 큰 값.
  3. 셀이 여러 열에 합쳐져 있을 경우, 합쳐진 첫 번째 열의 인덱스 값으로 설정.
  4. 전체 열 개수 이하.

주의! aria-colindex의 누락 또는 부적합한 값은 보조 기술 동작에 치명적인 영향을 미칠 수 있습니다. 예를 들어, aria-colindex에 유효하지 않은 값을 지정하거나 행의 모든 셀이 아니라 일부에만 설정하는 것은 스크린리더 테이블 낭독 기능이 셀을 건너 뛰거나 단순히 기능을 중지 시키게 할 수 있습니다.

7.2.1 열 인덱스가 연속적일 때 aria-colindex 사용

행의 모든 셀이 연속적인 정수인 열 인덱스 번호를 가지는 경우, aria-colindex가 세트의 첫 번째 열의 인덱스 번호와 동일한 값이 행 엘리먼트에 설정될 수 있습니다. 브라우저는 행의 각 셀의 열 번호를 계산합니다.

다음의 코드는 사용자에게 2 ~ 5까지의 열이 표시 된 16개 열을 가진 그리드를 보여줍니다. 열 세트가 연속적이기 때문에, aria-colindex가 각 행에 배치될 수 있습니다.

        
<div role="grid" aria-colcount="16">
  <div role="rowgroup">
    <div role="row" aria-colindex="2">
      <span role="columnheader">이름</span>
      <span role="columnheader"></span>
      <span role="columnheader">회사</span>
      <span role="columnheader">주소</span>
    </div>
  </div>
  <div role="rowgroup">
    <div role="row" aria-colindex="2">
      <span role="gridcell">Fred</span>
      <span role="gridcell">Jackson</span>
      <span role="gridcell">Acme, Inc.</span>
      <span role="gridcell">123 Broad St.</span>
    </div>
    <div role="row" aria-colindex="2">
      <span role="gridcell">Sara</span>
      <span role="gridcell">James</span>
      <span role="gridcell">Acme, Inc.</span>
      <span role="gridcell">123 Broad St.</span>
    </div></div>
</div>

7.2.2 열 인덱스가 비연속적일 때 aria-colindex 사용

행의 셀이 비연속적인 정수인 열 인덱스 번호를 가지는 경우, aria-colindex는 행의 각 셀에 설정 되어야 합니다. 다음 예제는 처음 두 열이 학생 이름을 포함하고 이후 열들이 점수를 포함하는 온라인 성적표에 대한 그리드를 보여줍니다. 이 예에서, 학생 이름이 있는 첫 두 열은 표시되고, 점수 열은 10 ~ 13 열을 표시하도록 스크롤 되었습니다. 열 3 ~ 9는 표시되지 않으므로 DOM에 없습니다.


  <table role="grid" aria-rowcount="463" aria-colcount="13">
    aria-label="역사 101에 대한 학생 성적"
    <!--
      aria-rowcount와 aria-colcount는 보조 기술에
      그리드의 실제 크기가 463개 행 x 13개 열 임을 알려주며,
      이는 마크업에서 발견되는 행과 열의 수가 아닙니다.
    -->
    <thead>
      <tr aria-rowindex="1">
        <!--
          aria-colindex는 보조기술에
          다음 열이 전체 데이터 세트의 1, 2열을 나타냄을 전달합니다.
        -->
        <th aria-colindex="1"></th>
        <th aria-colindex="2">이름</th>
        <!--
          aria-colindex는 보조기술 사용자에게
          다음 열이 전체 성적 데이터 세트의 10, 11, 12, 13열을 나타냄을
          전달합니다.
        -->
        <th aria-colindex="10">숙제 4</th>
        <th aria-colindex="11">시험 2</th>
        <th aria-colindex="12">숙제 5</th>
        <th aria-colindex="13">숙제 6</th>
      </tr>
    </thead>
    <tbody>
      <tr aria-rowindex="50">
        <!--
          모든 셀은 aria-colindex 어트리뷰트를 정의해야 합니다
        -->
        <td aria-colindex="1">Henderson</td>
        <td aria-colindex="2">Alan</td>
        <td aria-colindex="10">8</td>
        <td aria-colindex="11">25</td>
        <td aria-colindex="12">9</td>
        <td aria-colindex="13">9</td>
      </tr>
      <tr aria-rowindex="51">
        <td aria-colindex="1">Henderson</td>
        <td aria-colindex="2">Alice</td>
        <td aria-colindex="10">10</td>
        <td aria-colindex="11">27</td>
        <td aria-colindex="12">10</td>
        <td aria-colindex="13">8</td>
      </tr>
      <tr aria-rowindex="52">
        <td aria-colindex="1">Henderson</td>
        <td aria-colindex="2">Andrew</td>
        <td aria-colindex="10">9</td>
        <td aria-colindex="11">0</td>
        <td aria-colindex="12">29</td>
        <td aria-colindex="13">8</td>
      </tr>
    </tbody>
  </table>

7.3 aria-colspanaria-rowspan를 사용하여 셀 합치기 정의

HTML table 엘리먼트가 아닌 엘리먼트를 사용하여 tables, grids, treegrids이 생성된 경우, 행과 열 합침은 aria-rowspanaria-colspan 속성(property)으로 정의됩니다.

aria-colspan의 값은 다음과 같은 정수입니다:

  1. 1 이상.
  2. 동일 행의 다음 셀과 겹쳐지게 되는 값보다 작은 값

aria-rowspan의 값은 다음과 같은 정수입니다:

  1. 0 이상.
  2. 0은 행 그룹의 나머지 모든 행 합침을 의미합니다.
  3. 동일 열의 다음 셀과 겹쳐지게 되는 값보다 작은 값.

다음 예제 그리드는 두 개의 행 헤더를 가집니다. 첫 두 열은 헤더의 모든 행에 걸쳐진 헤더를 가집니다. 이후 6개 열은 첫번째 행의 헤더로 각 2개 열이 합쳐진 3쌍으로 그룹핑 됩니다.


  <div role="grid" aria-rowcount="463">
    aria-label="역사 101에 대한 학생 성적"
    <div role="rowgroup">
      <div role="row" aria-rowindex="1">
          <!--
            aria-rowspan와 aria-colspan는
            헤더 셀이 하나 이상의 행 또는 열로 합쳐질 경우
            올바른 데이터 셀 헤더 정보를 보조기술에 제공합니다.
          -->
          <span role="columnheader" aria-rowspan="2"></span>
          <span role="columnheader" aria-rowspan="2">이름</span>
          <span role="columnheader" aria-colspan="2">시험 1</span>
          <span role="columnheader" aria-colspan="2">시험 2</span>
          <span role="columnheader" aria-colspan="2">최종</span>
      </div>
      <div role="row" aria-rowindex="2">
          <span role="columnheader">점수</span>
          <span role="columnheader">등급</span>
          <span role="columnheader">점수</span>
          <span role="columnheader">등급</span>
          <span role="columnheader">점수</span>
          <span role="columnheader">등급</span>
      </div>
    </div>
    <div role="rowgroup">
      <div role="row" aria-rowindex="50">
        <span role="cell">Henderson</span>
        <span role="cell">Alan</span>
        <span role="cell">89</span>
        <span role="cell">B+</span>
        <span role="cell">72</span>
        <span role="cell">C</span>
        <span role="cell">161</span>
        <span role="cell">B-</span>
      </div>
      <div role="row" aria-rowindex="51">
        <span role="cell">Henderson</span>
        <span role="cell">Alice</span>
        <span role="cell">94</span>
        <span role="cell">A</span>
        <span role="cell">86</span>
        <span role="cell">B</span>
        <span role="cell">180</span>
        <span role="cell">A-</span>
      </div>
      <div role="row" aria-rowindex="52">
        <span role="cell">Henderson</span>
        <span role="cell">Andrew</span>
        <span role="cell">82</span>
        <span role="cell">B-</span>
        <span role="cell">95</span>
        <span role="cell">A</span>
        <span role="cell">177</span>
        <span role="cell">B+</span>
      </div>
    </div>
  </div>

참고: table 엘리먼트를 사용하는 경우, 열과 행 합침을 정의하도록 rowspancolspan 어트리뷰트를 사용하여 thtd의 기본 의미론을 사용하세요.

7.4 aria-sort로 정렬 순서 나타내기

행 또는 열이 정렬되는 경우, aria-sort 속성(property)이 정렬 방법을 나타내기 위해 열이나 행 헤더에 적용될 수 있습니다. 다음 표는 aria-sort에 허용된 값을 설명합니다.

aria-sort에 대한 값 설명
설명
ascending 데이터가 오름차순으로 정렬됩니다.
descending 데이터가 내림차순으로 정렬됩니다.
other 데이터가 오름차순 또는 내림차순 이외의 알고리즘으로 정렬됩니다.
none 기본 (정렬이 적용되지 않음).

ARIA가 여러 정렬 키를 가진 데이터 세트에 대한 정렬의 수준을 나타내는 방법을 제공하지 않는다는 점에 유의해야 합니다. 따라서, 둘 이상의 열이나 행에 none 이외의 값을 가진 aria-sort를 적용하는데 제한적인 값이 있습니다.

다음 예제 그리드는 행이 최고 "Quiz 2" 점수부터 최저 "Quiz 2" 점수로 정렬되었음을 나타내는데 aria-sort를 사용합니다.


  <table role="grid" aria-rowcount="463" aria-colcount="13"
    aria-label="역사 101에 대한 학생 성적">
    <thead>
      <tr aria-colindex="10" aria-rowindex="1">
        <th>Homework 4</th>
        <!--
          aria-sort가 헤딩 "Quiz 2"를 가진 열이 그리드의 행을
          정렬하는데 사용되었음을 나타냅니다.
        -->
        <th aria-sort="descending">Quiz 2</th>
        <th>Homework 5</th>
        <th>Homework 6</th>
      </tr>
    </thead>
    <tbody>
      <tr aria-colindex="10" aria-rowindex="50">
        <td>8</td>
        <td>30</td>
        <td>9</td>
        <td>9</td>
      </tr>
      <tr aria-colindex="10"  aria-rowindex="51">
        <td>10</td>
        <td>29</td>
        <td>10</td>
        <td>8</td>
      </tr>
      <tr aria-colindex="10"  aria-rowindex="52">
        <td>9</td>
        <td>9</td>
        <td>27</td>
        <td>6</td>
      </tr>
      <tr aria-colindex="10"  aria-rowindex="53">
        <td>9</td>
        <td>10</td>
        <td>26</td>
        <td>8</td>
      </tr>
      <tr aria-colindex="10"  aria-rowindex="54">
        <td>9</td>
        <td>7</td>
        <td>24</td>
        <td>6</td>
      </tr>
    </tbody>
  </table>

9. presentation 역할(role)로 의도적으로 의미론 숨기기

ARIA가 주로 의미론을 표현하는데 사용되지만, 보조 기술로부터 엘리먼트의 의미론을 숨기는 것이 도움이 되는 상황이 있습니다. 이는 오직 표현(presentation)을 위해서만 사용되고 있고 따라서 어떤 접근 가능한 의미를 가지지 않음을 선언하 는 presentation 역할(role)로 수행됩니다. ARIA 1.1 명세는 presentation의 동의어로서 제공되는 none 역할(role)도 포함합니다.

예를 들어, HTML ul 엘리먼트를 사용하여 만들어진 탭 위젯을 고려해보세요.

<ul role="tablist">
  <li role="presentation">
    <a role="tab" href="#">Tab 1</a>
  </li>
  <li role="presentation">
    <a role="tab" href="#">Tab 2</a>
  </li>
  <li role="presentation">
    <a role="tab" href="#">Tab 3</a>
  </li>
</ul>

목록이 탭 목록으로 선언되었기 때문에, 목록 항목은 목록 컨텍스트에 있지 않습니다. 보조 기술이 그 목록 항목들을 렌더링 한다면 사용자에게 혼란을 줄 수 있습니다. li 엘리먼트에 presentation 역할(role)을 적용하는 것은 접근성 트리에서 그 엘리먼트를 빼도록 브라우저에게 전달합니다. 따라서 보조 기술은 목록 항목 엘리먼트를 알지도 못하고 탭 엘리먼트를 탭 목록의 직속 자식으로 간주합니다.

presentation 역할(role)의 일반적인 3가지 용도는 다음과 같습니다:

  1. 장식용 이미지 숨김; 이미지에 null 대체 텍스트를 제공하는 것과 같습니다.
  2. 테이블이 유의미한 관계를 전달하지 않는 상황에서 레이아웃에 사용된 테이블의 의미를 숨김
  3. 위 예에서 보여진 것 처럼, 탭 목록, 메뉴, 트리와 같은 복합 위젯 구조에서 사이에 있는 고아 엘리먼트(orphan element)의 의미론을 제거.

9.1 presentation 역할(role)의 효과

엘리먼트에 role="presentation"이 지정 된 경우, 브라우저가 presentation 역할(role)을 무시하는데 필요한 조건이 없는 경우, 다음과 같은 세 가지 효과를 가집니다.

  1. 엘리먼트의 암묵적 ARIA 역할(role)과 그 역할(role)과 관련 된 ARIA 상태(state) 및 속성(property)가 보조 기술에 숨겨집니다.
  2. 엘리먼트에 포함된 텍스트, 즉, 내부 텍스트 뿐아니라 모든 후손 엘리먼트의 내부 텍스트가 텍스트가 명시적으로 숨겨진 경우 예를 들어 display: none으로 스타일링 되었거나 aria-hidden="true"를 가지는 경우를 제외하고, 보조 기술에 계속 노출됩니다.
  3. 각 후손 엘리먼트의 역할(role), 상태(state), 속성(property)가 표현 엘리먼트(presentational element)의 컨텍스트를 요구하지 않는 한 보조기술에 계속 노출됩니다. 예를 들어:
    • presentationul이나 ol 엘리먼트에 적용 된 경우, 각 자식 li 엘리먼트는 ARIA가 부모 list 엘리먼트를 가지도록 listitem 엘리먼트를 요구하므로, presentation 역할(role)을 상속받습니다. 따라서, li 엘리먼트는 보조 기술에 노출되지 않지만, 중첩된 목록을 포함하여 그 li 엘리먼트 내부에 포함된 엘리먼트는 보조 기술에 노출 됩니다.
    • 마찬가지로, presentationtable 엘리먼트에 적용 된 경우, 후손 caption, thead, tbody, tfoot, tr, th, td 엘리먼트는 presentation 역할(role)을 상속하고 따라서 보조 기술에 노출되지 않습니다. 하지만, 중첩 된 테이블을 포함하여 thtd 엘리먼트 내부의 엘리먼트는 보조 기술에 노출 됩니다.

9.2 presentation 역할(role)이 무시되는 조건

브라우저는 적용 된 엘리먼트에 대해서 다음 중 하나가 참이면 role="presentation"를 무시하므로 효과가 없습니다:

9.3 presentation 역할(role)의 효과를 보여주는 예

이 코드는:

<ul role="presentation">
  <li>Date of birth:</li>
  <li>January 1, 3456</li>
</ul>

브라우저에 의해 해석 될 때, 스크린리더나 브라우저의 접근성 트리에 의존하는 다른 보조 기술의 관점에서 다음과 동일합니다:

<div>Date of birth:</div>
<div>January 1, 3456</div>

10. 후손을 표현적(presentational)으로 만들어 자동으로 의미를 숨기는 역할(role)

플랫폼 접근성 API에 나타날 때, 텍스트를 포함할 수만 있는 몇 가지 유저 인터페이스 컴포넌트 유형이 있습니다. 예를 들어, 접근성 API는 버튼에 포함 된 의미 엘리먼트를 나타내는 방법이 없습니다. 이 제한을 다루기 위해, WAI-ARIA는 브라우저에 자동으로 presentation 역할을(role) 의미 자식을 지원할 수 없는 역할(role)을 가진 모든 엘리먼트의 모든 후손 엘리먼트에 적용하도록 요구합니다.

모든 자식이 표현적이 되도록 요구하는 역할(role)은 다음과 같습니다:

예를 들어, 제목이 포함된 다음 탭 엘리먼트를 고려해보세요.

<li role="tab"><h3>탭 제목</h3></li>

WAI-ARIA는 탭의 후손을 표현적이 되도록 요구하기 때문에, 다음 코드는 동일합니다.

<li role="tab"><h3 role="presentation">탭 제목</h3></li>

그리고, 스크린리더와 같은 접근성 API에 의존하는 기술을 사용하는 사람의 관점에서, 이전 코드가 다음과 동일하기 때문에 헤딩은 존재하지 않습니다.

<li role="tab">탭 제목</li>

동작에 대한 자세한 설명은 presentation 역할(role)에 대한 섹션 을 참고하세요.

11. 구조적 역할(role)

ARIA는 페이지 구조의 접근성 의미를 전달하는 역할 집합을 제공합니다. 이 역할은 제목(heading), 목록, 표와 같은 콘텐츠를 구성하고 구조화하는 에리먼트의 레이아웃 및 모양을 전달하는 의미를 나타냅니다.

HTML 같은 일부 호스트 언어는 ARIA 역할(role)과 동일한 의미를 나타내는 엘리먼트를 포함합니다. 예를 들어, HTML <p> 엘리먼트는 <div role="paragraph">와 정확히 동일한 방식으로 접근성 API에 매핑됩니다. ARIA와 HTML 명세는 HTML 엘리먼트와 ARIA 어트리뷰트의 이 매핑을 암묵적 의미론이라고 칭합니다. 예를 들어 HTML <p> 엘리먼트의 암묵적 ARIA 역할(role)은 paragraph 입니다.

HTML을 개발할 때, 가능한 한 기본 HTML 엘리먼트를 사용하는 것이 중요합니다. 동등한 의미를 가진 HTML 엘리먼트를 사용하는 것이 가능하다면, ARIA 역할(role)이나 속성(property)를 사용하지 마세요. 동등한 HTML 대신 ARIA 어트리뷰트를 사용하는 것이 적절한 상황은 다음과 같습니다:

  1. HTML 엘리먼트가 시각 디자인 요구사항을 충족하는 방식으로 스타일 될 수 없는 경우.
  2. 테스트 결과 브라우저나 보조 기술이 동등한 ARIA를 더 잘 지원하는 것으로 나타나는 경우.
  3. 레거시 콘텐트를 교정하거나(remediating) 개량(retrofitting)하고 HTML을 사용하도록 근본적으로 DOM을 바꾸는 것이 비용이 엄두도 못 낼 정도로 많이 드는 경우.
  4. 사용자 정의 엘리먼트를 구성하기 위해 웹 컴포넌트를 빌드하고 있고 확장되는 요소가 적절하거나 충분한 접근성 의미를 전달하지 않는 경우.

다음 표는 ARIA 1.2에 정의된 모든 구조적 역할(role)을 나열합니다.

ARIA 구조적 역할(role)
ARIA 역할(role) 동등한 HTML
application동등한 엘리먼트 없음
articlearticle
blockquoteblockquote
captioncaption
celltd
codecode
columnheaderth
definitiondd
deletiondel
directory동등한 엘리먼트 없음
document동등한 엘리먼트 없음
emphasisem
feed동등한 엘리먼트 없음
figurefigure
genericdiv, span
group동등한 엘리먼트 없음
heading with aria-level="N" where N is 1, 2, 3, 4, 5, or 6h1, h2, h3, h4, h5, h6
insertionins
imgimg
listul, ol
listitemli
math동등한 엘리먼트 없음
none동등한 엘리먼트 없음
note동등한 엘리먼트 없음
presentation동등한 엘리먼트 없음
paragraphp
rowtr
rowgrouptbody, thead, tfoot
rowheaderth
separator (when not focusable)hr
strongstrong
subscriptsub
superscriptsup
tabletable
termdfn
timetime
toolbar동등한 엘리먼트 없음
tooltip동등한 엘리먼트 없음

A. Indexes

B. Change History

B.1 Changes in November 2021 Publication of Version 1.2

APG 1.1 supported ARIA 1.1, and this version, APG 1.2, includes changes to support version 1.2 of the ARIA specification. It also includes nearly 200 significant updates to improve the quality and breadth of content. A detailed log of all changes is available on the wiki of the w3c/aria-practices GitHub repository. Highlights of major changes to support ARIA 1.2 as well as some of the improvements include the following.

Comprehensive lists of closed issues included in APG 1.2 release 1 are tracked in the following GitHub milestones.

B.2 Changes in July 2019 Publication of APG 1.1 Release 4

Also see:

B.3 Changes in January 2019 Publication of APG 1.1 Release 3

Also see:

B.4 Changes in July 2018 Publication of APG 1.1 Release 2

Also see:

B.5 Changes in December 2017 Publication of APG 1.1 Release 1

Also see:

B.6 Changes in June 2017 APG 1.1 Working Draft

Also see:

C. Acknowledgements

C.1 Honorary Editor

This version of the ARIA Authoring Practices Guide is dedicated to the memory of Carolyn MacLeod whose contributions are visible throughout the entire guide. She was dedicated to all aspects of the work of the APG Task Force from writing code and suggesting editorial revisions to testing examples with assistive technologies.

C.2 Major Contributors to Version 1.1

While WAI-ARIA Authoring Practices is the work of the entire Authoring Practices Task Force and also benefits from many people throughout the open source community who both contribute significant work and provide valuable feedback, special thanks goes to the following people who provided distinctly large portions of the content and code.

C.3 Participants active in the ARIA Authoring Practices Task Force

C.4 Other commenters and contributors

C.5 Enabling funders

This publication has been funded in part with U.S. Federal funds from the Department of Education, National Institute on Disability, Independent Living, and Rehabilitation Research (NIDILRR), initially under contract number ED-OSE-10-C-0067, then under contract number HHSP23301500054C, and now under HHS75P00120P00168. The content of this publication does not necessarily reflect the views or policies of the U.S. Department of Education, nor does mention of trade names, commercial products, or organizations imply endorsement by the U.S. Government.

D. 참조

D.1 Informative references

[HTML]
HTML Standard. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[HTML-AAM]
HTML Accessibility API Mappings 1.0. Scott O'Hara. W3C. 6 February 2024. W3C Working Draft. URL: https://www.w3.org/TR/html-aam-1.0/
[HTML-ARIA]
ARIA in HTML. Scott O'Hara; Patrick Lauke. W3C. 21 December 2023. W3C Recommendation. URL: https://www.w3.org/TR/html-aria/
[SVG2]
Scalable Vector Graphics (SVG) 2. Amelia Bellamy-Royds; Bogdan Brinza; Chris Lilley; Dirk Schulze; David Storey; Eric Willigers. W3C. 4 October 2018. W3C Candidate Recommendation. URL: https://www.w3.org/TR/SVG2/
[WAI-ARIA]
Accessible Rich Internet Applications (WAI-ARIA) 1.1. Joanmarie Diggs; Shane McCarron; Michael Cooper; Richard Schwerdtfeger; James Craig. W3C. 14 December 2017. W3C Recommendation. URL: https://www.w3.org/TR/wai-aria-1.1/
[WAI-ARIA-1.2]
Accessible Rich Internet Applications (WAI-ARIA) 1.2. Joanmarie Diggs; James Nurthen; Michael Cooper; Carolyn MacLeod. W3C. 6 June 2023. W3C Recommendation. URL: https://www.w3.org/TR/wai-aria-1.2/