为什么要使用 :before 伪元素来显示字形图标?

Why use :before pseudo-elements to display glyph icons?

这个问题在我脑海里萦绕了很久。好像所有的字形图标库都是通过这种方式提供图标的,比如Font Awesome。这是将字形放入 css 的唯一方法吗?或者这是最好的方法吗?

a:before {
   font-family: FontAwesome;
   content: "\f095";
}

我觉得这个问题可以分成两个独立的问题:

  1. 为什么要为图标使用字体?

  2. 为什么要用:before伪元素显示?

对于第一部分,reasons are many,但它归结为易于使用(因为它们是矢量,本质上具有透明背景,可以轻松改变颜色)并且即使在旧版浏览器。

对于第二部分,使用伪元素意味着您的图标可以完全 "live" 在您的 CSS 文件中。除了在那里更容易编辑之外,这也是它们所属的地方 - 它们不是您内容的一部分,而是影响内容外观的东西,因此不应该出现在您的 HTML 中。将其视为 same distinction as between img tag and background-image CSS property(再次 - 设计与内容)。

此外,这也防止了一些奇怪的副作用,例如,伪元素不能被选中,因此不能被复制。如果不是这种情况,所有图标在复制时都会在您复制它们的目标中产生奇怪的字符。

您也可以将它们用作 'i' 标签。我们可以通过这种方式应用更多创意 css。这是一个代码笔:

http://codepen.io/anon/pen/gLdYqj

<script src="https://use.fontawesome.com/2d1d8af5b4.js"></script>
<div><i class="fa fa-user"></i></div>


div{
  font-size:50px;
}
i{
  color:blue;
}
i:hover{
  color:red;
  cursor:pointer;
}