前言
先说说两点
- 伪元素和伪类区别
- 伪元素适合做什么
- 哪些标签不支持伪元素
伪元素和伪类区别
伪类:用于向某些选择器添加特殊的效果,用来是弥补了CSS选择器的不足,更方便获取信息。
伪元素:用于将特殊的效果添加到某些选择器,用来创建了一个虚拟容器(元素),我们可以在其虚拟容器中添加内容或样式。
伪元素和伪类示意图:
上图伪类元素使用两个冒号 (::) ,伪类使用一个冒号 (:)。
当然伪元素也可以只使用一个冒号 (:),css2的写法。
同时也推荐使用一个冒号 (:)的写法,因为两个冒号 (::) 是css3的写法对IE不兼容。
伪元素适合做什么
大家最常用的估计也就是用来 清除浮动 吧
.wrap:after { // 清除浮动 content: " "; display: table; clear:both; }
其实 before/after伪元素应用非常广泛,很多大厂和老外的网站上相当的普及以及兴盛伪元素。
before/after伪元素相当于在元素内部插入两个额外的标签,其最适合也是最推荐的应用就是图形生成。在一些精致的UI实现上,可以简化HTML代码,提高可读性和可维护性。
哪些标签不支持伪元素
比如 <img> 、<input>、<iframe>,这几个标签是不支持类似 img::before 这样使用。
前面说了 before/after伪元素相当于在元素内部额外的标签, input,img,iframe 等元素都不能包含其他元素,所以不能通过伪元素插入内容。
实际项目中使用before/after伪元素
一、清除浮动
.wrap:after { // 清除浮动 content: " "; display: table; clear:both; }
or
.wrap:after {// 清除浮动 content:""; display:block; height:0; visibility:hidden; clear:both; } .wrap { *zoom: 1; }
二、icon小图标(雪碧图)
三、画一个倒三角
四、状态底线
效果图
代码如下:
<div class="line">这是我们的底线</div>
.line { position: relative; width: 7em; height: 20px; line-height: 20px; } .line:after, .line:before { content: ""; display: block; width: 4em; position: absolute; top: 10px; border: 1px solid #e9e9e9; } .line:before { left: -4.5em; } .line:after { right: -4.5em; }
结尾
大家了解 before/after伪元素 特性后可以在工作中使用的地方很多。 一个很不错的东西。