ShadowRoot: delegatesFocus 属性

delegatesFocusShadowRoot 接口的一个只读属性,如果 Shadow Root 代理焦点,则返回 true,否则返回 false

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

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

属性值最初是使用传递给 Element.attachShadow() 的对象的 delegatesFocus 属性设置的,或者使用 shadowrootdelegatesfocus 属性(当声明式创建 Shadow Root 时)设置的。

如果 Shadow Root 代理焦点,则为 true,否则为 false

示例

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

// ...

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

<template> 文档中的 带有代理焦点的声明式 Shadow DOM 示例演示了代理焦点的效果。

规范

规范
DOM 标准
# shadowroot-delegates-focus

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。