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

瀏覽器相容性