Пресет веб-шрифтов
Используйте веб-шрифты из Google Fonts, FontShare, просто указав названия шрифтов.
Смотрите все поддерживаемые провайдеры.
Установка
pnpm add -D @unocss/preset-web-fonts
yarn add -D @unocss/preset-web-fonts
npm install -D @unocss/preset-web-fonts
bun add -D @unocss/preset-web-fonts
import presetWebFonts from '@unocss/preset-web-fonts'
import presetWind3 from '@unocss/preset-wind3'
import { defineConfig } from 'unocss'
export default defineConfig({
presets: [
presetWind3(),
presetWebFonts({ /* параметры */ }),
],
})
TIP
Этот пресет включен в пакет unocss
, вы также можете импортировать его оттуда:
import { presetWebFonts } from 'unocss'
Провайдеры
В настоящее время поддерживаются следующие провайдеры:
none
- ничего не делать, рассматривать шрифт как системныйgoogle
- Google Fontsbunny
- Приватные Google Fontsfontshare
- Качественный сервис шрифтов от ITF
INFO
Приветствуются PR для добавления новых провайдеров. 🙌
Пользовательская функция загрузки
Используйте собственную функцию для загрузки источника шрифта.
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({
// использовать axios с 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'],
},
}),
],
})
Параметры
provider
- Тип:
WebFontsProviders
- По умолчанию:
google
Сервис провайдера веб-шрифтов.
type WebFontsProviders = 'google' | 'bunny' | 'fontshare' | 'none'
fonts
- Тип:
Record<string, WebFontMeta | string | (WebFontMeta | string)[]>
Шрифты. Смотрите пример для более подробной информации.
interface WebFontMeta {
name: string
weights?: (string | number)[]
italic?: boolean
/**
* Переопределить провайдера
* @default <соответствует корневой конфигурации>
*/
provider?: WebFontsProviders
}
extendTheme
- Тип:
boolean
- По умолчанию:
true
Расширить объект темы.
themeKey
- Тип:
string
- По умолчанию:
fontFamily
Ключ для объекта темы.
inlineImports
- Тип:
boolean
- По умолчанию:
true
Встраивать CSS @import()
.
customFetch
- Тип:
(url: string) => Promise<string>
- По умолчанию:
undefined
Используйте собственную функцию для загрузки источника шрифта. Смотрите Пользовательская функция загрузки.
Пример
presetWebFonts({
provider: 'google', // провайдер по умолчанию
fonts: {
// это расширит тему по умолчанию
sans: 'Roboto',
mono: ['Fira Code', 'Fira Mono:400,700'],
// пользовательские
lobster: 'Lobster',
lato: [
{
name: 'Lato',
weights: ['400', '700'],
italic: true,
},
{
name: 'sans-serif',
provider: 'none',
},
],
},
})
Следующий 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";
}
Локальная служба шрифтов
По умолчанию пресет будет загружать шрифты с CDN провайдера. Если вы хотите обслуживать шрифты локально, вы можете загрузить шрифты и обслуживать их с вашего собственного сервера, используя процессор из @unocss/preset-web-fonts/local
.
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',
},
// Это загрузит шрифты и обеспечит их локальную службу
processors: createLocalFontProcessor({
// Директория для кэширования шрифтов
cacheDir: 'node_modules/.cache/unocss/fonts',
// Директория для сохранения ресурсов шрифтов
fontAssetsDir: 'public/assets/fonts',
// Базовый URL для обслуживания шрифтов на клиенте
fontServeBaseUrl: '/assets/fonts'
})
}),
],
})
Это загрузит ресурсы шрифтов в public/assets/fonts
и будет обслуживать их с /assets/fonts
на клиенте. При этом убедитесь, что лицензия шрифтов позволяет их распространять, так как инструмент не несет ответственности за любые юридические проблемы.
INFO
Эта функция специфична для Node.js и не будет работать в браузере.