:after和:before炫酷用法总结
引入
提到伪类,在我的印象中最常用的不过是:hover、:active、:link、:visited,还有css3里的常用伪类选择器:last-child、:first-child、nth-child(n)等等,说实在其他的我发现"然并卵"。
百度一下:after和:before会发现有很多关于研究它们用法的文章,形形色色各式各样,说明这两个伪元素在实际工作中还是很实用的,再结合css3的动画,它们能为页面添加很多意想不到的效果!
从学习伪类,不小心又延伸到了伪类元素(eg.我们常见的::before和:hover之间为什么缺少了一个冒号呢?),那什么又叫伪类元素?伪类和伪类元素有什么区别?下面就跟着我一起来学习一下吧O(∩_∩)O~有说的不对的地方欢迎批评指正!~

伪类和伪元素
w3c上对伪类和为元素的定义分别为,
- 伪类:伪类用于向某些选择器添加特殊的效果。
- 伪元素:伪元素用于将特殊的效果添加到某些选择器
css3为了明确伪类和伪元素的区别,已经明确了单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素
span:hover //伪类
span::before //伪元素
但是,为了保证兼容性,现在伪元素普遍还是使用单引号。下面我将用单引号的形式给大家做介绍~
常见的伪类(pseudo-classes)和伪元素(pseudo-elements)

伪元素的兼容性
- Chrome 2+,
- Firefox 3.5+ (3.0 had partial support),
- Safari 1.3+,
- Opera 9.2+,
- IE8+ (with some minor bugs),
- 几乎所有的移动浏览器。

伪元素:before和:after的定义和基本用法
定义
:before 选择器在被选元素的内容前面插入内容。
:after 选择器在被选元素的内容后面插入内容。
使用
使用 content 属性来指定要插入的内容。
content有几个比较有用的值:
- [String] – 使用引号包括一段字符串,将会向元素内容中添加字符串。示例:
a:after { content: "↗"; }
- attr() – 调用当前元素的属性,可以方便的比如将图片的 Alt 提示文字或者链接的 Href 地址显示出来。示例:
a:after { content:"(" attr(href) ")"; }
- url() / uri() – 用于引用媒体文件。示例:
h1::before { content: url(logo.png); }
- counter() – 调用计数器,可以不使用列表元素实现序号功能。具体请参见 counter-increment 和 counter-reset 属性的用法。示例:
h2:before { counter-increment: chapter; content: "Chapter " counter(chapter) ". " }
----------------------------------- 一个粗糙的栗子 ---------------------------------------
为了写出让自己看得懂也能让别人看的懂的博客,下面我们来举一个(粗糙的)栗子~
详细代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
blockquote{
background-color: #ccc;
color: #fff;
height: 100px;
width: 400px;
text-align: center;
line-height: 100px;
}
blockquote:hover:before{
content: '啊啊啊啊哦';
color: red;
} blockquote:hover:after{
content: '啊啊啊啊哦诶';
color: green;
}
</style>
</head>
<body>
<blockquote>我是一个blockquote</blockquote>
</body>
</html>
鼠标没有移动到blockqoute上的时候是酱紫的,

鼠标移动到blockqoute上的时候是酱紫的,

这样就实现了 “ 伪元素:before和:after将特殊的效果添加到blockqoute上的效果 ”,当然这个很糙的栗子只是体现了它的基本用法而已,下面我们来了解一下它的一些有意思的用法吧~

有意思的用法
- 清浮动
好吧,第一个用法确实没什么意思╮(╯_╰)╭,但是很实用有木有~(~ ̄▽ ̄)~
网上在介绍清浮动中最狂拽炫酷吊炸天的清浮动方法 : ) ,只要把.clearfix加在浮动父级就可以了
.clearfix{zoom:1;}
.clearfix:after {clear:both;content:'.';display:block;width: 0;height: 0;visibility:hidden;}

给浮动父级添加clearfix后

- 模拟float:center(当然并没有center这个值,只是模拟)


这样利用伪元素:before和浮动,就能创造出两个没有内容的占位块,实现文字环绕图片的效果了~~效果蛮不错的有木有
.box .left{ //左边的文字块
float: left;
}
.box .left:before{
content: '';
height: 245px;
width: 153px;
float: right;
}
.box .right{ //右边的文字块
float: right;
}
.box .right:before{
content: '';
height: 245px;
width: 153px;
float: left;
}
- 一些实用的小图标、小图形

这些图标都是可以利用伪元素做出来的哟!~不用再引用麻烦的bootstrap图标了,还得引入他们的一堆文件惹,真麻烦~ ( ̄~ ̄) ~真矫情
DEMO(实用小图标的源css代码都在这里面哟!)

还有3D的ribbons,不用图片也可以呢!只要只兼容IE8+就可以用啦,Everybody loves ribbons,so do I. 时常觉得CSS真心是艺术~
DEMO(ribbon源码)
- 作为列表序号
怎样作为列表序号呢?我先举个栗子~

