我无法弄清楚如何更改vuetify中的默认字体。我一直在寻找./node_modules/vuetify中的正确变量,但我无法找到它。
我理想情况下不会在模块中进行任何更改,而是宁愿从模块外部覆盖这些变量。
答案 0 :(得分:12)
最简单的方法是在body
上设置font-family。如果您使用webpack并导入Vuetify手写笔条目main.styl
,则只需用您想要的任何字体覆盖$font-family
变量。
答案 1 :(得分:9)
我注意到,至少在最新版本的Vuetify中,您需要同时指定$body-font-family
和$heading-font-family
才能将所有内容的字体从Roboto更改为替代中的其他字体(在{{之后3}})。 $headings
的重新定义似乎是必要的,因为它是在_variables.styl
中定义的,并且取决于$heading-font-family
。请注意,Vuetify在2.0中将为these instructions,因此届时将有一个新流程。
$body-font-family = 'Barlow Condensed', sans-serif
$heading-font-family = 'Barlow Condensed', sans-serif
$headings = {
h1: { size: 112px, weight: 300, line-height: 1, letter-spacing: -.04em, font-family: $heading-font-family },
h2: { size: 56px, weight: 400, line-height: 1.35, letter-spacing: -.02em, font-family: $heading-font-family },
h3: { size: 45px, weight: 400, line-height: 48px, letter-spacing: normal, font-family: $heading-font-family },
h4: { size: 34px, weight: 400, line-height: 40px, letter-spacing: normal, font-family: $heading-font-family },
h5: { size: 24px, weight: 400, line-height: 32px, letter-spacing: normal, font-family: $heading-font-family },
h6: { size: 20px, weight: 500, line-height: 1, letter-spacing: .02em, font-family: $heading-font-family },
subheading: { size: 16px, weight: 400 },
body-2: { size: 14px, weight: 500 },
body-1: { size: 14px, weight: 400 },
caption: { size: 12px, weight: 400 },
button: { size: 14px, weight: 500 }
}
答案 2 :(得分:6)
因此,vuetify提供了一个非常简单的解决方案。
在您的src目录中,创建一个sass
,scss
或styles
目录,然后在其中创建一个名为variables.scss
或variables.sass
的文件。
运行纱线发球或npm运行发球时,vuetify会自动 将全局Vuetify变量提升到所有sass / scss文件中。
示例-src/scss/variables.scss
下面的代码将更改默认的正文字体
@import url('https://fonts.googleapis.com/css2family=Poppins:wght@400;700&display=swap');
$body-font-family: 'Poppins', sans-serif;
您可以在其中进行更多更改,如果上述方法不适合您,则可以更改Webpack设置-check this link
希望有帮助!
答案 3 :(得分:2)
我正在使用 webpack,唯一能让它工作的方法是:
// webpack.config.js
...
{
test: /\.sass$/,
use: [
{
loader: 'sass-loader',
// Vuetify
// Requires sass-loader@^9.0.0
options: {
implementation: sass,
sassOptions: { fiber: fibers },
additionalData: "@import '~/src/styles/variables.scss'",
}
}
]
}
...
// src/styles/variables.scss
@import "~vuetify/src/styles/settings/_variables.scss";
@import url('https://fonts.googleapis.com/css2?family=Fredoka+One&display=swap');
$body-font-family: 'Fredoka One', cursive;
$heading-font-family: $body-font-family;
$headings: (
'h1': (
'font-family': $heading-font-family,
),
'h2': (
'font-family': $heading-font-family,
),
'h3': (
'font-family': $heading-font-family,
),
'h4': (
'font-family': $heading-font-family,
),
'h5': (
'font-family': $heading-font-family,
),
'h6': (
'font-family': $heading-font-family,
),
);
答案 4 :(得分:2)
我在(最新)Nuxt中的解决方案:
nuxt.config:
head: {
.......
link: [
{rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'},
{
rel: 'stylesheet',
href:'https://fonts.googleapis.com/css?family=Raleway:400|Roboto+Slab:200&display=swap'
}
]
},
vuetify: {
treeShake: true,
customVariables: ['~/assets/variables.scss'],
theme: {
.....
},
}
},
variables.scss
$body-font-family: Raleway, sans-serif;
$heading-font-family: Roboto Slab, serif;
@import '~vuetify/src/styles/styles.sass';
答案 5 :(得分:2)
我无法保证这是“最佳做法”。但考虑到没有关于如何正确执行此操作的文档,我将告诉您我是如何完成此任务的。
我正在使用Nuxt webpack模板,因此我的文件结构可能与您的文件结构略有不同,但概念是相同的。
我有一个静态资源文件夹。在该文件夹中,我有一个全局的css文件。我下载了我用作文件的字体,并将其添加到我的静态目录中。但你可以把它放在任何地方。
以下是我添加到全局CSS文件中的代码:
@font-face{
font-family: **any name you want to give the font**;
src: url(**location in directory**) format("opentype");
}
然后你就像通常那样将它添加到样式规则
*{
font-family: **the same name you gave it above**;
}
h1{
font-family: **the same name you gave it above**;
}
等...
请记住输入正确的格式。如果您的文件以.otf格式下载,则为opentype。如果是.ttf则是truetype。
我还没想出如何在CDN中加入字体。如果我确实想到这一点,我会告诉你。
答案 6 :(得分:1)
我是如何实现的:(Vuetify 2 +)
1)将您的字体导入到index.html中。
<link rel="stylesheet" href="<%= BASE_URL %>fonts/<MY_CUSTOM_FONT>/fontface.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Literata:100,300,400,500,700,900">
2)在/src
内,创建一个styles
目录,并在其中创建一个名为variables.scss
的文件
3)在该文件中,覆盖一些变量值:
// Globals
$body-font-family: 'MY_CUSTOM_FONT'; // Used on content
$heading-font-family: 'Literata'; // Used on helpers classes
希望它对某人有帮助。
参考文献:
https://github.com/vuetifyjs/vuetify/issues/8169
https://vuetifyjs.com/en/customization/sass-variables#example-variable-file
答案 7 :(得分:1)
这是一个迟到的回复但是,您可以添加通用的 scss/sass/less 文件(在 App.vue 或您的主 App 文件中调用)它将在整个应用程序中实现它
.body,
.v-application{
font-family: 'Antic', sans-serif;
}
答案 8 :(得分:1)
通过CDN / npm安装字体。然后只需在 ./ src / styles / variables.scss
中添加此行即可覆盖此变量//Change default font to 'Inter'
$body-font-family: "Inter" !important;
一种简短的方法。
答案 9 :(得分:1)
将Nuxt.js与Vuetify Module一起使用对我有用的是,只需在variables.scss中设置正文字体,如下所示:
$body-font-family: SofiaPro, Roboto;
所有其他字体均源自此字体。
默认变量文件('〜vuetify / src / styles / styles.sass')之后会自动导入,并且会忽略已设置的变量(感谢!default)。因此,不再需要更改$ heading-font-family和单个$ heading。
为此要与Nuxt模块一起使用,请不要忘记在nuxt.config.js文件中设置treeShake:true。如果您不使用Nuxt.js,则可能需要在设置正文字体后导入 变量文件。
答案 10 :(得分:1)
不幸的是,@ alice-mx答案对我不起作用(无法从node_modules导入)。
这是我在代码中(使用 Vuetify 2 )解决此问题的方法:
下载所需的.woff2文件并将其放入src / assets / fonts后, 我将此代码添加到了App.vue文件(或您在项目中设置的任何主vue文件)中:
// App.vue
<style>
$typoOptions: display-4 display-3 display-2 display-1 headline title subtitle-1 subtitle-2 body-1 body-2 caption overline; // all md typography options provided by vuetify
%font-choice {
font-family: "Noto Sans", sans-serif !important;
}
@mixin md-typography {
@each $typoOption in $typoOptions {
.#{$typoOption} {
@extend %font-choice;
}
}
.v-application { // This is where we'll add all the md-typography classes
font-size: 12px;
@extend %font-choice;
@include md-typography;
}
// add font-face because in this case Noto-Sans is taken from Google fonts
@font-face {
font-family: "Noto Sans";
font-style: normal;
font-weight: 400;
src: local("Noto Sans"), local("NotoSans"),
url("~@/assets/fonts/noto-sans-v9-latin-regular.woff2") format("woff2");
}
</style>
我希望这会有所帮助!
这个answer帮助我形成了.scss代码
答案 11 :(得分:1)
如果您使用的是Vuetify 2+,则该过程与jeffbaumes的答案非常相似,但使用的是Sass而不是Stylus
// src/sass/main.scss
@import '~vuetify/src/styles/styles.sass';
$body-font-family: 'My Custom Font', cursive;
$heading-font-family: $body-font-family, cursive;
@each $heading, $style in $headings {
$headings: map-merge($headings, ($heading: map-merge($style, ('font-family': $heading-font-family))));
}
或者您可以更改某些标题样式的字体,而不能更改其他样式,
$headings: map-merge($headings, ('h3': ('font-family': 'Custom Font Name')));
答案 12 :(得分:1)
更好的方式,在您的app.vue脚本中添加
.application {
font-family: "Font Family Name";
}
例如,如果您使用的是Google字体,则您的脚本标签应类似于
<style lang="scss">
@import url("https://fonts.googleapis.com/css?family=Questrial");
.application {
font-family: "Questrial";
}
</style>
答案 13 :(得分:0)
此解决方案适用于Vue-CLI> = 3
首先必须安装sass-loader
boolean var1_b;
boolean var2_b;
您应该首先在“ src”目录中创建“ sass”文件夹,然后 在此目录中创建一个“ variables.scss”文件。
然后在该文件中编写以下代码。
npm install sass sass-loader fibers deepmerge -D
您需要立即重新启动项目。
答案 14 :(得分:0)
对于Laravel Vuetify用户,这是您所需要的: 更新您的webpack.min.js文件,使其看起来像:
const mix = require('laravel-mix');
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/main.scss', 'public/css')
.stylus('resources/stylus/main.styl', 'public/css');
您的main.styl
应该位于以下路径中:resources\stylus\main.styl
您的main.styl
文件应如下所示:
@import url("https://fonts.googleapis.com/css?family=Literata:400,500,600,700&display=swap");
$body-font-family = 'Literata', serif
$alert-font-size = 18px
@import '~vuetify/src/stylus/main'
// For a-la-carte
@import '~vuetify/src/stylus/app'
要防止Vuetify编写可能覆盖main.css
的内联样式,请执行以下操作:
mix.options({
extractVueStyles: true, // Extract .vue component styling to file, rather than inline.
});
最后,如果没有在命令行中运行,请确保手写笔加载器已经设置:
$ yarn add stylus stylus-loader style-loader css-loader -D
// OR
$ npm i stylus stylus-loader style-loader css-loader --save-dev
您也可以npm安装material-design-icons-iconfont。
npm install material-design-icons-iconfont --save
答案 15 :(得分:0)
有一种比上述所有方法更简单和正确的方法。添加
treeShake: true,
defaultAssets: {
font: {
family: 'Poppins'
}
}
到 nuxt.config.js 中的 vuetify 对象。这应该会在整个应用程序中正确启用您的字体系列。(有关详细信息,请参阅 defaultAssets 文档并注意需要 treeShake 选项)
答案 16 :(得分:0)
我尝试了一切都没有在我的情况下工作,但下面的解决方案肯定会有效,尽管不是最好的解决方案
$body-font-family: "Open Sans",sans-serif;
.v-application {
.text-h1,
.text-h2,
.text-h3,
.text-h4,
.text-h5,
.text-h6,
.text-headline,
.text-title,
.text-subtitle-1,
.text-subtitle-2,
.text-body-1,
.text-body-2,
.text-button,
.text-caption,
.text-overline {
font-family: $body-font-family !important;
}
}
答案 17 :(得分:0)
Vuetify v2.4.11
Vue v2.6.12
<style lang="scss">
@import url('https://fonts.googleapis.com/css2?family=New+Tegomin&display=swap');
$font-family: 'New Tegomin', serif;
.my-application {
.headline,
[class*='display-'],
[class*='text-'] {
color: #36405a;
font-family: $font-family, sans-serif !important;
}
font-family: $font-family, sans-serif !important;
}
</style>
<v-app class="my-application">
第二点很重要,因为 Vuetify 的所有字体样式都有 !important
,如果你想覆盖,你需要添加一个额外的类...
希望这个技巧对大家有帮助!
答案 18 :(得分:0)
额外有用的东西:
答案 19 :(得分:-4)
材料设计指南