@font-face无法加载全部字体问题求助
解决@font-face仅加载常规字体的问题
你的@font-face定义本身是没问题的,结合Gulp+Sass的环境来看,问题大概率出在字体调用逻辑、资源路径处理或者编译优化上,给你几个具体的排查和解决方向:
1. 确认页面中是否正确指定了对应字体权重
浏览器只会加载当前页面实际用到的字体,如果你没有给元素明确设置匹配的font-weight,它只会默认加载font-weight: normal的Regular字体:
- 要调用细体或粗体,必须在CSS/Sass里明确对应权重,比如:
注意:不能靠自定义类名或其他属性区分,必须通过.title-bold { font-family: 'Atlas Grotesk'; font-weight: bold; // 和@font-face里的bold对应 } .text-thin { font-family: 'Atlas Grotesk'; font-weight: 100; // 和@font-face里的100对应 }font-weight和@font-face定义的值严格匹配。
2. 检查Gulp的字体文件路径同步
如果你的Gulp任务有处理静态资源,要确保字体文件被正确复制到编译后的目录,和CSS里的路径一致:
- 比如源字体在
src/fonts/,编译后的CSS在dist/css/,那字体必须被复制到dist/fonts/,否则CSS里的url('fonts/xxx')会找不到文件。 - 可以在Gulp里添加一个同步字体的任务:
记得把这个任务和Sass编译任务关联,确保每次编译都同步字体资源。gulp.task('copy-fonts', function() { return gulp.src('src/fonts/**/*') .pipe(gulp.dest('dist/fonts')); });
3. 排查Sass/CSS压缩优化的影响
部分Gulp插件(比如gulp-clean-css)会做冗余代码清除,如果页面暂时没有用到Thin和Bold字体,可能会把对应的@font-face规则删掉:
- 测试阶段可以暂时关闭CSS压缩,或者在页面里添加隐藏的测试元素强制触发字体加载:
<div style="font-family: 'Atlas Grotesk'; font-weight: 100; visibility: hidden;">测试细体</div> <div style="font-family: 'Atlas Grotesk'; font-weight: bold; visibility: hidden;">测试粗体</div>
4. 清理浏览器缓存
浏览器可能缓存了旧的CSS或字体文件,导致新的@font-face规则不生效:
- 打开开发者工具(F12),在Network面板勾选Disable cache,刷新页面重新加载;
- 或者给字体文件加版本号,比如
url('fonts/hinted-AtlasGrotesk-Thin.woff2?v=1.0'),强制浏览器重新请求资源。
先从这几个方向排查,应该能解决问题~
内容的提问来源于stack exchange,提问作者Janus
相关产品推荐
相关产品推荐