像这样的1,2,3的序号一般大家是怎样做的呢?用span?用图片?是不是用了span后还要进行定位?是不是很麻烦呢?
现在我们可以用伪元素来做列表序号,而且列表的一项删除了以后,其他的列表序号会自动改变,成为一个有顺序的列表~484很方便!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
} ul{
width:1000px;
margin: 0 auto;
counter-reset:li;
} li{
list-style: none;
} ul>li{
background-color: #ccc;
margin-top: 10px;
} ul>li:before{
content: counter(li);
counter-increment:li;
background-color: #333;
padding: 0 5px;
color: #fff;
margin-right: 10px;
}
</style>
</head>
<body>
<ul>
<li>List item one</li>
<li>The second item on the list</li>
<li>Number three is a bit longer, with some lorem ipsum for good measure. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</li>
<li>And here is number four.</li>
<li>The fifth item on the list</li>
<li>The sixth item on the list</li>
</ul>
</body>
</html>
不过这里需要一个用到content的一个属性,那就是counter()。对于couter又是一个知识点,后期可以进行深入了解,这里找到了一个相关的有用博文,请戳~
- tooltip
作为文字提示~在这里我就不赘述啦
- 炫酷导航效果
这些导航真的很炫酷,除了很多css3的效果外,很多效果都用到了:before和:after伪元素~有空的时候一定要一个个做做试试看!
- 其他
对于伪元素的应用上还有很多值得人去探寻的东西,我提到的估计也不过是冰山一角,小小的伪元素竟然能实现那么多的功能~看来需要学的还有很多

参考资料:http://segmentfault.com/a/1190000000484493
http://www.w3cplus.com/css3/pseudo-element-roundup.html
:after和:before炫酷用法总结的更多相关文章
- 简单CSS3实现炫酷读者墙
如题,给大家介绍和讲解几个常用的CSS3属性,并用到实处. 先看demo(请使用Chrome或者Firefox浏览,IE的靠边): 点此查看实例 觉得爽的可以继续阅读下面的知识点,感觉不爽的可绕行. ...
- jQuery.smoove — jQuery和CSS3炫酷滚动页面内容元素动画特效插件
插件介绍: jQuery-smoove是一款jQuery和CSS3炫酷滚动页面内容元素动画特效插件.该内容元素动画插件在页面滚动到指定位置时,该位置的HTML元素会执行指定的CSS3动画特效,如旋转. ...
- Css3炫酷总结使用
先从CSS3的选择器说起: E F:所有的子孙元素: E>F: E中的子元素: E+F:E元素之后的最近的选择器: E~F:E中所以后面兄弟元素(CSS3 不包括自己本身,前面也不包括) att ...
- Android开发必知--WebView加载html5实现炫酷引导页面
大多数人都知道,一个APP的引导页面还是挺重要的,不过要想通过原生的Android代码做出一个非常炫酷的引导页相对还是比较复杂的,正巧html5在制作炫酷动画网页方面比较给力,我们不妨先利用html5 ...
- Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI
1.概述 哈,今天给大家带来一个ViewPagerIndicator的制作,相信大家在做tabIndicator的时候,大多数人都用过 TabPageIndicator,并且很多知名APP都使用过这个 ...
- 教你做炫酷的碎片式图片切换 (canvas)
前言 老规矩,先上 DEMO 和 源码.图片区域是可以点击的,动画会从点击的位置开始发生. 本来这个效果是我3年前做的,只是当是是用无数个 div 标签完成的,性能比较成问题,在移动端完全跑不动.最近 ...
- 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈
本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建.并完成SEO优化,打造一个炫酷博客. 本站基于HEXO+Github搭建.所以你需要 ...
- 使用CoordinatorLayout打造各种炫酷的效果
使用CoordinatorLayout打造各种炫酷的效果 自定义Behavior -- 仿知乎,FloatActionButton隐藏与展示 NestedScrolling 机制深入解析 一步步带你读 ...
- 使用Three.js实现炫酷的赛博朋克风格3D数字地球大屏 🌐
声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 近期工作有涉及到数字大屏的需求,于是利用业余时间,结合 Three.js ...
随机推荐
- 转载:[转]如何学好3D游戏引擎编程
[转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...
- java构造器
java的构造器不是方法,因为没有返回值. 构造器可以重载. 构造器的访问说明符: private:只有本类可以使用这个构造器. protected:这个类的子类和包中的类都可以使用此构造器. pub ...
- 【MySQL】事务没有提交导致 锁等待Lock wait timeout exceeded异常
异常:Lock wait timeout exceeded; try restarting transaction 解决办法:(需要数据库最高权限) 执行select * from informati ...
- JavaScript 笔记
function (函数)document(文档 get获得文档中..) <script type="text/javascript"> function yz(){ ...
- 循环处理--sqlserver
alter PROCEDURE [dbo].[sp_gongzi] @gongzi_yf varchar(7) as DECLARE @input_id varchar(20)DECLARE @s ...
- Orchard Application Host
https://orchardapphost.codeplex.com/ 近一步将Orchard框架发扬光大,还可以用来作为非Web应用的框架,如控制台程序,同时使用到Orchard框架的特性: 1. ...
- vs的dll引用机制
vs2012编译的时候,遇到一个问题就是项目A中运行时缺失dll的问题,项目A引用类库B,类库B引用了x,y等dll,编译A项目的时候,出现x没拷贝到bin 目录. 通过跟踪编译输出发现,x没拷贝的原 ...
- Http规范
1. 关于 HTTP Basic Authentication http://blog.itpub.net/23071790/viewspace-709367/ 通过以下代码,提示用户登录 Respo ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.4,增加系统设置、最近联系人、群功能(源码)
自从上次版本(GG叽叽V3.2,增加离线消息.离线文件功能)发布后,我个人觉得主要的大功能都实现得差不多了,接下来的几个版本将不断优化GG的细节,提高其可用性.这次版本更新的内容主要是为GG增加了系统 ...
- javascript 设计模式-----享元模式
四个轮子,一个方向盘,有刹车,油门,车窗,这些词首先让人联想到的就是一辆汽车.的确,这些都是是一辆车的最基本特征,或者是属性,我们把词语抽象出来,而听到这些词语的人把他们想象陈一辆汽车.在代码里面也是 ...