:state()

基线 2024

新发布

2024 年 5 月起,此功能在所有最新设备和浏览器版本上均可使用。此功能可能无法在旧设备或浏览器中使用。

:state() CSS 伪类 匹配具有指定自定义状态的 自定义元素

语法

:state() 伪类以自定义标识符作为参数,表示要匹配的自定义元素的状态。

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

描述

元素可能会由于用户交互和其他因素而转换状态。例如,当用户将鼠标悬停在元素上时,该元素可能处于“悬停”状态,或者链接在用户点击后可能处于“已访问”状态。浏览器提供的元素可以使用 CSS 伪类(如 :hover:visited)根据这些状态进行样式设置。类似地,自主自定义元素(未从内置元素派生的自定义元素)可以公开其状态,使使用这些元素的页面可以使用 CSS :state() 伪类对其进行样式设置。

自定义元素的状态由字符串值表示。这些值将被添加到或从与元素关联的 CustomStateSet 对象中。当作为参数传递的标识符存在于元素的 CustomStateSet 中时,CSS :state() 伪类将匹配该元素。

:state() 伪类还可用于匹配自定义元素实现中的自定义状态。这可以通过在 :host() 伪类函数中使用 :state() 来实现,该函数只匹配当前自定义元素的 Shadow DOM 中的状态。

此外,::part() 伪元素后跟 :state() 伪类,允许匹配处于特定状态的自定义元素的 Shadow 部件。(Shadow 部件是自定义元素的 Shadow 树中的部分,它们被明确公开给包含页面以供样式设置使用。)

示例

匹配自定义状态

此 CSS 显示了如何将自主自定义元素 <labeled-checkbox> 的边框更改为处于“选中”状态时的 red

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

要查看此代码在实际中的示例,请访问匹配自定义复选框元素的自定义状态,该示例位于CustomStateSet页面上。

匹配自定义元素的影子 DOM 中的自定义状态

此示例演示了如何在:host()伪类函数内使用:state()伪类来匹配自定义元素实现中的自定义状态。

以下 CSS 在元素处于“checked”状态时,在其前面插入一个灰色的[x]

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

要查看此代码在实际中的示例,请访问匹配自定义复选框元素的自定义状态,该示例位于CustomStateSet页面上。

匹配影子部分中的自定义状态

此示例演示了如何使用:state()伪类来定位自定义元素的影子部分

影子部分使用part属性进行定义和命名。例如,考虑一个名为<question-box>的自定义元素,它使用一个名为checkbox的影子部分,其中包含一个名为<labeled-checkbox>的自定义元素。

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

下面的 CSS 演示了如何使用::part()伪元素来匹配'checkbox'影子部分。然后演示了如何在元素处于checked状态时,如何使用::part()伪元素后跟:state()伪类来匹配同一个部分。

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

question-box::part(checkbox):state(checked) {
  color: green;
}

要查看此代码在实际中的示例,请访问匹配自定义元素的影子部分中的自定义状态,该示例位于CustomStateSet页面上。

规范

规范
HTML 标准
# selector-custom

浏览器兼容性

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

另请参阅