【转载】【CSS进阶】伪元素的妙用--单标签之美

原文作者:Chokcoco            原文链接:链接


本文主要讲述一下 伪元素 before 和 after 各种妙用。
:before和::before的区别
在介绍具体用法之前,简单介绍下伪类伪元素。伪类大家听的多了,伪元素可能听到的不是那么频繁,其实 CSS 对这两个是有区分的。
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
有时你会发现伪类元素使用了两个冒号 (::) 而不是一个冒号 (:),这是 CSS3 规范中的一部分要求,目的是为了区分伪类和伪元素,大多数浏览器都支持这两种表示方式。
  1. #id:after{
  1.  ...
  1. }

  1. #id::after{
  1.  ...
  1. }
单冒号(:)用于 CSS3 伪类,双冒号(::)用于 CSS3 伪元素。对于 CSS2 中已经有的伪元素,例如 :before,单冒号和双冒号的写法 ::before 作用是一样的。

所以,如果你的网站只需要兼容 webkit、firefox、opera 等浏览器,建议对于伪元素采用双冒号的写法,如果不得不兼容 IE 浏览器,还是用 CSS2 的单冒号写法比较安全。

更加具体的信息,可以看看 MDN 对 伪类和 伪元素的理解。
本文的主角就是伪元素 before 和 after ,下面将具体讲讲这两个伪元素的魅力。
利用 :after 清除浮动
这个估计是前端都知道,运用 after 伪元素清除页面浮动,不做过多解释。
  1. .clearfix:after {
  1.   content: ".";
  1.   display: block;
  1.   height: 0;
  1.   visibility: hidden;
  1.   clear: both;
  1. }

  1. .clearfix { 
  1.   *zoom:1; 
  1. }
伪元素与 css sprites
css sprites大家应该也不陌生,通过将多个图片 icon 合为一张图,从而为了减少 http 请求,很多网站对它的需求还是很大的。
【转载】【CSS进阶】伪元素的妙用--单标签之美

但是在制作过程中,存在着需要为每个 icon 需要预留多少边距的问题。看看下图:
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
【转载】【CSS进阶】伪元素的妙用--单标签之美
譬如上面这种情况(假设按钮中的图标是采用了css sprites),产品某天突然要求按钮从状态1变为状态2,那么css sprites原先预留的位置边距肯定就不够了,导致其他图形出现在按钮中。

而我们通常不会为了一个小 icon 多添加一个标签(不符合语义化)。

所以通常这种情况需要用到css sprites的话,都是在按钮中设置一个伪元素,将伪元素的高宽设置为原本 icon 的大小,再利用绝对定位定位到需要的地方,这样无论雪碧图每个 icon 的边距是多少,都能够完美适应。
变形恢复
有的时候,设计师们希望通过一些比较特殊的几何图形,表达不同的意思。
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
用 CSS3 transfrom 属性,我们可以轻松的得到一个梯形,菱形或者平行四边形。有时我们设计师们希望在这些容器内配上文字,譬如平行四边形可以表达一种速度之感。

但是如上图所示,内容文字也会跟着 CSS3 变换一起发生了扭曲,通常我们会用一个 div 做背景进行变换,而文字则是放在另外一个 div 中。

但是运用伪元素,我们可以去掉这些不合语义化多余的标签,运用 before 伪元素,将 CSS3 变换作用于伪元素上,这样变形不会作用于位于 div 上的的文字,而且没有使用多余的标签。

戳我看demo (请用 Chrome 浏览器打开)。
伪元素实现换行,替代换行标签
大家都知道,块级元素在不脱离正常布局流的情况下是会自动换行,而行级元素则不会自动换行。但在项目中,有需求是需要让行级元素也自动换行的,通常这种情况,我都是用换行标签 br 解决。而 《CSS SECRET》 中对 br 标签的描述是,这种方法不仅在可维护性方面是一种糟糕的实践,而且污染了结构层的代码。

运用 after 伪元素,可以有一种非常优雅的解决方案:
  1. .inline-element::after {
  1.   content:"\A";
  1.   white-space: pre;
  1. }
通过给元素的 after 伪元素添加 content 为 “\A” 的值。这里 \A 是什么呢?

有一个 Unicode 字符是专门代表换行符的:0x000A 。 在 CSS 中,这个字符可以写作 “\000A”, 或简化为 “\A”。这里我们用它来作为 ::after 伪元素的内容。也就是在元素末尾添加了一个换行符的意思。

而 white-space: pre; 的作用是保留元素后面的空白符和换行符,结合两者,就可以轻松实现在行内级元素末尾实现换行。
增强用户体验,使用伪元素实现增大点击热区
按钮是我们网页设计中十分重要的一环,而按钮的设计也与用户体验息息相关。让用户更容易的点击到按钮无疑能很好的增加用户体验,尤其是在移动端,按钮通常都很小,但是有时由于设计稿限制,我们不能直接去改变按钮元素的高宽。那么这个时候有什么办法在不改变按钮原本大小的情况下去增加他的点击热区呢?

这里,伪元素也是可以代表其宿主元素来响应的鼠标交互事件的。借助伪元素可以轻松帮我们实现,我们可以这样写:
  1. .btn::before {
  1.   content:"";
  1.   position:absolute;
  1.   top:-10px;
  1.   right:-10px;
  1.   bottom:-10px;
  1.   left:-10px;
  1. }
当然,在 PC 端下这样子看起来有点奇怪,但是合理的用在点击区域较小的移动端则能取到十分好的效果,效果如下:
【转载】【CSS进阶】伪元素的妙用--单标签之美
more magic – 单标签图案
上面介绍的是伪元素众多用法的一部分,伪元素的作用远不止于此。有了before 、after 两个伪元素。一个标签其实可以相当于 3 个标签来使用,而配合 CSS3 强大的 3D 变换、多重背景,多重阴影等手段,让单标签作画成为了可能:
单标签实现浏览器图标:
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美

单标签天气图标:
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美
 
【转载】【CSS进阶】伪元素的妙用--单标签之美