JSPM

  • Created
  • Published
  • Downloads 7743
  • Score
    100M100P100Q125546F
  • License MIT

An Astro integration to optimize Local & Google fonts inspired by @next/font

Package Exports

  • astro-font
  • astro-font/AstroFont
  • astro-font/utils

Readme

imgonline-com-ua-compressed-gtwH4Klu9j

Astro Font Optimization

astro-font will automatically optimize your Custom Fonts, Local Fonts, Fonts over any CDN and Google fonts for performance.

The project is inspired by the Next.js Font Optimization.

Installation

npm install astro-font
## or yarn
yarn add astro-font
## or pnpm
pnpm add astro-font

Google Fonts

Automatically optimize any Google Font. To use the font in all your pages, add it to <head> file in an Astro layout:

---
import { AstroFont } from "astro-font";
---

<head>
    <AstroFont
      config={[
        {
          name: "Afacad",
          src: [
            {
              style: 'bold',
              weight: '700',
              path: 'https://fonts.gstatic.com/s/afacad/v1/6NUK8FKMIQOGaw6wjYT7ZHG_zsBBfvLqagk-80KjZfJ_uw.woff2'
            },
          ],
          preload: true,
          display: "swap",
          selector: "body",
          fallback: "sans-serif",
        },
      ]}
    />
</head>

Local Fonts

---
import { AstroFont } from "astro-font";
---

<head>
    <AstroFont
      config={[
        {
          name: "Afacad",
          src: [
            {
              style: 'normal',
              weight: '400',
              path: './public/fonts/Afacad-Regular.ttf'
            },
            {
              style: 'medium',
              weight: '500',
              path: './public/fonts/Afacad-Medium.ttf'
            },
          ],
          preload: false,
          display: "swap",
          selector: "body",
          fallback: "sans-serif",
        },
      ]}
    />
</head>

Using Multiple Fonts

You can import and use multiple fonts in your application. There are two approaches you can take.

Just extend the array of the config to contain the new collection of the fonts:

---
import { AstroFont } from "astro-font";
---

<head>
    <AstroFont
      config={[
        {
          name: "Afacad",
          src: [
            {
              style: 'bold',
              weight: '700',
              path: 'https://fonts.gstatic.com/s/afacad/v1/6NUK8FKMIQOGaw6wjYT7ZHG_zsBBfvLqagk-80KjZfJ_uw.woff2'
            },
          ],
          preload: true,
          display: "swap",
          selector: "body",
          fallback: "sans-serif",
        },
        {
          name: "Inter",
          src: [
            {
              weight: '400',
              style: 'normal',
              path: './public/fonts/Inter-Regular.ttf'
            }
          ],
          preload: true,
          display: "swap",
          selector: "body > span",
          fallback: "serif",
        },
      ]}
    />
</head>

Configuring CSS Classes

The selector attribute per config object can be used to configure which CSS class will reflect the whole CSS (automatically including the references to fallback fonts CSS).

<AstroFont
  config={[
    {
      name: "Afacad",
      src: [
        {
          style: 'bold',
          weight: '700',
          path: 'https://fonts.gstatic.com/s/afacad/v1/6NUK8FKMIQOGaw6wjYT7ZHG_zsBBfvLqagk-80KjZfJ_uw.woff2'
        },
      ],
      preload: true,
      display: "swap",
      fallback: "sans-serif",

      // My Custom CSS Selector
      // Type: ClassName
      selector: ".custom_class",

    },
    {
      name: "Inter",
      src: [
        {
          weight: '400',
          style: 'normal',
          path: './public/fonts/Inter-Regular.ttf'
        }
      ],
      preload: true,
      display: "swap",
      fallback: "serif",

      // My Custom CSS Selector
      // Type: CSS Selector
      selector: "body > span",
    },
  ]}
/>