Загрузка шрифтов в Gatsby

Правильный выбор шрифта может улучшить внешний вид сайта и пользовательский опыт. Однако стратегия загрузки шрифтов бывает задачей не из простых. Вот почему Gatsby предлагает разработчикам несколько удобных решений по загрузке шрифтов.

В этом мануале вы познакомитесь с тремя подходами к загрузке шрифтов в проект: мы рассмотрим Typography.js, Fontsource и ручное управление файлами.

Требования

  • Локальная установка Node.js (следуйте этим инструкциям для mac OSUbuntuDebianCentOS).
  • Предполагается, что вы работаете с уже существующим проектом Gatsby. Чтобы создать простой тестовый проект, читайте мануал Как создать первый сайт на Gatsby.

Это руководство было протестировано на версиях Node v15.13.0, npm v7.8.0, gatsby v3.2.1 и react v17.0.1.

Раздел, посвященный Typography.js, был проверен на версиях gatsby-plugin-typography v3.2.0, react-typography v0.16.19, typography v0.16.19 и typography-theme-lawton v0.16.19. Раздел о Fontsource проверен с помощью @fontsource/rubik v4.2.2.

Использование Typography.js

Typography.js – это набор инструментов для загрузки и настройки шрифтов для ваших проектов.

gatsby-plugin-typography должен также включать взаимозависимости typography and react-typography.

Для начала откройте окно терминала, перейдите в каталог проекта и выполните следующую команду:

npm install typography react-typography gatsby-plugin-typography

Примечание: Если у вашего дерева зависимостей возникает конфликт с последней версией React, gatsby-plugin-typography и react-typography, вы можете обойти эту ошибку – для этого нужно использовать флаг –legacy-peer-deps.

Откройте файл gatsby-config.js в редакторе кода и добавьте следующие новые строки кода:

module.exports = {
  // ...
  plugins: [
    // ...
    {
      resolve: "gatsby-plugin-typography",
      options: {
        pathToConfigModule: "src/utils/typography.js"
      }
    }
  ]
};

gatsby-plugin-typography поддерживает два аргумента:

  • pathToConfigModule: это путь к конфигурационному файлу.
  • omitGoogleFont: вспомогательная функция для запроса шрифтов Google из стандартного CDN. При значении true вы можете использовать альтернативную конфигурацию CDN.

После этого вам понадобится конфигурационный файл typography.js, указанный в параметре pathToConfigModule. В этом файле мы определим веб-шрифты, тему, а также любые дополнительные базовые стили.

Давайте добавим Playfair Display, Roboto и базовые размеры шрифтов.

import Typography from "typography";

const typography = new Typography({
  baseFontSize: "18px",
  baseLineHeight: 1.45,
  googleFonts: [
    {
      name: "Playfair Display",
      styles: ["800"],
    },
    {
      name: "Roboto",
      styles: ["400"]
    }
  ],
  headerFontFamily: ["Playfair Display", "serif"],
  bodyFontFamily: ["Roboto", "sans-serif"]
});

typography.injectStyles();

export default typography;

Сохраните изменения и просмотрите новые шрифты в своем проекте Gatsby.

Примечание: Если ваш стартовый пакет включает стили, они могут перезаписать стили, установленные с помощью gatsby-plugin-typography.

Typography.js также поддерживает предварительно определенные темы.

Давайте для примера рассмотрим тему Lawton, в которой для заголовков используется шрифт Raleway, а для основного текста – Libre Baskerville.

Откройте окно терминала и выполните следующую команду:

npm install typography-theme-lawton

Вот пример использования предопределенной темы в файле src/utils/typography.js:

import Typography from "typography";
import theme from "typography-theme-lawton";
const typography = new Typography(theme);
export default typography;

А вот так можно переопределить предопределенную тему с помощью overrideThemeStyles:

import Typography from "typography";
import theme from "typography-theme-lawton";

theme.overrideThemeStyles = () => ({
  a: {
    color: "black",
    textDecoration: "none",
    borderBottom: "2px solid gold"
  },

  "a:hover": {
    color: "black",
    textDecoration: "none",
    borderBottom: "2px solid gold"
  }
});

