阿里巴巴 Iconfont 三种引用方式(Unicode、Font-class、Symbol)的详细对比
·
下面是对阿里巴巴 Iconfont 三种引用方式(Unicode、Font-class、Symbol)的详细对比分析,从多个维度展示它们的差异和适用场景:

对比总表
|
特性 |
Unicode 引用 |
Font-class 引用 |
Symbol 引用 |
|
语法示例 |
|
|
|
|
实现原理 |
字体渲染 |
字体渲染 |
SVG 渲染 |
|
兼容性 |
IE6+ |
IE8+ |
IE9+ |
|
多色图标支持 |
❌ 不支持 |
❌ 不支持 |
✅ 支持 |
|
CSS 控制灵活性 |
仅单色 |
仅单色 |
多色/渐变/描边 |
|
渲染清晰度 |
一般(依赖字体抗锯齿) |
一般(依赖字体抗锯齿) |
优秀(矢量 SVG) |
|
CSS 控制方式 |
|
|
SVG 属性 ( |
|
图标大小调整 |
|
|
|
|
性能影响 |
字体文件加载 |
字体文件加载 |
SVG DOM 操作 |
|
使用便捷度 |
低(需记 Unicode) |
高(语义化类名) |
中(需 SVG 标签) |
|
伪元素支持 |
✅ 支持 |
✅ 支持 |
❌ 不支持 |
|
更新维护 |
需替换 Unicode 码 |
需更新类名 |
需更新 JS 文件 |
|
屏幕阅读器友好度 |
需 |
需 |
需 |
详细解析
1. Unicode 引用
<!-- 使用方式 -->
<span class="iconfont"></span>
<!-- CSS 定义 -->
<style>
.iconfont {
font-family: "iconfont";
font-size: 16px;
}
</style>
- 优点:
-
- 兼容性最好(支持 IE6)
- 无额外标签,最简洁的实现
- 缺点:
-
- 可读性差(需记忆 Unicode 编码)
- 不支持多色图标
- 调试困难(无法直观看到图标名称)
- 适用场景:兼容性要求极高的老旧项目
2. Font-class 引用
<i class="iconfont icon-search"></i>
- 优点:
-
- 语义化明确(通过类名识别图标)
- 兼容性较好(IE8+)
- 支持伪元素(
:before/:after)
- 缺点:
-
- 仍不支持多色图标
- 需额外维护类名映射
- 字体图标在 Retina 屏可能模糊
- 适用场景:常规单色图标需求(90% 场景)
3. Symbol 引用
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-alert"></use>
</svg>
<!-- 引入 JS 文件 -->
<script src="//at.alicdn.com/t/font_xxxx.js"></script>
- 优点:
-
- 完美支持多色/渐变图标
- 矢量渲染,高清显示
- 支持 CSS 精细控制(描边/透明度等)
- 可通过
currentColor继承父级颜色
- 缺点:
-
- 兼容性要求较高(IE9+)
- 额外 DOM 节点(可能影响性能)
- 不能用于伪元素
- 适用场景:多色图标/动画图标/高清显示需求
关键差异深度解析
🎨 颜色控制能力
|
方式 |
单色控制 |
多色控制 |
渐变支持 |
描边支持 |
|
Unicode |
✅ |
❌ |
❌ |
❌ |
|
Font-class |
✅ |
❌ |
❌ |
❌ |
|
Symbol |
✅ |
✅ |
✅ |
✅ |
示例:Symbol 多色控制
/* 通过 CSS 变量控制多色 */
.icon {
--primary-color: #f00;
--secondary-color: #0f0;
}
/* 修改 SVG 内部路径颜色 */
.icon path:nth-child(1) {
fill: var(--primary-color);
}
.icon path:nth-child(2) {
fill: var(--secondary-color);
}
⚡ 性能对比
- 加载性能:
-
- Unicode/Font-class:加载字体文件(通常 20-100KB)
- Symbol:加载 JS 文件(包含 SVG XML 内容,体积稍大)
- 渲染性能:
-
- Symbol 引用 50+ 图标时,DOM 节点数会显著增加
- 字体方式在图标复用场景更高效
- 缓存效率:
-
- 字体文件可被多个页面复用
- Symbol JS 文件同样可缓存
最佳实践建议
- 优先选择 Font-class:
<!-- 绝大多数场景的最佳选择 -->
<button>
<i class="iconfont icon-download"></i> 下载
</button>
- 多色图标用 Symbol:
<!-- 多色/复杂图标 -->
<div class="feature">
<svg class="icon-feature"><use xlink:href="#icon-premium"></use></svg>
<h3>高级功能</h3>
</div>
- 兼容方案(降级处理):
/* 针对 IE8 的降级 */
.iconfont {
font-family: 'iconfont';
}
/* 现代浏览器使用 Symbol */
@supports (fill: currentColor) {
.iconfont {
display: inline-block;
width: 1em;
height: 1em;
}
}
- 优化 Symbol 使用:
// 动态加载 Symbol(减少首屏负载)
if ('SVGSVGElement' in window) {
const script = document.createElement('script');
script.src = '//at.alicdn.com/t/font_xxxx.js';
document.body.appendChild(script);
}
升级迁移策略
- 单色项目:Font-class → Unicode(仅需替换类名为 Unicode)
- 基础转高级:Font-class → Symbol(添加 JS 文件,替换标签结构)
- 多项目统一:使用 Symbol + 全局组件(Vue/React 封装图标组件)
// React 图标组件示例
const Icon = ({ name, color, size }) => (
<svg
style={{ width: size, height: size, fill: color }}
aria-hidden="true"
>
<use xlinkHref={`#icon-${name}`} />
</svg>
);
根据项目需求选择合适方案:常规项目推荐 Font-class 为主 + Symbol 补充多色需求,可平衡开发效率、性能和功能需求。
更多推荐


所有评论(0)