Skip to content

Preset Web Fonts

Use fontes web do Google Fonts, FontShare simplesmente fornecendo os nomes das fontes.

Veja todos os provedores suportados.

Código Fonte

Instalação

bash
pnpm add -D @unocss/preset-web-fonts
bash
yarn add -D @unocss/preset-web-fonts
bash
npm install -D @unocss/preset-web-fonts
bash
bun add -D @unocss/preset-web-fonts
ts
import presetWebFonts from '@unocss/preset-web-fonts'
import presetWind3 from '@unocss/preset-wind3'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    presetWind3(),
    presetWebFonts({ /* opções */ }),
  ],
})

TIP

Este preset está incluído no pacote unocss, você também pode importá-lo de lá:

ts
import { presetWebFonts } from 'unocss'

Provedores

Provedores atualmente suportados:

INFO

PRs são bem-vindos para adicionar mais provedores. 🙌

Função de busca personalizada

Use sua própria função para buscar a fonte.

ts
import presetWebFonts from '@unocss/preset-web-fonts'
import presetWind3 from '@unocss/preset-wind3'
import axios from 'axios'
import ProxyAgent from 'proxy-agent'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    presetWind3(),
    presetWebFonts({
      // use axios com um proxy https
      customFetch: (url: string) => axios.get(url, { httpsAgent: new ProxyAgent('https://localhost:7890') }).then(it => it.data),
      provider: 'google',
      fonts: {
        sans: 'Roboto',
        mono: ['Fira Code', 'Fira Mono:400,700'],
      },
    }),
  ],
})

Opções

provider

  • Tipo: WebFontsProviders
  • Padrão: google

Serviço provedor das fontes web.

ts
type WebFontsProviders = 'google' | 'bunny' | 'fontshare' | 'none'

fonts

  • Tipo: Record<string, WebFontMeta | string | (WebFontMeta | string)[]>

As fontes. Veja exemplo para mais detalhes.

ts
interface WebFontMeta {
  name: string
  weights?: (string | number)[]
  italic?: boolean
  /**
   * Sobrescreve o provedor
   * @default <corresponde à configuração raiz>
   */
  provider?: WebFontsProviders
}

extendTheme

  • Tipo: boolean
  • Padrão: true

Estende o objeto de tema.

themeKey

  • Tipo: string
  • Padrão: fontFamily

Chave para o objeto de tema.

inlineImports

  • Tipo: boolean
  • Padrão: true

Inclui CSS @import().

customFetch

  • Tipo: (url: string) => Promise<string>
  • Padrão: undefined

Use sua própria função para buscar a fonte. Veja Função de busca personalizada.

Exemplo

ts
presetWebFonts({
  provider: 'google', // provedor padrão
  fonts: {
    // estes irão estender o tema padrão
    sans: 'Roboto',
    mono: ['Fira Code', 'Fira Mono:400,700'],
    // personalizados
    lobster: 'Lobster',
    lato: [
      {
        name: 'Lato',
        weights: ['400', '700'],
        italic: true,
      },
      {
        name: 'sans-serif',
        provider: 'none',
      },
    ],
  },
})

O seguinte CSS será gerado automaticamente:

css
@import url('https://fonts.googleapis.com/css2?family=Roboto&family=Fira+Code&family=Fira+Mono:wght@400;700&family=Lobster&family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');

/* layer: default */
.font-lato {
  font-family: "Lato", sans-serif;
}
.font-lobster {
  font-family: "Lobster";
}
.font-mono {
  font-family: "Fira Code", "Fira Mono", ui-monospace, SFMono-Regular, Menlo,
    Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
.font-sans {
  font-family: "Roboto", ui-sans-serif, system-ui, -apple-system,
    BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans",
    sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
    "Noto Color Emoji";
}

Servir Fontes Localmente

Por padrão o preset irá buscar as fontes do CDN do provedor. Se você quiser servir as fontes localmente, você pode baixar as fontes e servi-las do seu próprio servidor usando o processador de @unocss/preset-web-fonts/local.

ts
import presetWebFonts from '@unocss/preset-web-fonts'
import { createLocalFontProcessor } from '@unocss/preset-web-fonts/local'
import { defineConfig } from 'unocss'

export default defineConfig({
  presets: [
    presetWebFonts({
      provider: 'none',
      fonts: {
        sans: 'Roboto',
        mono: 'Fira Code',
      },
      // Isso irá baixar as fontes e servi-las localmente
      processors: createLocalFontProcessor({
        // Diretório para cache das fontes
        cacheDir: 'node_modules/.cache/unocss/fonts',

        // Diretório para salvar os assets das fontes
        fontAssetsDir: 'public/assets/fonts',

        // URL base para servir as fontes do cliente
        fontServeBaseUrl: '/assets/fonts'
      })
    }),
  ],
})

Isso irá baixar os assets das fontes para public/assets/fonts e servi-los de /assets/fonts no cliente. Ao fazer isso, por favor certifique-se de que a licença das fontes permite que você as redistribua, a ferramenta não é responsável por quaisquer questões legais.

INFO

Este recurso é específico para Node.js e não funcionará no navegador.

Released under the MIT License.