ShadowRoot: delegatesFocus 属性

Baseline 已广泛支持

此功能已得到良好确立,可在多种设备和浏览器版本上运行。自⁨2021 年 11 月⁩起,所有浏览器均已提供此功能。

ShadowRoot 接口的只读属性 delegatesFocus 返回一个布尔值,如果 shadow root 委托焦点,则为 true,否则为 false

如果设置为 true,当点击 shadow DOM 的不可聚焦部分,或在宿主元素上调用 .focus() 时,宿主 shadow DOM 内的第一个可聚焦部分将获得焦点,并且 shadow 宿主将获得任何可用的 :focus 样式。

焦点对于键盘用户(包括屏幕阅读器用户)尤其重要。delegatesFocus 的默认行为是将焦点设置到第一个可聚焦元素上——如果该元素不应成为制表顺序的一部分(例如,具有 tabindex="-1" 的元素),或者如果一个更“重要”的可聚焦元素应获得初始焦点(例如,第一个文本字段而不是它前面的“关闭”按钮),这可能是不希望的。在这种情况下,可以在应获得初始焦点的元素上指定 autofocus 属性。请谨慎使用 autofocus 属性,因为它可能引入可访问性问题,例如绕过重要内容,这些内容可能因为焦点设置在 DOM 顺序靠后的元素上而未被注意到。

该属性值最初是通过传递给 Element.attachShadow() 的对象的 delegatesFocus 属性设置的,或者在以声明方式创建 shadow root 时,通过 <template> 元素的 shadowrootdelegatesfocus 属性设置的。

如果 shadow root 委托焦点,则为 true,否则为 false

示例

js
const customElem = document.querySelector("my-shadow-dom-element");
const shadow = customElem.shadowRoot;

// …

// Does it delegate focus?
const hostElem = shadow.delegatesFocus;

<template> 文档中的“带有委托焦点的声明式 Shadow DOM”示例演示了委托焦点的影响。

规范

规范
DOM
# shadowroot-delegates-focus

浏览器兼容性