Chakra UI предоставляет гибкий и мощный способ управления
типографикой, позволяя настраивать шрифты на глобальном и компонентном
уровнях. Работа с шрифтами осуществляется через объект темы
(theme) и систему токенов, что обеспечивает единообразие
дизайна и простоту поддержки.
Все шрифты в Chakra UI задаются в объекте theme, который
создаётся с помощью функции extendTheme из пакета
@chakra-ui/react. Основные свойства, отвечающие за
шрифты:
fonts — объект, где задаются семейства
шрифтов для разных категорий.fontSizes — объект с предопределёнными
размерами шрифтов.fontWeights — объект с
предопределёнными значениями толщины текста.lineHeights — объект с высотой
строки.Пример настройки глобальных шрифтов:
import { extendTheme } from '@chakra-ui/react';
const theme = extendTheme({
fonts: {
heading: "'Montserrat', sans-serif",
body: "'Roboto', sans-serif",
mono: "'Fira Code', monospace",
},
fontSizes: {
xs: '0.75rem',
sm: '0.875rem',
md: '1rem',
lg: '1.125rem',
xl: '1.25rem',
'2xl': '1.5rem',
'3xl': '1.875rem',
'4xl': '2.25rem',
'5xl': '3rem',
'6xl': '3.75rem',
},
fontWeights: {
normal: 400,
medium: 500,
semibold: 600,
bold: 700,
},
lineHeights: {
normal: 'normal',
short: 1.25,
base: 1.5,
tall: 1.75,
},
});
export default theme;
Ключевой момент: heading,
body и mono используются в компонентах Chakra
UI по умолчанию. Например, компонент <Heading>
автоматически применяет шрифт из heading, а
<Text> — из body.
Помимо глобальной темы, шрифты можно задавать индивидуально для
каждого компонента через пропсы fontFamily,
fontSize, fontWeight и
lineHeight.
Пример:
import { Text, Heading } from '@chakra-ui/react';
function Example() {
return (
<>
<Heading fontFamily="'Lobster', cursive" fontSize="4xl">
Заголовок с кастомным шрифтом
</Heading>
<Text fontFamily="'Open Sans', sans-serif" fontSize="md" fontWeight="medium">
Абзац с индивидуальной типографикой
</Text>
</>
);
}
Особенности:
fontSize со значениями из темы
(md, lg, 2xl) обеспечивает
согласованность дизайна.Chakra UI позволяет использовать responsive styles, чтобы шрифты адаптировались к размерам экрана. Формат задаётся массивом или объектом:
<Heading fontSize={['2xl', '3xl', '4xl']}>
Адаптивный заголовок
</Heading>
Также можно использовать объектный синтаксис:
<Text fontSize={{ base: 'sm', md: 'md', lg: 'lg' }}>
Адаптивный текст
</Text>
Для подключения нестандартных шрифтов необходимо сначала импортировать их через CSS или ссылку на шрифт. Например, с Google Fonts:
import { ChakraProvider, extendTheme } from '@chakra-ui/react';
import '@fontsource/montserrat/400.css';
import '@fontsource/montserrat/700.css';
const theme = extendTheme({
fonts: {
heading: 'Montserrat, sans-serif',
body: 'Roboto, sans-serif',
},
});
function App({ children }) {
return <ChakraProvider theme={theme}>{children}</ChakraProvider>;
}
Совет: подключение шрифтов через
@fontsource позволяет точно управлять весами и стилями, без
лишних запросов к внешним ресурсам.
В Chakra UI можно задавать шрифты через styles.global
для глобальных CSS-свойств:
const theme = extendTheme({
styles: {
global: {
'html, body': {
fontFamily: "'Roboto', sans-serif",
lineHeight: 'base',
fontWeight: 'normal',
},
a: {
textDecoration: 'none',
_hover: { textDecoration: 'underline' },
},
},
},
});
Это полезно для случаев, когда требуется гарантировать единый шрифт на всех элементах, включая сторонние HTML-теги.
Для производительности и кроссплатформенной совместимости рекомендуется комбинировать кастомные и системные шрифты:
fonts: {
heading: "'Montserrat', system-ui, sans-serif",
body: "'Roboto', system-ui, sans-serif",
}
Преимущества:
Chakra UI использует токены темы, которые позволяют обращаться к шрифтам через пропсы без явного указания значений:
<Text fontFamily="body" fontSize="lg" fontWeight="semibold">
Текст через токены темы
</Text>
fontFamily="body" — берёт значение из
theme.fonts.body.fontWeight="semibold" — берёт значение из
theme.fontWeights.semibold.fontSize="lg" — берёт размер из
theme.fontSizes.lg.Использование токенов упрощает поддержку и масштабирование проекта.
Настройка шрифтов в Chakra UI сочетает в себе гибкость компонентов и мощь глобальной темы, позволяя создавать единый визуальный язык приложения, легко адаптируемый под разные устройства и требования дизайна.