伪类

一个 CSS 伪类 是添加到选择器中的一个关键字,它指定所选元素的特殊状态。例如,伪类 :hover 可以用于在用户指针悬停在按钮上时选择按钮,然后可以对这个选中的按钮进行样式设置。

css
/* Any button over which the user's pointer is hovering */
button:hover {
  color: blue;
}

伪类由一个冒号 (:) 后跟伪类名称(例如,:hover)组成。函数式伪类还包含一对括号来定义参数(例如,:dir())。伪类附加到的元素被称为锚元素(例如,在 button:hover 的情况下,为 button)。

伪类允许你不仅根据文档树的内容,而且还根据外部因素(如导航器的历史记录(例如,:visited)、其内容的状态(如某些表单元素的 :checked)或鼠标的位置(如 :hover,它可以让你知道鼠标是否悬停在某个元素上)来应用元素样式。

注意:与伪类相反,伪元素 可以用于设置元素的特定部分的样式。

元素显示状态伪类

这些伪类可以根据元素的显示状态选择元素。

:fullscreen

匹配当前处于全屏模式的元素。

匹配处于某种状态的元素,在这种状态下,它会排除所有与外部元素的交互,直到交互被解除。

:picture-in-picture

匹配当前处于画中画模式的元素。

输入伪类

这些伪类与表单元素相关,并允许根据 HTML 属性以及字段在交互前后所处的状态来选择元素。

:autofill

<input> 被浏览器自动填充时匹配。

:enabled

表示处于启用状态的用户界面元素。

:disabled

表示处于禁用状态的用户界面元素。

:read-only

表示任何不能被用户更改的元素。

:read-write

表示任何可由用户编辑的元素。

:placeholder-shown

匹配显示占位符文本的输入元素。例如,它将匹配 <input><textarea> 元素中的 placeholder 属性。

:default

匹配一组元素中的一个或多个默认 UI 元素。

:checked

匹配复选框和单选按钮等元素被选中时。

:indeterminate

当 UI 元素处于不确定状态时匹配。

:blank

匹配为空的用户输入元素,包含空字符串或其他空输入。

:valid

匹配具有有效内容的元素。例如,类型为 'email' 的输入元素,其中包含格式正确的电子邮件地址,或者如果控件不是必需的,则包含空值。

:invalid

匹配具有无效内容的元素。例如,类型为 'email' 的输入元素,其中包含输入的名称。

:in-range

适用于具有范围限制的元素。例如,滑块控件,当所选值在允许的范围内时。

:out-of-range

适用于具有范围限制的元素。例如,滑块控件,当所选值超出允许的范围时。

:required

当表单元素是必需的时匹配。

:optional

当表单元素是可选的时匹配。

:user-valid

表示一个元素具有正确的输入,但仅当用户与之交互时。

:user-invalid

表示一个元素具有错误的输入,但仅当用户与之交互时。

语言伪类

这些伪类反映了文档语言,并允许根据语言或脚本方向选择元素。

:dir()

方向伪类根据文档语言确定的方向选择元素。

:lang()

根据元素的内容语言选择元素。

位置伪类

这些伪类与链接以及当前文档中的目标元素相关。

如果元素匹配:link:visited,则匹配该元素。

匹配尚未访问的链接。

:visited

匹配已访问的链接。

匹配其绝对 URL 与目标 URL 相同的链接。例如,指向同一页面的锚点链接。

:target

匹配作为文档 URL 目标的元素。

:target-within

匹配作为文档 URL 目标的元素,以及具有作为文档 URL 目标的后代的元素。

:scope

表示作为选择器匹配参考点的元素。

资源状态伪类

这些伪类适用于能够处于播放状态的媒体,例如视频。

:playing

表示能够播放的媒体元素,当该元素正在播放时。

:paused

表示能够播放的媒体元素,当该元素处于暂停状态时。

时间维度伪类

这些伪类在查看具有时间安排的事物时适用,例如WebVTT 闭幕字幕轨道。

:current

表示正在显示的元素或元素的祖先。

:past

表示完全位于:current元素之前的元素。

:future

表示完全位于:current元素之后的元素。

树结构伪类

这些伪类与元素在文档树中的位置相关。

:root

表示作为文档根部的元素。在 HTML 中,这通常是<html>元素。

:empty

表示除了空白字符之外没有子元素的元素。

:nth-child

使用An+B表示法从同级元素列表中选择元素。

:nth-last-child

使用An+B表示法从同级元素列表中选择元素,从列表末尾反向计数。

:first-child

匹配作为其同级元素第一个的元素。

:last-child

匹配作为其同级元素最后一个的元素。

:only-child

匹配没有同级元素的元素。例如,列表项中没有其他列表项。

:nth-of-type

使用An+B表示法从同级元素列表中选择匹配特定类型的元素。

:nth-last-of-type

使用An+B表示法从同级元素列表中选择匹配特定类型的元素,从列表末尾反向计数。

:first-of-type

匹配作为其同级元素第一个的元素,并且还匹配特定类型选择器。

:last-of-type

匹配作为其同级元素最后一个的元素,并且还匹配特定类型选择器。

:only-of-type

匹配没有选定类型选择器同级元素的元素。

用户操作伪类

这些伪类需要用户进行一些交互才能应用,例如将鼠标指针悬停在元素上。

:hover

当用户使用指向设备(例如将鼠标指针悬停在项目上)指定项目时匹配。

:active

当用户激活项目时匹配。例如,当点击项目时。

:focus

当元素获得焦点时匹配。

:focus-visible

当元素获得焦点且用户代理识别该元素应该可见地获得焦点时匹配。

:focus-within

匹配应用了:focus的元素,以及任何具有应用了:focus的后代的元素。

功能性伪类

这些伪类接受选择器列表宽松选择器列表作为参数。

:is()

matches-any 伪类匹配任何与列表中提供的任何选择器匹配的元素。该列表是宽松的。

:not()

否定(或 matches-none)伪类表示任何不与其参数匹配的元素。

:where()

specificity-adjustment 伪类匹配任何与列表中提供的任何选择器匹配的元素,而不添加任何特异性权重。该列表是宽松的。

:has()

关系伪类表示如果任何相对选择器在与附加元素对齐时匹配,则表示元素。

语法

css
selector:pseudo-class {
  property: value;
}

与普通类一样,您可以在选择器中链接任意多个伪类。

字母索引

规范

规范
HTML 标准
# 伪类
选择器级别 4
CSS 基本用户界面模块级别 4

另请参见