伪类和伪元素
伪类和伪元素的区别,其实很简单,从字面上就可以理解。它们有一个共同的修饰词“伪”,那么“伪”是什么意思呢?就是假的呗。所以,伪类就是假的类,伪元素就是假的元素,这就是在字面上它们之间的区别。(我的记法:伪类(泪)正常2只眼睛流泪,但是是伪的所以就只有一行眼泪了:
,伪元素那就是2行了::
)下面我们再从定义上感受一下。
1.伪类
伪类存在的意义是为了通过选择器,格式化DOM树以外的信息以及不能被常规CSS选择器获取到的信息。
通过上面的概念我们知道了伪类的功能有两种:
1.格式化DOM树以外的信息。比如:<a>
标签的:link
、:visited
等。这些信息不存在于DOM树中。
2.不能被常规CSS选择器获取到的信息。比如:要获取第一个子元素,我们无法用常规的CSS选择器获取,但可以通过:first-child
来获取到。
2.伪元素
伪元素可以创建一些文档语言无法创建的虚拟元素。比如:文档语言没有一种机制可以描述元素内容的第一个字母或第一行,但伪元素可以做到(::first-letter
、::first-line
)。同时,伪元素还可以创建源文档不存在的内容,比如使用::before
或::after
。
3.伪类和伪元素的区别(CSS3下的区别)
通过上面的概念,我们就可以知道伪类与伪元素最本质的一个区别:
伪类其实是弥补了CSS选择器的不足,用来更方便地获取信息;
1 | HTML: |
1 | CSS: |
而伪元素本质上是创建了一个虚拟容器(元素),我们可以在其中添加内容或样式。
1 | HTML: |
1 | CSS: |
用伪元素来写,上面的代码其实就是:
1 | p::first-letter { |
所以,你可以理解伪元素本质上是创建了一个虚拟容器(元素)了吧。
4.主要用法
4.1伪类
1 :first-child
匹配第一个子元素。
1 | HTML: |
2 :last-child
匹配最后一个子元素。
1 | HTML: |
3 :first-of-type
匹配属于其父元素的第一个特定类型的子元素。
1 | HTML: |
这里有必要强调一下:first-child与``:first-of-type
的区别。如果你的CSS写成:
1 | p:first-child { |
页面是不会有变化的,因为<p>
元素并不是父元素<div>
的第一个子元素。
4 :last-of-type
匹配属于其父元素的最后一个特定类型的子元素。
1 | HTML: |
4.2 伪元素
1 ::before
在被选元素之前插入内容。需要指定content属性来插入内容。
1 | HTML: |
2 ::after
在被选元素之后插入内容。需要指定content属性来插入内容。
1 | HTML: |
3 ::first-letter
匹配元素中文本的首字母。
1 | HTML: |
4 ::first-line
匹配元素中第一行的文本(只能在块元素中使用)。
1 | HTML: |
5 ::selection
匹配被用户选中的部分。
1 | HTML: |