0

0

解决 CSS 中 @font-face 无法加载自定义字体的常见问题

花韻仙語

花韻仙語

发布时间:2026-03-14 15:49:13

|

592人浏览过

|

来源于php中文网

原创

解决 CSS 中 @font-face 无法加载自定义字体的常见问题

本文详解 @font-face 失效的典型原因,包括语法错误、格式标识不规范、CSS 优先级冲突等,并提供可直接运行的修复方案与最佳实践。

本文详解 `@font-face` 失效的典型原因,包括语法错误、格式标识不规范、css 优先级冲突等,并提供可直接运行的修复方案与最佳实践。

在 Web 开发中,通过 @font-face 引入自定义字体(如波斯语常用字体 BYekan)是提升多语言界面一致性的关键步骤。但许多开发者会遇到“字体声明无报错、路径正确、文件完好,浏览器却仍显示默认字体”的问题。这通常并非环境或网络问题,而是 CSS 语法细节疏漏所致。以下为系统性排查与修复指南。

✅ 正确的 @font-face 声明结构

原始代码中存在两个关键错误:

  • .ttf 字体的 format() 参数误写为 'ttf'(应为 'truetype');
  • src 属性末尾多了一个悬空逗号(trailing comma),导致整个 src 值被浏览器解析为无效声明(尤其在 Safari 和旧版 Chrome 中静默失败)。

✅ 正确写法如下(推荐兼容现代浏览器的最小安全集):

@font-face {
  font-family: 'BYekan';
  font-style: normal;
  font-weight: 400; /* 推荐显式声明,避免与 font-weight: normal 的隐式映射混淆 */
  src: url('../resources/BYekan.woff2') format('woff2'),
       url('../resources/BYekan.woff')  format('woff'),
       url('../resources/BYekan.ttf')   format('truetype');
  /* 注意:无尾随逗号;.ttf 必须用 'truetype',非 'ttf' */
}

? 补充说明:format() 的取值是标准化关键字,W3C 规范明确要求 .ttf 对应 'truetype',.otf 对应 'opentype',.woff2 对应 'woff2'。使用错误字符串将导致该字体源被忽略。

立即学习前端免费学习笔记(深入)”;

PixVerse
PixVerse

PixVerse是一款强大的AI视频生成工具,可以轻松地将多种输入转化为令人惊叹的视频。

下载

⚠️ 常见 CSS 使用陷阱

即使 @font-face 声明正确,字体仍可能不生效——往往因调用时的拼写或优先级问题:

  • ❌ 错误示例:font-family: BYekan !importan;
    → 缺少字母 t,!importan 是非法声明,整条规则被丢弃。

  • ✅ 正确写法:font-family: 'BYekan', sans-serif !important;
    (注意引号增强可读性;!important 仅在必要时使用,且拼写必须完整)

同时,请确保字体名称在 @font-face 与 font-family 中完全一致(区分大小写、空格、引号)。例如:

/* ✅ 一致声明 */
@font-face { font-family: 'BYekan'; ... }
.tab-buuton { font-family: 'BYekan', sans-serif; }

? 验证与调试建议

  1. 检查 DevTools → Elements → Computed
    选中目标元素(如 .tab-buuton),查看 font-family 计算值是否包含 'BYekan';若显示为 sans-serif 或其他后备字体,说明加载失败或未匹配。

  2. 确认字体文件可访问
    在浏览器地址栏直接访问 http://yourdomain.com/resources/BYekan.woff2,应能下载或预览字体文件(HTTP 200 状态码)。404 或 CORS 错误需单独处理。

  3. 优先使用 WOFF2
    .woff2 压缩率高、兼容性好(Chrome 36+、Firefox 39+、Edge 14+、Safari 13.1+)。可将它置于 src 列表首位,让现代浏览器优先加载。

? 完整可运行示例

<!DOCTYPE html>
<html dir="rtl">
<head>
  <style>
    @font-face {
      font-family: 'BYekan';
      font-style: normal;
      font-weight: 400;
      src: url('https://db.onlinewebfonts.com/t/52ce4de2efeeb8b18dcbd379711224f3.woff2') format('woff2'),
           url('https://db.onlinewebfonts.com/t/52ce4de2efeeb8b18dcbd379711224f3.woff') format('woff'),
           url('https://db.onlinewebfonts.com/t/52ce4de2efeeb8b18dcbd379711224f3.ttf') format('truetype');
    }

    body {
      font-family: 'BYekan', Tahoma, sans-serif;
      background: #1a1a1a;
      color: white;
      margin: 0;
    }

    .tab-buuton {
      background: transparent;
      border: none;
      color: white;
      font-family: 'BYekan', sans-serif;
      font-size: 16px;
      padding: 8px 16px;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="tab">
    <button class="tab-buuton">صفحه اصلی</button>
    <button class="tab-buuton">ورزش ها</button>
  </div>
</body>
</html>

✅ 总结:关键检查清单

  • [ ] @font-face 中 src 列表无尾随逗号
  • [ ] 所有 format() 参数使用标准关键字('woff2', 'woff', 'truetype')
  • [ ] 字体文件路径正确,且可通过浏览器直接访问
  • [ ] font-family 调用时名称与 @font-face 中 font-family 严格一致
  • [ ] CSS 中无拼写错误(如 !important 拼错)、无语法中断(如缺失分号)
  • [ ] 在 DevTools 中验证字体是否被成功加载并应用

遵循以上规范,99% 的 @font-face 加载失败问题均可快速定位并解决。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1067

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

845

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1740

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

398

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

1038

2025.04.24

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

888

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

464

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号