Импортировал ли шрифты в CSS
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Импорт шрифтов в CSS
Импорт шрифтов — это важный аспект оптимизации и управления типографией веб-приложений. Существует несколько способов добавить шрифты в проект, и каждый имеет свои преимущества и недостатки.
Способы импорта шрифтов
1. @import в CSS файле
Это классический способ загрузки шрифтов через правило @import:
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap');
body {
font-family: 'Inter', sans-serif;
}
Преимущества:
- Простота использования
- Централизованное управление шрифтами
Недостатки:
- Дополнительный HTTP запрос
- Блокирует парсинг CSS (если в начале файла)
2. @font-face для локальных шрифтов
Этот способ используется для загрузки шрифтов, хранящихся на сервере:
@font-face {
font-family: 'CustomFont';
src: url('/fonts/custom-font.woff2') format('woff2'),
url('/fonts/custom-font.woff') format('woff');
font-weight: 400;
font-style: normal;
}
body {
font-family: 'CustomFont', sans-serif;
}
Преимущества:
- Контроль над шрифтом
- Улучшение производительности (локальные файлы)
- Поддержка различных форматов (woff2, woff, ttf)
Недостатки:
- Нужно самостоятельно хранить файлы шрифтов
- Дополнительные HTTP запросы за каждый файл
3. Теговой <link> в HTML (рекомендуется)
Лучший подход для внешних шрифтов (Google Fonts, Fontsource):
<!-- В <head> -->
<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=Inter:wght@400;500;700&display=swap" rel="stylesheet">
/* В CSS файле */
body {
font-family: 'Inter', sans-serif;
}
Преимущества:
- Не блокирует парсинг CSS
- preconnect ускоряет загрузку
- Работает лучше с кешированием браузера
Недостатки:
- Нужно добавлять в HTML
- Зависит от внешних сервисов
4. Next.js: next/font/google (лучший способ)
В Next.js рекомендуется использовать встроенный модуль next/font:
// app/layout.jsx
import { Inter } from 'next/font/google';
const inter = Inter({
subsets: ['latin', 'cyrillic'],
weight: ['400', '500', '700'],
variable: '--font-inter',
});
export default function RootLayout({ children }) {
return (
<html lang="ru" className={inter.variable}>
<body className={inter.className}>
{children}
</body>
</html>
);
}
/* globals.css */
body {
font-family: var(--font-inter), sans-serif;
}
Преимущества:
- Оптимизирует шрифты автоматически
- Поддерживает подмножества (кириллица)
- Предотвращает CLS (Cumulative Layout Shift)
- Встроенные шрифты при build-time
Недостатки:
- Только для Next.js
- Требует правильной конфигурации
5. CSS переменные для масштабируемости
Используйте CSS переменные для управления шрифтами:
:root {
--font-primary: 'Inter', sans-serif;
--font-secondary: 'Georgia', serif;
--font-mono: 'Courier New', monospace;
}
body {
font-family: var(--font-primary);
}
code {
font-family: var(--font-mono);
}
Оптимизация загрузки
Использование display=swap
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap');
Это говорит браузеру использовать fallback-шрифт сразу, а затем заменить его при загрузке.
Предзагрузка шрифтов
<link rel="preload"
as="font"
href="/fonts/inter-400.woff2"
type="font/woff2"
crossorigin>
Это критично для performance.
Сжатие шрифтов
@font-face {
font-family: 'Inter';
src: url('/fonts/inter.woff2') format('woff2');
font-display: swap;
}
Используйте формат woff2 — он меньше по размеру.
Чеклист при добавлении шрифтов
- Выбрать источник: Google Fonts, Fontsource, локальные файлы
- Определить наборы символов: Latin, Cyrillic (для русского)
- Выбрать начертания: 400, 500, 700 (обычно достаточно)
- Оптимизировать загрузку: preconnect, preload, display=swap
- Использовать CSS переменные: для гибкости
- Проверить на CLS: убедиться, что нет скачков при загрузке
- Протестировать на медленном интернете: особенно важно
Пример полной конфигурации (Next.js + Tailwind)
// app/layout.jsx
import { Inter } from 'next/font/google';
import './globals.css';
const inter = Inter({
subsets: ['latin', 'cyrillic'],
variable: '--font-inter',
});
export default function RootLayout({ children }) {
return (
<html lang="ru" className={inter.variable}>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
</head>
<body>
{children}
</body>
</html>
);
}
/* globals.css */
@theme inline {
--font-inter: var(--font-inter);
}
body {
font-family: var(--font-inter), sans-serif;
line-height: 1.5;
}
Итоги
- Для Next.js: используйте
next/font/google(лучший вариант) - Для других проектов: используйте
<link>тег в HTML с preconnect - Для локальных шрифтов: @font-face с woff2
- Оптимизируйте: используйте display=swap и preload
- Не забывайте: о поддержке кириллицы для русского текста