HB's Thoughts

I try to think really hard.

15.02.2024 г.

Google Fonts в Nuxt с TailwindCSS

Услугата на Google за шрифтовете е страшно удобна за използване. Има голям избор от шрифтове и лесен начин да ги филтрираш спрямо нуждите ти. В екосистемата на Nuxt има много добър модул за интегриране на Google шрифтове в приложението Ви, но аз ще Ви покажа малко по-различен подход.

В конфигурацията си Nuxt позволява да обработваме Head парчето от HTML-а. Има и други места на които може да го правите, но за целта ще използвам конфигурационния файл nuxt.config.ts.

Когато изберете шрифт от Google, той Ви предоставя код, който да добавите към приложението си. Кода има следния вид:

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">

За да добавите това парче от код в nuxt.config.ts трябва да го разделите на части в link масива в конфигурацията.

//nuxt.config.ts
export default defineNuxtConfig({
  app: {
    head: {
      link: [
        { rel: "preconnect", href: "https://fonts.googleapis.com" },
        { rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin: "" },
        { rel: "stylesheet", href: "https://fonts.googleapis.com/css2?family=Roboto&display=swap" }
      ]
    }
  }

Изключително просто и елегантно решение. При билдването горния код се инжектира в Head-а на приложението Ви и шрифтовете се зареждат от Google. Това работи прекрасно, но понякога не е достатъчно.

Например, ако генерирате приложението си статично с npx nuxt generate. Тогава е добре да помислите как да оптимизирате зареждането на шрифтовете, защото може да достигнат доста големи обеми.

Става лесно, като първоначално променим стойността на rel атрибута и след извикването на onload събитието го възстановяваме.

//nuxt.config.ts
export default defineNuxtConfig({
  app: {
    head: {
      link: [
        { rel: "preconnect", href: "https://fonts.googleapis.com" },
        { rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin: "" },
        { rel: "preload", as: "style", onload: "this.onload = null; this.rel = 'stylesheet';", href: "https://fonts.googleapis.com/css2?family=Roboto&display=swap" }
      ]
    }
  }

След като шрифта е зареден трябва да го популяризираме в приложението. В моя случай използвам TailwindCSS.

TailwindCSS Ви позволява да използвате предварително подготвени фамилии от шрифтове, но са предоставили и лесен начин да ги преконфигурирате в конфигурационния файл tailwind.config.js.

// tailwind.config.js
/** @type {import('tailwindcss').Config} */

export const theme = {
  fontFamily: {
    "sans": ["Inter", "sans-serif"],
    "serif": ["Playfair Display", "serif"],
  },
};

От тук на там CSS класът font-sans ще рисува текста Ви с Roboto шрифта.


Ако имате мнение или въпроси за статията, не се колебайте да ги споделите.

Влезте в отворената дискусия в GitHub.


Компетентност: Базова