Tips for integrating Google Web Fonts into a VueJS application

Stumbled upon this interesting plugin at https://github.com/gabiseabra/google-fonts-webpack-plugin

After updating the babel.config.js file from the starter kit:

const GoogleFontsPlugin = require('google-fonts-webpack-plugin')

module.exports = {
  presets: [
    '@vue/app',
  ],
  plugins: [
    new GoogleFontsPlugin({
      fonts: [
        { family: 'Inconsolata' },
        { family: 'Oswald' },
      ],
      /* ...options */
    }),
  ],
};

Added the font to the #app class

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </div>
    <router-view/>
  </div>
</template>

<style lang="scss">
#app {
  font-family: 'Inconsolata', sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
#nav {
  padding: 30px;
  a {
    font-weight: bold;
    color: #2c3e50;
    &.router-link-exact-active {
      color: #42b983;
    }
  }
}
</style>

However, even after these changes, the font remains Arial:

https://i.sstatic.net/taAEQ.png

Answer №1

After some exploration, I realized that importing it this way is the solution:

<style lang="scss">
@import url('https://fonts.googleapis.com/css?family=Inconsolata|Oswald');
#app {
  font-family: 'Inconsolata', sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
#nav {
  padding: 30px;
  a {
    font-weight: bold;
    color: #2c3e50;
    &.router-link-exact-active {
      color: #42b983;
    }
  }
}
</style>

Answer №2

Utilize webpack to set up Google Font in your Vue JS project. Add google-fonts-webpack-plugin as a development dependency using npm or yarn. In the root folder, create a webpack.config.js file and insert the following code:

const GoogleFontsPlugin = require("google-fonts-webpack-plugin")

module.exports = {
    "entry": "index.js",
    /* ... */
    plugins: [
        new GoogleFontsPlugin({
            fonts: [
                { family: "Source Sans Pro" },
                { family: "Roboto", variants: [ "400", "700italic" ] }
            ]
        })
    ]
}

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Utilizing the power of Nuxt.js combined with the functionality of vue

Even though vue-moment is functioning perfectly, I am encountering an error in the console [Vue warn]: Failed to resolve filter: moment This is my setup: plugins/moment.js import VueMoment from 'vue-moment' import Vue from 'vue&apo ...

Having difficulty getting Select2 to function properly with a JSON file

I'm attempting to integrate select2 with an external JSON file. The JSON file, named data.json, is located in the root directory of my website and has the following structure: {"countries":[ { "Name" : "Egypt", "Short" : "EG ...

What are some ways I can efficiently download large attachments without disrupting the user's experience?

I'm encountering some challenges with handling large attachments in my project. Initially, I had this link code: <a :download="scope.row.name" :href="`data:${scope.row.type};base64,${scope.row.contentBytes}`">download</a& ...

I'm having trouble locating the source of the popstate loop that is generating numerous history entries

I am currently working on a project to create a dynamic webpage where the content of the main div gets replaced when certain navigation links are clicked. I have successfully implemented the pushstate function to update the div content and change the URL a ...

The system is unable to locate the command "nvm"

Lately, I've been experimenting with using nvm to manage different versions of node. After successfully installing nvm on my Mac OS Catalina(10.15.6), I was able to easily switch between versions through the terminal. However, when attempting to do t ...

What is the best method for consolidating all parameter types of an object comprised of a collection of functions?

Can you analyze this typescript code snippet for me? type params1 = {p:number} ; type params2 = {p:boolean}; type params3 = {p:string}; type res = {r:string}; const fObject = { a:(a:params1):res=>{return {r:`${a.p}`}}, b:(a:params2):res=>{return {r: ...

Tips for toggling the radio button value to either checked or unchecked state

<input type="radio" name="imgsel" value="" checked /> I am looking to have a radio button that is initially checked with a value of 'present'. When the button is unchecked, I want the value to change to &apos ...

Ellipsis are malfunctioning in an absolute position div

In my div, there is an overlay of another absolutely positioned div. However, the text is still overflowing beyond the boundaries of the div. var mainDiv = ".myclass"; var mainDivP = ".myclass p"; $(window).on("load",functi ...

Switch the ngClass on the appropriate ancestor element for the dropdown menu

Utilizing Angular CLI version 8.3.0, I aim to construct a sidebar featuring a drop-down menu. My objective is to apply the "open" class to toggle the opening of the drop-down section. However, the current challenge I am encountering is that when I click to ...

Utilize html5 to drag and drop numerous items effortlessly

Recently, I created a basic HTML5 drag and drop feature using JavaScript. However, I encountered an issue. function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData("text", ev.target.id); } function drop(ev) { ...

Guide to building an HTML table on-the-fly using JSON information

I am trying to extract specific data from a "JSON" array. I have attempted the following code, but I am still in need of help. <?php $uri=$_POST['uri']; $api_key=$_POST['api_key']; $board=$uri.$api_key; $value=file_get_contents($boa ...

What could be causing the service worker in my Parcel.js-built PWA to function correctly when online but malfunction when offline?

Seeking Answers While my service worker functions flawlessly in installing and fetching files from the Cache Storage when online, it seems to lose its way once offline. Where could I be going wrong? I suspect it might be due to the loading order, incorre ...

The value of ng-model is consistently stored as a string, regardless of whether the input is a number or

<div> <input type="text" ng-model="test"/> </div> When a value is entered into the input field with the ng-model "test", it is always treated as a String type, even if it is a valid number. However, I am looking for a way to determine th ...

Encountering problems when transforming Next.js server components into client components

I've been working on a blog site using next.js. Initially, I had a home page that was a server component, but I wanted to convert it into a client component to add interactivity like pagination. However, after converting the code to a client componen ...

Exploring the concept of template inheritance in Vue.js

Is there a way to implement template inheritance similar to Jade’s extends file.jade? I understand that composition can achieve the same result, but for components like the footer and header which are present on most pages except a few (e.g. login page), ...

When incorporating @babel/standalone, a JavaScript memory limit is exceeded

I am currently working on a React app that I developed using create-react-app. My main goal is to take user input as code and then evaluate it in order to render the output. Here's what I have attempted so far: import React, { Component } from &apos ...

Numerous demands causing replacements of variable values

I am new to working with nodejs and I have encountered a situation where, upon hitting a specific endpoint, I need to perform two separate post calls. The first post call returns a URL that is required for the second call. Below is a simplified module I cr ...

What purpose do controller.$viewValue and controller.$modelValue serve in the Angular framework?

I'm confused about the connection between scope.ngModel and controller.$viewValue/controller.$modelValue/controller.$setViewValue(). I'm specifically unsure of the purpose of the latter three. Take a look at this jsfiddle: <input type="text" ...

Vue.js template is failing to properly render hyperlinks, although basic string output is functioning as expected

Whenever I print attrib.link, everything works perfectly fine, <div v-for="attrib in attributes"> {{ attrib.link }} </div> However, when I try: <div v-for="attrib in attributes"> <a target='_blank' href={{ attrib.link } ...

How can I send an error message from a Laravel controller and handle it in InertiaJS using the form helper?

I am facing an issue where I need to handle errors in the controller, but they are not Laravel validation errors. This prevents me from accessing them using the inertiajs form helper without using props.errors. How can I return the error in a way that allo ...