:before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下:

1
2
3
4
5
6
7
8
9
#example:before {
    content: "#";
    color: red;
}

#example:after {
    content: "$";
    color: red;
}

这段代码会在#example元素内容之前插入一个’#‘,以及在内容之后添加一个’$‘,插入的行内元素是作为#example的子元素,效果如下:

#Here is the example content$ 需要注意的是如果没有content属性,伪类元素将没有任何作用。但是可以指定content为空,同时正如前面所说,插入的内容默认是一个行内元素,并且在HTML源代码中无法看到,这就是为什么称之为伪类元素的理由,所以也就无法通过DOM对其进行操作。

因为可以插入无法通过DOM进行操作的元素,所以被称为伪元素

1
2
3
4
5
6
#example:before {
    content: "";
    display: block;
    width: 100px;
    height: 100px;
}

伪类元素也会像其他子元素一样正常继承父元素的一些CSS属性,比如字体等。

除了插入文字内容,还可以指定其他内容:

1
2
3
4
5
6
p:before {
    content: url('img.jpg');
}
a:after {
    content: attr(href);
}

attr()函数会返回指定元素对应属性的值

浏览器支持情况 _ Chrome 2+, _ Firefox 3.5+ (3.0 had partial support), _ Safari 1.3+, _ Opera 9.2+, _ IE8+ (with some minor bugs), _ Pretty much all mobile browsers.