原文: A Whole Bounch of Amazing Stuff Pseudo Elements Can Do
翻译:http:haipi8.com/347
伪元素 :before 和 :after 能做出相当令人惊叹的效果。这两个伪元素可以给HTML中的任何元素增加两个可以自由操控的元素。这给了前端设计打开了无限的可能,而且不用添加影响语义的标签,以下是收集的令人惊奇的效果。
多重背景的画布
因为可以让伪元素绝对定位,你可以想象成给每个元素两个附加的层,Nicolas Gallagher 展示了很多这样的程序,包括多重边框,模拟CSS3多重背景以及等高列。
用一个元素做出更多的形状
上面的形状和其它很多的形状都可以用一个元素做出来,让它们更加实用了。相对于那些用1700个div做出的“纯CSS的咖啡杯”的巧妙设计,更实用
这里是一个六角星的例子:
#star-six { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid red; position: relative; } #star-six:after { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-top: 100px solid red; position: absolute; content: ""; top: 30px; left: -50px; }
打印样式中显示URL的链接地址
@media print { a[href]:after { content: " (" attr(href) ") "; } }
清除浮动
不用添加多余的标签清除container的浮动,伪元素就可以做到。著名的“clearfix”就是这样做的。只要给标签加上更语意化的“group”类名就可以了。
.group:before, .group:after { content:""; display:table; } .group:after { clear:both; } .group { zoom:1; /* For IE 6/7 (trigger hasLayout) */ }
模拟 float:center
有没有人用先不讨论,float属性真的没有center的值。浮动有left和right值,我们可以用伪元素占位划分出两列中间的空位,然后在那里放一张图片,可以模拟出这个效果。
标出代码块所用的语言
这个网站的代码块都用伪元素标出了语言
<pre rel="CSS"></pre>
pre:after { content: attr(rel); position: absolute; top: 22px; right: 12px; }
创造出一整套图标
Nicolas Gallagher把创造形状的的想法提升到另一个层次,没有用图片,只用(大多数都是)两个元素加上伪元素做出一套复杂的图标。
更有效地使用可用空间
CSS给你的,CSS也能拿走(原文:What CSS giveth, CSS can taketh away.)。我的意思是通过media queries伪元素可以显示或者移除伪元素。也许你想在空间有限时只展示图标,空间充裕时显示描述更清晰的文字。
让排版更华丽
如果伪元素的内容是文字,它们将继承父元素的字体设置。如果你给它们设置了内容,就可以给他们设置样式,比如,不同的字体,不同的颜色,让你的标题更华丽。
h2 { text-align: center; } h2:before, h2:after { font-family: "Some cool font with glyphs", serif; content: "\00d7"; /* Some fancy character */ color: #c83f3f; } h2:before { margin-right: 10px; } h2:after { margin-left: 10px; }
制作body border效果
用普通的border left 和 border right, 然后给伪元素fixed定位在顶部和底部,可以做出“body border”效果,不实用任何专门的元素。
body:before, body:after { content: ""; position: fixed; background: #900; left: 0; right: 0; height: 10px; } body:before { top: 0; } body:after { bottom: 0; } body { border-left: 10px solid #900; border-right: 10px solid #900; }
做一个闪闪发光的按钮
给伪元素设置 transparent white 或者 transparent gradient ,定位到按钮外面(用overflow:hidden;隐藏),鼠标经过时设置transition,就能让按钮在鼠标经过时有一道光闪过的效果。目前只能用Firefox 4或者5看,目前别的浏览器都不支持伪元素的transitions。
原作 Anton Trollbäck;Pseudoelementized 作者是 Nicolas Gallagher; 另外一个版本由我制作。
在链接上划过时,页面淡出效果
如果没有给元素设置相对定位,绝对定位的伪元素会相对于设置了相对定位的祖先元素定位。如果没有祖先元素设置相对定位,就会相对于跟元素定位。这样就能设置一个full-browser-window元素,把它保存到元素后面,鼠标经过时显示,就能做出“page fade out”效果了。
给有序列表的数字设置样式
想过给有序列表的数字设置样式吗?最后你肯定是用不够优雅的方法,比如用span包裹内容,设置li的样式,然后移除span的样式。或者更疯狂的用背景图片,或者干脆自己写上数字。这些方法都不够酷,用伪元素做计数器这样就好多了。
Make data tables responsive
大表格在小屏幕中看起来很糟糕,不是缩放,就是出现横向和纵向的滚动条,缩小后太小看不清。我们可以一起使用CSS media queries 和伪元素 Make data tables responsive 为小屏幕设置更有可读性的表格。
制作漂亮的tooltip
用HTML5 data attribute, 然后把属性的值放到伪元素中并设置样式,就能用CSS做出个性化的tooltip.【译注:原文回复中的另外一个演示】