현재 웹 구성 요소 사양을 사용하여 목록 상자 위젯을 구현하고 싶습니다. 또한 결과 목록 상자는 ARIA 표준을 준수해야합니다. 목록 상자 위젯을 인스턴스화하는 것은 다음과 같이 간단해야합니다.맞춤 요소 및 접근성
<x-listbox>
<x-option>Option 1</x-option>
<x-option>Option 2</x-option>
</x-listbox>
청결하고 캡슐화하기 위해 다른 모든 것은 그림자 돔으로 렌더링되어야합니다. 이 위젯을 구현하기 위해 사용자 정의 요소 인 <x-listbox>
과 <x-option>
이 등록됩니다. <x-listbox>
의 그림자 DOM의 최상위 요소는 순서에서 role=listbox
과 aria-activedescendent
접근성 특성 (그들이 구현 세부 사항이기 때문에 나는 <x-listbox>
요소에 이러한 특성을하지 않습니다.)
을 운반 <div>
입니다 aria-activedescendent
이 작동하려면 옵션 요소에 ID가 필요합니다. id를 직접 <x-option>
요소에 두는 것은 두 가지 이유에서 작동하지 않습니다. 첫째, 목록 상자 위젯을 사용하는 문서의 id 네임 스페이스를 오염시킵니다. 두 번째로 더 중요한 것은 id가 그림자 경계 (shadow dom의 목적 중 하나 임)에서 작동하지 않기 때문에 옵션의 ID는 의 aria-activedescendent
속성과 동일한 그림자 돔에 있어야합니다. 이것
용액 아이디를 넣을 수있는 (즉 섀도우 DOM에 속하는) 다른 <div>
와 <x-listbox>
의 그림자 DOM 내부의 콘텐츠로 렌더링 된 각 <x-option>
둘러싸 일 것이다.
내 질문은 : 이것이 올바른 방법이며 맞춤 요소와 그림자 DOM 웹 API를 사용하여 이것을 구현하는 방법입니까?
내게 필요한 옵션의 측면에서 작동하지만 제공된 HTML의 일부가 아닌 선택 요소가 light DOM에 표시되기 때문에 캡슐화의 목표에 어긋납니다. 둘째, 좀 더 복잡한 위젯 (예 : 옵션에 텍스트가 포함 된 목록 상자)을 사용하여 동일한 작업을 시도한 경우 선택 요소를 맞춤형 아리아 준수 위젯으로 교체해야합니다. 내 x-listbox를 두 배로 늘리십시오. – Marc