图标字体 101

关于图标字体你需要知道的一切——它们是什么、如何工作,以及为你的项目选择哪种格式。

什么是图标字体?

图标字体是一种字样,其中的字形——通常是字母和数字——被替换为象形符号。图标字体不渲染字母"A",而是渲染一个主页图标、搜索放大镜或购物车图标。

由于图标存储在字体文件中,它们的行为与文字完全一样。你可以用 font-size 将其缩放到任意大小,用 color 改变颜色,添加文字阴影,应用 CSS 过渡,甚至为其添加动画——而无需触碰任何一个图片文件。

这种方式带来了几个实际好处:

  • 分辨率无关——矢量轮廓在任何屏幕密度下都能清晰缩放
  • 极小的体积——一个压缩字体文件替代了数十个独立图片资源
  • CSS 控制——颜色、大小、阴影、不透明度和悬停状态都可以用文字样式免费实现
  • 单次 HTTP 请求——整个图标集通过一次网络往返加载完毕

简史

在早期网络中,开发者依赖单独的图片或 CSS 图片精灵——大型合成图片,其中每个图标占据一个固定的矩形区域。精灵减少了 HTTP 请求,但很脆弱:添加或调整图标意味着重新生成整个精灵表并手动更新像素偏移量。

2012 年前后,Font AwesomeIcoMoon 等项目推广了一种更简洁的替代方案:将图标打包为映射到 Unicode 私有使用区的字体字形。设计师只需更改一个 @font-face 声明即可替换整套图标集,开发者可以用与文字相同的 CSS 来控制图标样式。这项技术迅速普及,并仍然是采用单色图标的设计系统的可靠、低开销之选。

图标字体 vs SVG 图标

十多年来,"图标字体 vs 内联 SVG"的争论一直是前端讨论的常见话题。两种方式都有效——正确的选择取决于你的项目需求。

图标字体

  • 单次 HTTP 请求——一个字体文件提供所有图标
  • 极简 CSS 样式——像普通文字一样修改 colorfont-sizetext-shadow
  • 仅支持单色——每个字形只支持单一填充色
  • 即插即用——添加一个样式表链接,使用 CSS 类,搞定

内联 SVG

  • 多色支持——每条路径可以有独立的填充、描边或渐变
  • 默认无障碍——<title>aria-label 为屏幕阅读器提供真实语义
  • 可单独缓存——未使用的图标永远不会被下载
  • 精细控制——对单条路径添加动画,为每个元素应用滤镜

SVG 精灵

  • 将多个 SVG 合并到单个 <symbol> 精灵表
  • 通过 <use href="#icon-name"> 引用图标
  • 兼具两者优点——单次请求、多色、无障碍——但需要更复杂的构建管道
结论
图标字体对于基于单色图标的设计系统仍然是优秀选择。它们易于集成、性能良好、兼容性广泛。如果图标需要多种颜色或逐路径动画,内联 SVG 或 SVG 精灵是更合适的方案。

格式对比

图标字体可以打包为五种文件格式,各有不同的压缩方式、浏览器支持和使用场景。以下是一目了然的对比:

格式压缩文件大小浏览器支持最适用于
.woff2Brotli最小97%+现代网页(推荐)
.woffzlib较小98%+广泛兼容兜底
.ttf中等98%+桌面应用、开发
.svg最大有限旧版 iOS、调试
.eot可选中等仅 IEIE 6-8 旧版支持

选择正确的格式

不确定应该包含哪些格式?使用这个实用决策指南:

  • 只选一种——使用 WOFF2。它提供最佳压缩(Brotli),覆盖 97%+ 的浏览器。
  • 需要支持 IE 11——使用 WOFF2 + WOFF。WOFF 覆盖不支持 Brotli 解码的剩余浏览器。
  • 需要支持 IE 8——使用 WOFF2 + WOFF + EOT。EOT 是 Internet Explorer 6-8 能理解的唯一格式。
  • 桌面应用——使用 TTF。它是 Windows、macOS 和 Linux 上操作系统级字体渲染的原生格式。
  • 调试字体问题——检查 SVG Font。其 XML 结构人类可读,便于验证字形路径和元数据。
提示
大多数现代项目只需要 WOFF2。仅在浏览器支持矩阵有需求时才添加额外格式。

按格式深入了解

在 Bobcorn 中
Bobcorn 一键生成全部五种字体格式,外加 CSS、JS symbol 精灵和 HTML 演示页面。阅读导出指南 →