const typography = new Typography(theme);

export default typography;

Существует множество тем, которые можно использовать, и несколько вариантов конфигурации, чтобы получить правильную настройку для вашего сайта.

Теперь ваш проект Gatsby поддерживает Typography.js.

Использование Fontsource

Fontsource – это набор инструментов для работы с self-hosted шрифтами с открытым исходным кодом. Преимущество self-hosted шрифтов – более быстрая загрузка по сравнению со шрифтами, размещенными на CDN.

Примечание: Иногда рекомендуют также использовать библиотеку Typefaces, но сейчас она считается устаревшей.

Рассмотрим для примера шрифт Rubik.

Откройте окно терминала и выполните следующую команду:

npm install @fontsource/rubik

Затем запросите шрифт в файле gatsby-browser.js, в котором вы взаимодействуете с клиентской стороной Gatsby.

require("@fontsource/rubik");

После чего вы можете вызвать шрифт в своей таблице стилей, src/styles/main.css:

body {
font: 400 18px Rubik, sans-serif;
}

Примечание: Для установки глобального стиля вам потребуется добавить в файл gatsby-browser.js строку импорта:

import "./src/styles/main.css"

Также шрифт можно вызвать в стилизованных компонентах, src/components/layout.js:

import { createGlobalStyle } from 'styled-components';

const GlobalStyles = createGlobalStyle`
body {
font: 400 18px Rubik, sans-serif;
}
`

const Layout = ({ children, location }) => (
// ...
<GlobalStyles />
<Main>{children}</Main>
// ...
);

export default Layout;

Теперь ваш проект Gatsby поддерживает Fontsource.

Управление self-hosted файлами вручную

Fontsource – это средство для self-hosting, которое предоставляет все необходимые файлы. Однако в некоторых ситуациях может потребоваться более точный контроль над настройкой: возможно, вы хотите получить больше преимуществ от CSS Font Loading API или же решите применить какие-нибудь стратегии загрузки шрифтов от Зака ​​Лезермана. В любом случае, вы всегда можете добавить шрифты на сайт Gatsby, как на любой другой веб-сайт.

Продолжим наш предыдущий пример со шрифтом Rubik. Вы можете создать каталог для файлов шрифтов и таблиц стилей:

|-- /static
  |-- /fonts
    |-- Rubik-Regular.woff
    |-- Rubik-Regular.woff2
    |-- Rubik-Italic.woff
    |-- Rubik-Italic.woff2
    |-- Rubik-Bold.woff
    |-- Rubik-Bold.woff2
    |-- fonts.css

А потом вы можете использовать плагин gatsby-source-filesystem для этого каталога (в gatsby-config.js):

module.exports = {
  // ...
  plugins: [
    // ...
    {
      resolve: "gatsby-source-filesystem",
      options: {
        name: "fonts",
        path: `${__dirname}/static/fonts/`
      }
    }
  ]
};

А в своей таблице стилей (src/fonts/fonts.css) для загрузки шрифтов вы можете использовать правило @font-face:

@font-face {
  font-family: Rubik;
  font-weight: 400;
  font-style: normal;
  src: url("Rubik.woff2") format("woff2"), url("Rubik.woff") format("woff");
  font-display: swap;
}

@font-face {
  font-family: Rubik;
  font-weight: 400;
  font-style: italic;
  src: url("Rubik-Italic.woff2") format("woff2"), url("Rubik-Italic.woff") format("woff");
  font-display: swap;
}

@font-face {
  font-family: Rubik;
  font-weight: 700;
  font-style: normal;
  src: url("Rubik-Bold.woff2") format("woff2"), url("Rubik-Bold.woff") format("woff");
  font-display: swap;
}

И теперь вы можете вызывать свои шрифты так же, как в предыдущем примере Fontsource – через таблицу стилей или стилизованный компонент.

Заключение

В этом мануале вы познакомились с тремя различными подходами к загрузке шрифтов в проект Gatsby: Typography.js, Fontsource и управление файлами вручную.

Подобрав правильное средство, отвечающее потребностям вашего приложения, вы можете значительно улучшить производительность и удобство его использования.

Tags: , ,

Добавить комментарий