最可控方式是用@font-face直接加载本地.woff2或cdn图标字体,需声明唯一font-family、正确相对路径、font-weight:normal、font-style:normal及font-display:swap;css类通过::before的content使用\e900等unicode转义调用图标。

怎么用 @font-face 加载自定义图标字体文件
直接用 CDN 或本地 .woff2 文件加载图标字体最可控,别依赖第三方 CSS 框架自带的 @font-face 规则——它们常带多余声明或跨域限制。
关键点:字体格式优先选 .woff2(压缩率高、兼容现代浏览器),备选 .woff;font-display: swap 必须加,否则图标会空白闪动。
- 确保
src中的路径正确:本地文件用相对路径如url('./iconfont.woff2'),CDN 地址需确认 CORS 头允许加载 -
font-family名必须唯一且不含空格,例如'MyIconFont',后续所有font-family引用都得严格一致 - 别漏掉
font-weight: normal和font-style: normal,否则某些浏览器可能忽略规则
@font-face {
font-family: 'MyIconFont';
src: url('./iconfont.woff2') format('woff2');
font-weight: normal;
font-style: normal;
font-display: swap;
}
如何用 CSS 类名映射 Unicode 字符显示图标
图标字体本质是把符号塞进私有 Unicode 区(比如 U+E900),靠 CSS 类名绑定对应字符。不能靠复制粘贴“看起来像图标”的文字——那只是占位符,实际渲染依赖字体和 Unicode 码点。
常见错误:类名写成 .icon-home 却没定义 ::before 内容,或内容用了错误的 Unicode(比如把 \e900 写成 \uE900)。
- Unicode 码点在 CSS 中必须用反斜杠 + 小写十六进制,如
\e900(不是\U+E900或) - 务必设置
font-family: 'MyIconFont',且该字体必须已通过@font-face正确注册 - 推荐用
display: inline-block+vertical-align: middle避免基线对齐错位
.icon-home::before {
content: '\e900';
font-family: 'MyIconFont';
display: inline-block;
vertical-align: middle;
}
为什么 content 里放实体字符(如 )不生效
HTML 实体(...)只在 HTML 文本中解析,CSS 的 content 属性不识别它——这是最常踩的坑。浏览器看到 content: '',就真当它是五个 ASCII 字符渲染,不会转成图标。
正确做法只有两种:一是用 CSS 的 Unicode 转义(\e900),二是用 JS 动态插入时用 String.fromCodePoint(0xE900) 生成字符再设为文本节点。
- 检查开发者工具 Elements 面板,看伪元素是否渲染出字符:如果显示方块或问号,说明字体没加载成功或码点错
- 用浏览器 DevTools 的 Computed 标签页,确认
font-family最终计算值确实是你的图标字体名 - 避免在
content中混用引号类型:单引号内不要出现未转义的单引号,否则 CSS 解析失败
SVG 替代方案比图标字体更可靠吗
是的,尤其对需要颜色控制、响应式缩放、无障碍支持的场景。图标字体无法单独改某个图标的颜色(除非整个文字着色),也无法用 CSS 控制描边粗细或渐变填充。
但 SVG inline 方式(直接写 <svg><path></path></svg>)体积大、复用难;用 <use></use> 引用外部 sprite 则要处理跨域和缓存刷新问题。
- 若项目已用图标字体且稳定,不必强行替换;但新项目建议优先考虑 SVG symbol sprite +
<use></use> - 注意
<use></use>在 IE 中不支持外部引用,必须内联或用 polyfill - 图标字体仍有优势:纯 CSS 控制、适合按钮内联小图标、HTTP/2 下多图标复用一个字体文件更省请求数
真正麻烦的是混合使用——比如同时引入 Font Awesome 的字体和自定义 SVG,容易因 CSS 权重或字体回退逻辑导致图标错乱。选一种,贯彻到底。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











