CSS伪类和伪元素都是用来选择HTML文档中的元素或元素的部分的CSS选择器。
-
伪类(Pseudo-classes)是选择文档中特定状态的元素,例如:hover、:active等。伪类用冒号(:)表示。
伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的元素时,我们可以通过:hover来描述这个元素的状态。虽然它和普通的css类相似,可以为已有的元素添加样式,但是它只有处于dom树无法描述的状态下才能为元素添加样式,所以将其称为伪类。选择器 示例 示例说明 :checked input:checked 选择所有选中的表单元素 :disabled input:disabled 选择所有禁用的表单元素 :empty p:empty 选择所有没有子元素的p元素 :enabled input:enabled 选择所有启用的表单元素 :first-of-type p:first-of-type 选择的每个 p 元素是其父元素的第一个 p 元素 :in-range input:in-range 选择元素指定范围内的值 :invalid input:invalid 选择所有无效的元素 :last-child p:last-child 选择所有p元素的最后一个子元素 :last-of-type p:last-of-type 选择每个p元素是其母元素的最后一个p元素 :not(selector) :not(p) 选择所有p以外的元素 :nth-child(n) p:nth-child(2) 选择所有 p 元素的父元素的第二个子元素 :nth-last-child(n) p:nth-last-child(2) 选择所有p元素倒数的第二个子元素 :nth-last-of-type(n) p:nth-last-of-type(2) 选择所有p元素倒数的第二个为p的子元素 :nth-of-type(n) p:nth-of-type(2) 选择所有p元素第二个为p的子元素 :only-of-type p:only-of-type 选择所有仅有一个子元素为p的元素 :only-child p:only-child 选择所有仅有一个子元素的p元素 :optional input:optional 选择没有"required"的元素属性 :out-of-range input:out-of-range 选择指定范围以外的值的元素属性 :read-only input:read-only 选择只读属性的元素属性 :read-write input:read-write 选择没有只读属性的元素属性 :required input:required 选择有"required"属性指定的元素属性 :root root 选择文档的根元素 :target #news:target 选择当前活动#news元素(点击URL包含锚的名字) :valid input:valid 选择所有有效值的属性 :link a:link 选择所有未访问链接 :visited a:visited 选择所有访问过的链接 :active a:active 选择正在活动链接 :hover a:hover 把鼠标放在链接上的状态 :focus input:focus 选择元素输入后具有焦点 :first-child p:first-child 选择器匹配属于任意元素的第一个子元素的 <p> 元素 :lang(language) p:lang(it) 为<p>元素的lang属性选择一个开始值 -
伪元素(Pseudo-elements)是用来选择元素的某个部分。
伪元素用于创建一些不在文档树中的元素,并为其添加样式。比如说,我们可以通过:before来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。选择器 示例 示例说明 :first-letter p:first-letter 选择每个<p> 元素的第一个字母 :first-line p:first-line 选择每个<p> 元素的第一行 :before p:before 在每个<p>元素之前插入内容 :after p:after 在每个<p>元素之后插入内容 :selection p:selection 选择用户选择的元素部分。
例如,使用:hover伪类可以设置鼠标悬停在元素上时的样式,使用::before伪元素可以在元素的开头添加一段内容。
特别需要注意的是,伪元素必须在伪类之前,例如:
p::before:hover {
color: red;
}
这里的:hover伪类是针对p元素前面添加的内容而言的。