如何使用nuxt js将字体嵌入到所有页面
Posted
技术标签:
【中文标题】如何使用nuxt js将字体嵌入到所有页面【英文标题】:How to embed font to all page with nuxt js 【发布时间】:2018-12-28 09:36:02 【问题描述】:我只是将 google 字体嵌入到 nuxt.config.js 中的全局设置中
link: [
rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Roboto'
]
但是如何将这种字体应用到每一页。
【问题讨论】:
【参考方案1】:使用以下规则更新您的 CSS:
body
font-family: 'Roboto', sans-serif;
如果您还没有设置 CSS 样式表,请在 assets
目录中创建一个名为 main.css
的新文件。在里面放上面的代码并保存。然后编辑nuxt.config.js
在head
对象后面添加这段代码:
css: [
'@/assets/main.css'
],
【讨论】:
【参考方案2】:新答案
使用@nuxt/google-fonts 包:https://google-fonts.nuxtjs.org
它使用起来很简单,并且支持包括下载字体在内的一系列选项。
旧答案
如果您想在您的应用中包含字体以便提供服务
从https://fonts.google.com/specimen/Roboto?selection.family=Roboto 下载字体(打开抽屉并下载.zip
文件)。
-
将 .zip 的内容解压缩到
./assets/fonts/*
(如果不存在则创建)。
创建./assets/fonts/roboto.css
并将以下内容放入其中:
/* cyrillic-ext */
@font-face
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
/* cyrillic */
@font-face
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
/* greek-ext */
@font-face
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');
unicode-range: U+1F00-1FFF;
/* greek */
@font-face
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');
unicode-range: U+0370-03FF;
/* vietnamese */
@font-face
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
/* latin-ext */
@font-face
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
/* latin */
@font-face
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
(你可以通过https://fonts.googleapis.com/css?family=Roboto找到这个CSS)。
然后更改 nuxt.config.js
以将 CSS 文件包含在 css
属性中:
module.exports =
/*
** Global CSS
*/
css: [
'~/assets/fonts/roboto.css'
]
然后您将font-family: 'Roboto', sans-serif;
应用于您的文本元素。
在每个页面上使用字体
创建一个./assets/css/styles.css
文件,其中包含以下内容:
body
font-family: 'Roboto', sans-serif;
然后如上所述在nuxt.config.js
中包含CSS文件:
module.exports =
css: [
'~/assets/fonts/roboto.css',
'~/assets/css/styles.css'
]
同样适用于任何资产,如其他字体、图标、框架 css 等。
【讨论】:
如果你下载了实际的字体文件,为什么还要从https://fonts.gstatic.com
引用它们?【参考方案3】:
就这么简单
转到 Google 字体并选择您的字体样式,例如 Montserrat
转到nuxt.config.js
并添加您的字体网址,如下所示
export default head: meta: [], link: [ rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Montserrat&display=swap"' ]
-
转到您的 nuxt 项目 -> 布局目录 ->
default.vue
文件并在 v-app
标记中添加名为 app
(或您想要的任何名称)的类,如下所示
<v-app dark class="app"> --your app goes here -- </v-app>
在相同的文件样式选项中,在上面定义的类主体中添加以下行
<style>
.app
font-family: 'Montserrat', sans-serif;
</style>
确保类在 v-app 标签中定义,并使用<style>
而不是<style scoped>
使整个项目生效
【讨论】:
【参考方案4】:快速
在你的 nuxt.config.js 文件中
head:
...
...
link: [
rel: 'icon',
type: 'image/x-icon',
href: '/favicon.ico'
,
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Lato:400,700'
]
在你的 layouts/default.vue 或者你正在使用的任何其他布局文件中添加样式标签
<style scoped>
#app
font-family: 'Lato', sans-serif;
</style>
【讨论】:
【参考方案5】:您可以执行以下步骤: 1__将您的字体定义为您的assests目录中单独文件中的自定义变量,例如variables.scss,如下所示:
$body-font-family: Roboto;
@import '~vuetify/src/styles/styles.sass';
2__那么在 nuxt.config.js 中,你应该在头部添加一个样式表链接,像这样:
head:
link: [
rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Oswald|Libre+Baskerville&display=swap'
]
,
3__那么有必要在 vuetify 中启用 treeshaking 并设置您的自定义变量,如下所示:
vuetify:
customVariables: ['~/assets/variables.scss'],
treeShake: true
,
【讨论】:
【参考方案6】:我尝试了多种方法将自定义字体添加到 nuxt + vuetify 项目,但没有一种方法能正常工作。
最后我在assets
文件夹文件中创建了一个global.scss
并在nuxt.config.js
中解决了它:
css: ['~assets/global.scss'],
在global.scss
文件中:
@font-face
font-family: 'my-custom-font';
src: local('my-custom-font'), url('path/to/font') format('truetype');
.v-application
font-family: 'my-custom-font' !important;
// or
#app
font-family: 'my-custom-font';
这工作正常。
【讨论】:
以上是关于如何使用nuxt js将字体嵌入到所有页面的主要内容,如果未能解决你的问题,请参考以下文章
如何将 npm 包中的 JS 文件包含到 Nuxt.js 中的单独页面
如何仅关闭 Nuxt.js 中某些页面的 s-s-r 以将它们用作 SPA 应用程序?
Nuxt.js:包含字体文件:使用 /static 或 /assets