【发布时间】:2014-06-30 17:12:13
【问题描述】:
我想使用当前的 Web 组件规范实现一个列表框小部件。此外,生成的列表框应符合 ARIA 标准。实例化列表框小部件应该很简单:
<x-listbox>
<x-option>Option 1</x-option>
<x-option>Option 2</x-option>
</x-listbox>
出于清洁和封装的目的,其他所有内容都应在 shadow dom 中渲染。为了实现这个小部件,注册了两个自定义元素<x-listbox> 和<x-option>。 <x-listbox> 的影子 dom 的*元素是 <div>,它带有 role=listbox 和 aria-activedescendent 属性以实现可访问性(我不希望 <x-listbox> 元素上的这些属性,因为它们是实现详细信息。)
为了让aria-activedescendent 工作,需要在选项元素上设置 ID。将 id 直接放在 <x-option> 元素上不会有两个原因:首先,它会污染使用列表框小部件的文档的 id 命名空间。其次,更重要的是,id 不能跨影子边界工作(这是影子 dom 的目的之一),因此选项的 id 必须与 <div> 和 aria-activedescendent 属性位于相同的影子 dom 中。
对此的解决方案是用另一个<div>(属于该shadow dom)包围每个<x-option>,在<x-listbox>的shadow dom中呈现为内容,在其上可以放置一个id。
我的问题是:这是正确的方法吗?如何使用自定义元素和 shadow dom web api 来实现?
【问题讨论】:
标签: web-component wai-aria shadow-dom