基本概念

1.他们都是CSS伪元素,与:hover/:active等伪类不一样。 
2.:before/:after伪元素是在CSS2中提出来的,所以兼容性可能到IE8了。 
3.::before/::after是CSS3中的写法,为了将伪类和伪元素区分开。但是平时为了兼容性,还是会用一个冒号的写法。

基本用法

p:after{} img:before{}1212

这两个伪类下特有的属性 content ,用于在 CSS 渲染中向元素逻辑上的头部或尾部添加内容。注意这些添加不会改变文档内容,不会出现在 DOM 中,不可复制,仅仅是在 CSS 渲染层加入。比较有用的是以下几个值:

  • [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) ". " }

进阶用法 
我们最常用的就是用来清除浮动和制作三角之类的特殊元素了。 
现在大家常用的清除浮动的方法:

.clearfix {*zoom: 1;}.clearfix:before,.clearfix:after {display: table;line-height: 0;content: "";}.clearfix:after {clear: both;}123123

制作三角的方法:

    .c-main:before{    content: '';    border-top: 9px solid transparent;/*方框上部分背景颜色为透明*/
    border-bottom: 9px solid transparent;/*方框下部分背景为透明*/
    border-right: 9px solid #eee;/*箭头背景颜色*/
    position: absolute;/*绝对定位1*/
    top: 25px;/*距离顶部位置偏移量2*/
    left: -9px;/*距离左边位置偏移量3*/ /*123都是控制显示位置的*/
    }
    .c-main:after{    content: '';    border-top: 7px solid transparent;    border-bottom: 7px solid transparent;    border-right: 7px solid #fbfdfb;/*箭头背景颜色,覆盖前面的#eee颜色,使其颜色与整体颜色一致*/
    position: absolute;    top: 27px;    left: -7px;    }12345678910111213141516171819201234567891011121314151617181920

定位都是其次的,主要是看border设置。一边有颜色,其他三边透明就可以实现。

参考文章: 
http://blog.dimpurr.com/css-before-after/