14
votes

I just embed google font to the global setting in nuxt.config.js

 link: [
      { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Roboto' }
    ]

But how to apply this font to every page .

6

6 Answers

24
votes

New answer

Use @nuxt/google-fonts package: https://google-fonts.nuxtjs.org

It's trivial to use and supports a bunch of options including downloading the fonts.


Old answer

If you want to include the font within your app so you're serving it

Download the font from: https://fonts.google.com/specimen/Roboto?selection.family=Roboto (Open the drawer and download the .zip file).

  1. Unpack the contents of the .zip into ./assets/fonts/* (create it if it does not exist).
  2. Create ./assets/fonts/roboto.css and place the following in it:
/* 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;
}

(You can find this CSS by going to https://fonts.googleapis.com/css?family=Roboto).

Then change nuxt.config.js to include the CSS file in the css property:

module.exports = {
  /*
  ** Global CSS
  */
  css: [
    '~/assets/fonts/roboto.css'
  ]
}

Then you apply font-family: 'Roboto', sans-serif; to your text elements.


Using the font on every page

Create a ./assets/css/styles.css file with the following in it:

body
{
  font-family: 'Roboto', sans-serif;
}

Then as above include the CSS file in the nuxt.config.js:

module.exports = {
  css: [
    '~/assets/fonts/roboto.css',
    '~/assets/css/styles.css'
  ]
}

Same applies for any asset like other fonts, icons, framework css etc.

20
votes

QUICK

In your nuxt.config.js fi

head: {
  ...
  ...
  link: [
    {
      rel: 'icon',
      type: 'image/x-icon',
      href: '/favicon.ico'
    },
    {
      rel: 'stylesheet',
      href: 'https://fonts.googleapis.com/css?family=Lato:400,700'
    }
  ]
}

And in your layouts/default.vue or any other layout file that you are using add the style tag

<style scoped>
#app {
  font-family: 'Lato', sans-serif;
}
</style>
5
votes

It is simple like this

  1. Go to Google fonts and select your font style e.g Montserrat

  2. Got to nuxt.config.js and add your font url as shown here

export default {  
 head: {
        meta: [],
          link: [
       { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Montserrat&display=swap"'}
     ]
   }
  1. Go to your nuxt project -> layouts directory -> default.vue file and add class named app ( or whatever name you want) in v-app tag as shown here
 <v-app dark class="app"> 

      --your app goes here -- 

  </v-app>
  1. In the same file style option add the following lines in the class body you defined above

     <style>
     .app{
       font-family: 'Montserrat', sans-serif;
     }
     </style>
    

    Make sure class is defined in v-app tag and use <style> and not <style scoped> to take effect of whole project

1
votes

Update your CSS with the following rule:

body {
  font-family: 'Roboto', sans-serif;
}

If you don't have CSS stylesheet setup yet, create a new file in assets directory named i.e. main.css. Inside it put the code above and save it. Then edit nuxt.config.js adding this piece of code after head object:

css: [
  '@/assets/main.css'
],
1
votes

I tried many ways to add a custom font to a nuxt + vuetify project but no one worked correctly.

Finally I created a global.scss in assets folder file and addressed it in nuxt.config.js:

css: ['~assets/global.scss'],

and in global.scss file:

@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';
}

This worked correctly.

0
votes

you can do these steps: 1__define your font in as a custom varriable in a seprated file in your assests directory,for example variables.scss, like this:

$body-font-family: Roboto;
@import '~vuetify/src/styles/styles.sass';

2__then in the nuxt.config.js,you should add a stylesheet link in the head, like this:

head: {
  link: [
    { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Oswald|Libre+Baskerville&display=swap' }
  ]
},

3__then it is neccessary to enable treeshaking in the vuetify and set your customvariables,like this:

vuetify: {
  customVariables: ['~/assets/variables.scss'],
  treeShake: true
},