伪类选择器:

用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的元素时,我们可以通过:hover来描述这个元素的状态。虽然它和普通的css类相似,可以为已有的元素添加样式,但是它只有处于dom树无法描述的状态下才能为元素添加样式,所以将其称为伪类。
伪类存在的意义是为了通过选择器,格式化DOM树以外的信息以及不能被常规CSS选择器获取到的信息。

伪元素选择器:

用于创建一-些不在文档树中的元素,并为其添加样式。比如说,我们可以通过:before来在一个元素前增加一-些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际.上不在文档树中。
伪元素可以创建- -些文档语言无法创建的虚拟元素。比如:文档语言没有- -种机制可以描述元素内容的第一一个字母或第一行, 但伪元素可以做到(first-letter. :firit-iline)。 同时,伪元素还可以创建源文档不存在的内容,比如使用::before 或::after。

伪类和伪元素选择器的区别:

  • 伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档数外的元素。因此,伪类与伪元素的区别在于:有没有创建一个文档树之外的元素。
  • 伪类本质上是为了弥补常规CSS选择器的不足,以便获取到更多信息;
  • 伪元素本质上是创建了-一个有内容的虚拟容器;
  • CSS3中 伪类和伪元素的语法不同;
  • 在CSS3中,已经明确规定了伪类用一一个冒号来表示,而伪元素则用两个冒号来表示。
  • 可以同时使用多个伪类,而只能同时使用一个的元素;

image.png

image.png