如何在 Vue.js 项目中添加字体

Posted

技术标签:

【中文标题】如何在 Vue.js 项目中添加字体【英文标题】:How to add font in Vue.js project 【发布时间】:2019-01-02 13:47:59 【问题描述】:

我有一个使用 Laravel 和 Vue.js 的项目,并且我使用 scss。我想在我的项目中添加新字体,但我不能这样做。 我创建文件fonts.scss,创建一个带有字体的变量

@font-face 
  font-family: "Proxima Nova Bold";
  src: url(/Proxima-Nova-Bold.otf);


$proxima-nova-bold: 'Proxima Nova Bold', sans-serif;

我有控制台错误GET http://local.my-domain/Proxima-Nova-Bold.otf net::ERR_ABORTED

这是我在 Vue 组件中导入 scss 文件的方法

@import '../../../fonts/fonts.scss';

这是我的 laravel 组合

let mix = require('laravel-mix');

mix.copy('resources/assets/images', 'public/images', false)
    .js('resources/assets/js/app.js', 'public/js')
    .sass('resources/assets/sass/app.scss', 'public/css')

我在哪里犯错了? 或者告诉我如何正确添加字体?

【问题讨论】:

你告诉它如何加载字体,你给它一个路径。如果public/Proxima-Nova-Bold.otf 中不存在该文件,则客户端无法请求它。确保确实如此。 是的,你是对的。但是我如何才能只在资源中工作,而不是在公共领域工作呢?也许我应该为 webpack 写一些规则? 是的。您应该为此使用file-loader 插件。 您的前端的确切构建设置是什么?拉拉维尔混合? Vue cli ?普通的 webpack ?对于第一个猜测,我没有看到在 url 中使用绝对路径的任何理由。使用相对路径,如果 webpack 设置正确,它将正确处理解析和捆绑字体。 @FrankProvost 我使用 laravel mix。在问题中添加代码sn-p 【参考方案1】:

适用于 vue3

    下载字体并将其与其他静态资源一起放置。 在 app.vue 中使用@font-face 注册字体系列,如下所示:
<style>
@font-face 
    font-family: <name_u_choose>;
    src: url('~@/assets/fonts/<static_font_file>.ttf');

    在您的组件中使用它,如下所示
<style>
<you-selector> 
    font-family: <name_u_chose_before>;

</style>

【讨论】:

【参考方案2】:

基于 laravel mix github https://github.com/JeffreyWay/laravel-mix/issues/1172 中的这个问题,laravel mix 会在正确引用字体时自动复制字体。

因此我建议在引用字体时使用相对路径。这实际上应该触发 laravel mix 在您的“公共”文件夹中创建一个文件夹“字体”

@font-face 
  font-family: "Proxima Nova Bold";
  src: url('./../fonts/Proxima-Nova-Bold.otf');

【讨论】:

这会在构建时导致错误,运行 yarn dev 的唯一方法就是这样 @font-face font-family: "Proxima Nova Bold"; src: url(/Proxima-Nova-Bold.otf); 【参考方案3】:

您可能需要在混音文件中添加这样的一行:

.copy('resources/fonts', 'public/fonts')

【讨论】:

在使用 laravel-mix 时应该不需要这个 这个方法只导入scss文件,不导入字体。如何导入字体文件?

以上是关于如何在 Vue.js 项目中添加字体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue.js 中动态添加字体真棒图标

如何在 Vue.js 中添加不同的字体真棒图标

如何在:title nav-tab bootstrap vue.js 上添加图标 fontawesome?

如何在 Vue.js 中显示 Firebase 数组项

构建后如何在 Vue.js 项目中存储 Firebase 凭据(env_var)

Vue.js学习系列--如何在sublime是vuejs代码呈现高亮状态