Vue 项目中如何引用本地字体(完整指南)

在前端开发中,我们经常会遇到需要使用自定义字体的场景,比如品牌字体、设计稿还原等。在 Vue 项目中引入本地字体其实非常简单,本文将一步步带你完整实现。

一、准备字体文件

首先,你需要下载好字体文件(常见格式):

  • .ttf

  • .woff

  • .woff2(推荐,体积更小)

然后将字体文件放到项目目录中,例如:

复制代码
src
 ├─ assets
 │   └─ fonts
 │       └─ myfont.woff2

二、在 CSS 中声明字体

在全局样式文件中(如 main.css、index.css 或 App.vue),使用 @font-face 声明字体:

复制代码
@font-face {
  font-family: "MyFont";
  src: url("@/assets/fonts/myfont.ttf") format("truetype");
  font-weight: normal;
  font-style: normal;
}

推荐写法(兼容性更好)

复制代码
@font-face {
  font-family: "MyFont";
  src: url("@/assets/fonts/myfont.woff2") format("woff2"),
       url("@/assets/fonts/myfont.woff") format("woff"),
       url("@/assets/fonts/myfont.ttf") format("truetype");
}

三、使用自定义字体

1. 全局使用

复制代码
body {
  font-family: "MyFont", sans-serif;
}

这样整个项目都会使用该字体。


2. 局部使用

复制代码
.title {
  font-family: "MyFont";
}

<div class="title">这是自定义字体</div>


四、常见问题及解决方案

1. 字体不生效

请检查以下几点:

  • 路径是否正确(推荐使用 @/assets/...)

  • font-family 名称是否一致

  • 是否被其他样式覆盖


2. 打包后字体 404

如果生产环境找不到字体,可以尝试以下方式:

方式一:使用相对路径
复制代码
src: url("../assets/fonts/myfont.ttf");
方式二:放入 public 目录

目录结构:

复制代码
public/fonts/myfont.ttf

引用方式:

复制代码
src: url("/fonts/myfont.ttf");

五、建议

在实际项目中,推荐:

  • 字体目录:src/assets/fonts

  • 字体格式优先级:

    woff2 > woff > ttf

原因:

  • woff2 体积最小,加载最快

  • woff 兼容性良好

  • ttf 作为兜底方案


六、总结

在 Vue 项目中引入本地字体的核心步骤只有三步:

  1. 放入字体文件

  2. 使用 @font-face 声明

  3. 在页面中应用

掌握这套流程后,你可以轻松实现设计稿中的各种字体效果,让项目更加专业和精致。

相关推荐
小码哥_常3 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮6 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀7 小时前
Vue插槽
前端·javascript·vue.js
qq_448011167 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan7 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352908 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝9 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing0310 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel10 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放10 小时前
Python基础语法练习题(73)
java·前端·python