## ::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用。 #### 相关知识点: 单冒号(`:`)用于CSS3伪类,双冒号(`::`)用于CSS3伪元素。(伪元素由双冒号和伪元素名称组成) 双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法, 比如`:first-line`、`:first-letter`、`:before`、`:after`等,而新的在CSS3中引入的伪元素则不允许再支持旧的单冒号的写法。 想让插入的内容出现在其它内容前,使用`::before`,否者,使用`::after`; 在代码顺序上,`::after`生成的内容也比`::before`生成的内容靠后。如果按堆栈视角,`::after`生成的内容会在`::before`生成的内容之上。 #### 回答: 在css3中使用单冒号来表示伪类,用双冒号来表示伪元素。但是为了兼容已有的伪元素的写法,在一些浏览器中也可以使用单冒号 来表示伪元素。 伪类一般匹配的是元素的一些特殊状态,如`hover`、`link`等,而伪元素一般匹配的特殊的位置,比如`after`、`before`等。