CSS 伪元素

伪元素(pseudo-element)用来给元素添加"并不存在于 HTML 中"的部分,比如段落的第一行、第一个字,或者元素前后的装饰内容。写样式时不用改动 HTML 结构,就能做出很多精巧的效果。

伪元素的基本语法

伪元素使用两个冒号,后面跟一个关键字:

selector::pseudo-element {
  属性: 值;
}
p::first-line { color: red; }        /* 段落的第一行 */
p::first-letter { font-size: 2em; }  /* 段落的第一个字 */

注意:::first-line 与 ::first-letter 只能用于块级元素,且能设置的属性有限(如颜色、字体等)。

用 ::before 与 ::after 插入内容

这两个伪元素会在元素内容的前面或后面生成一个"虚拟盒子",必须搭配 content 属性才有内容:

a::after {
  content: " ↗";          /* 在链接文字后追加箭头 */
  color: gray;
}
h2::before {
  content: "■ ";
  color: orange;           /* 在标题前加一个橙色方块 */
}
<a href="https://example.com">访问官网</a>
<h2>今日要闻</h2>

运行效果:链接文字后多了一个灰色箭头,标题前多了一个橙色方块——HTML 里完全没有这些字符。

画图标与装饰线

伪元素经常被用来"画"纯 CSS 图标或线条,从而减少图片请求:

.line-title::after {
  content: "";
  display: block;
  width: 60px;
  height: 3px;
  background: #e74c3c;   /* 标题下方一条红色短线 */
}

运行效果:标题下方出现一条 60 像素宽的红色短装饰线,常用于新闻类网站的小标题。

用伪元素清除浮动

上一节讲的 clearfix 正是 ::after 的经典用途:在容器末尾插入一个空的块级元素并清除浮动,从而撑起父容器高度:

.clearfix::after {
  content: "";
  display: block;
  clear: both;   /* 清掉两侧浮动,父容器不再塌陷 */
}
<div class="clearfix">
  <div style="float: left; width: 50%;">左栏</div>
  <div style="float: left; width: 50%;">右栏</div>
</div>

运行效果:父容器高度恢复正常,两个浮动子栏并排显示,比额外加一个空的 <div style="clear:both"> 更干净。

小结

伪元素用两个冒号表示:::first-line 与 ::first-letter 美化文字局部,::before 与 ::after 借助 content 在元素前后插入装饰内容或图标,clearfix 也是它的拿手好戏。一个冒号是伪类、两个冒号是伪元素,记住这条就不容易混了。

笔记加载中…