1. 作用不同
- 伪类:主要用于定义元素的特殊状态。它们不是类,而是表示了元素处于特定状态时的样式变化。例如,
:hover
用于鼠标悬停时改变元素的样式,:active
用于元素被激活(如点击)时的样式。伪类还可以用于定义元素的顺序(如:first-child
、:nth-child(n)
等)。 - 伪元素:用于创建一些不在文档树中的元素,并为其添加样式。这些元素实际上并不存在于HTML文档中,而是由CSS创建和管理的。伪元素常用于在元素的内容前后插入新的内容或样式,如
::before
和::after
用于在元素的内容前后添加文本或图标。
2. 表示方法不同
- 伪类:在CSS中,伪类通常用一个冒号(:)来表示。例如,
:hover
、:active
、:first-child
等。 - 伪元素:在CSS3及以后的版本中,为了区分伪类和伪元素,伪元素使用双冒号(::)来表示。例如,
::before
、::after
、::first-letter
、::first-line
等。但需要注意的是,为了向后兼容,一些旧的浏览器或CSS代码可能仍然使用单冒号来表示伪元素,这在大多数情况下也是有效的。
3. 权重不同
- 在CSS的特异性(Specificity)计算中,伪类和伪元素的权重也有所不同。通常,伪类的权重高于伪元素。然而,具体的权重值可能因CSS选择器的复杂性和浏览器的实现而有所差异。
4. 使用场景不同
- 伪类:适用于需要基于元素状态来改变样式的场景,如鼠标悬停、激活状态、链接的访问状态等。
- 伪元素:适用于需要在元素内容前后添加额外内容或样式的场景,如添加图标、装饰性文本、清除浮动等。
总结
伪类和伪元素是CSS中两种强大的选择器,它们各自具有独特的作用和使用场景。伪类主要用于定义元素的特殊状态,而伪元素则用于创建和样式化不在文档树中的元素。了解它们之间的区别有助于更有效地使用CSS来设计和布局网页。