图标显示方块是因字体文件未加载成功,需检查network中fa-solid-900.woff2是否返回200,确认cdn链接位置正确、本地路径与css中url()严格匹配、vite/webpack是否正确处理webfonts,以及类名前缀是否符合fa版本要求。

图标显示方块,大概率是字体文件没加载成功
浏览器渲染图标时,fa-solid 这类类名只是触发 CSS 中的 @font-face 规则,真正画出图形的是 fa-solid-900.woff2 等字体文件。如果这些文件返回 404、被拦截或路径错位,就会 fallback 到系统默认字体,显示为□。
检查方法很简单:打开浏览器开发者工具 → Network 标签页 → 刷新页面 → 筛选 Font 类型 → 查看 fa-solid-900.woff2(或类似文件名)是否状态为 200。不是 200?问题就在这里。
- CDN 引入时,确保
<link>标签在内且未被其他资源覆盖 - 本地部署时,
all.min.css中声明的url('./webfonts/fa-solid-900.woff2')路径必须和实际文件位置完全一致(注意大小写、斜杠方向) - Vite 或 Webpack 构建项目中,
webfonts/文件夹默认不会自动复制到输出目录,需手动配置或改用public/目录存放
用对了 CDN,但类名还是不生效
Font Awesome v6+ 要求严格匹配前缀:fa-solid、fa-regular、fa-brands 缺一不可。v5 的 fa fa-envelope-square 在 v6 Kit 下完全无效,反过来也一样。
确认你当前用的 Kit 或 CDN 链接对应哪个版本:
- v5 Kit URL 示例:
https://kit.fontawesome.com/a*******5.js(无?v=6)→ 只能用fa fa-icon写法 - v6 Kit URL 示例:
https://kit.fontawesome.com/a*******5.js?v=6→ 必须用fa-solid fa-icon - CDN 链接如
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css→ 对应 v6,类名必须带风格前缀
混用(比如 v6 CSS + v5 类名)是导致方块最隐蔽也最常见的原因。
Laravel/Vue/若依等框架里字体文件被破坏或过滤
构建或打包阶段,某些工具会把 .woff、.ttf 当作二进制资源误处理——比如 Maven 默认启用 filtering,会损坏字体文件;Vite 不识别 webfonts/ 目录,导致构建后缺失;Webpack 若没配好 url-loader 或 asset-modules,也会丢掉字体。
- Maven 项目:在
pom.xml的<resources></resources>配置中显式排除字体文件,加<exclude>**/*.woff</exclude>等 - Laravel + Vite:把
webfonts/放进public/目录,CSS 中改用绝对路径url('/webfonts/fa-solid-900.woff2') - Vue CLI/Webpack:检查
vue.config.js是否设置了chainWebpack正确处理字体扩展名
浏览器缓存或跨域阻止字体加载
字体文件一旦被缓存为 404,后续即使修复路径,浏览器也可能继续返回旧响应;内网或企业环境还常因 CSP 策略或代理拦截 fontawesome.com 域名下的字体请求。
验证是否是缓存问题:
- 硬刷新(Ctrl+Shift+R)或隐身窗口测试
- Network 面板中右键该字体文件 → “Clear browser cache and hard reload”
- 检查 Response Headers 是否含
X-Content-Type-Options: nosniff导致 MIME 类型误判 - 若用 Kit 方式,登录 fontawesome.com/dashboard 查看 Kit 的
Version字段,比对实际加载的 JS 版本
真正棘手的往往不是“怎么引入”,而是“引入后谁动了字体文件的路径或内容”。每一步都得盯住 Network 面板里的真实请求,而不是只看 HTML 里写了什么。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











