:state()

Baseline 2024
新推出

自 2024 年 5 月以來,此功能已在最新裝置和瀏覽器版本中可用。此功能可能不適用於較舊的裝置或瀏覽器。

:state() CSS 偽類匹配具有指定自定義狀態的自定義元素

語法

css
:state(<custom identifier>) {
  /* ... */
}

引數

:state() 偽類接受一個自定義識別符號作為其引數,該識別符號表示要匹配的自定義元素的狀態。

描述

元素可以由於使用者互動和其他因素而在狀態之間轉換。例如,當用戶將滑鼠懸停在元素上時,元素可以處於“hover”狀態;或者當用戶單擊連結後,連結可以處於“visited”狀態。瀏覽器提供的元素可以使用 :hover:visited 等 CSS 偽類根據這些狀態進行樣式設定。類似地,自治自定義元素(不是從內建元素派生的自定義元素)可以公開其狀態,從而允許使用這些元素的頁面使用 CSS :state() 偽類對其進行樣式設定。

自定義元素的狀態由字串值表示。這些值被新增或從與元素關聯的 CustomStateSet 物件中移除。當作為引數傳遞的識別符號存在於元素的 CustomStateSet 中時,CSS :state() 偽類會匹配該元素。

:state() 偽類還可以用於在自定義元素的實現中匹配自定義狀態。這是透過在 :host() 偽類函式中使用 :state() 來實現的,該函式僅在當前自定義元素的 Shadow DOM 中匹配狀態。

此外,::part() 偽元素後跟 :state() 偽類允許匹配處於特定狀態的自定義元素的 Shadow 部分。(Shadow 部分是自定義元素的 Shadow 樹中明確暴露給包含頁面以進行樣式設定的部分。)

示例

匹配自定義狀態

此 CSS 顯示當自治自定義元素 <labeled-checkbox> 處於“checked”狀態時,如何將其邊框更改為 red

css
labeled-checkbox {
  border: dashed red;
}
labeled-checkbox:state(checked) {
  border: solid;
}

有關此程式碼的即時示例,請參閱 CustomStateSet 頁面上的匹配自定義複選框元素的自定義狀態示例。

在自定義元素的 Shadow DOM 中匹配自定義狀態

此示例顯示瞭如何在 :host() 偽類函式中使用 :state() 偽類來匹配自定義元素的實現中的自定義狀態。

當元素處於“checked”狀態時,以下 CSS 在元素之前注入一個灰色的 [x]

css
:host(:state(checked))::before {
  content: "[x]";
}

有關此程式碼的即時示例,請參閱 CustomStateSet 頁面上的匹配自定義複選框元素的自定義狀態示例。

在 Shadow 部分中匹配自定義狀態

此示例顯示瞭如何使用 :state() 偽類來定位自定義元素的 Shadow 部分

Shadow 部分使用 part 屬性定義和命名。例如,考慮一個名為 <question-box> 的自定義元素,它使用一個名為 checkbox<labeled-checkbox> 自定義元素作為 Shadow 部分

js
shadowRoot.innerHTML = `<labeled-checkbox part='checkbox'>Yes</labeled-checkbox>`;

下面的 CSS 顯示瞭如何使用 ::part() 偽元素來匹配 'checkbox' Shadow 部分。然後,它顯示瞭如何使用 ::part() 偽元素後跟 :state() 偽類來匹配處於 checked 狀態的同一部分。

css
question-box::part(checkbox) {
  color: red;
}

question-box::part(checkbox):state(checked) {
  color: green;
  outline: dashed 1px green;
}

有關此程式碼的即時示例,請參閱 CustomStateSet 頁面上的在自定義元素的 Shadow 部分中匹配自定義狀態示例。

規範

規範
HTML
# 選擇器-自定義

瀏覽器相容性

另見