Для интеграции Chakra UI в проект на React требуется установка пакетов через npm или yarn:
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
Или:
yarn add @chakra-ui/react @emotion/react @emotion/styled framer-motion
После установки необходимо обернуть корневой компонент приложения в
ChakraProvider, который обеспечивает доступ ко всем
компонентам и стилям библиотеки:
import { ChakraProvider } from '@chakra-ui/react';
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(
<ChakraProvider>
<App />
</ChakraProvider>,
document.getElementById('root')
);
ChakraProvider поддерживает настройку темы, что
позволяет централизованно управлять цветовой схемой, типографикой и
другими стилями.
Chakra UI предоставляет возможность полностью настраивать тему через
объект extendTheme. Это позволяет добавлять новые цвета,
шрифты, размеры компонентов и модифицировать существующие.
import { extendTheme, ChakraProvider } from '@chakra-ui/react';
const customTheme = extendTheme({
colors: {
brand: {
50: '#f5f7ff',
100: '#e0e7ff',
200: '#b3bcff',
300: '#8091ff',
400: '#4d65ff',
500: '#1a38ff',
600: '#0026cc',
700: '#001999',
800: '#000d66',
900: '#000533',
},
},
fonts: {
heading: 'Montserrat, sans-serif',
body: 'Inter, sans-serif',
},
});
function Root() {
return (
<ChakraProvider theme={customTheme}>
<App />
</ChakraProvider>
);
}
Ключевые моменты настройки темы:
Chakra UI использует систему цветовых тонов, которая
позволяет динамически изменять внешний вид компонентов в зависимости от
состояния (hover, active, focus). Для применения пользовательских цветов
достаточно указать ключевые значения в объекте colors
темы:
<Button colorScheme="brand">Нажми меня</Button>
Здесь "brand" — это имя пользовательской палитры,
определённой в customTheme.colors.
Для работы с темной и светлой темами используется
useColorMode:
import { useColorMode, Button } from '@chakra-ui/react';
function ThemeToggle() {
const { colorMode, toggleColorMode } = useColorMode();
return (
<Button onCl ick={toggleColorMode}>
Переключить на {colorMode === 'light' ? 'темную' : 'светлую'} тему
</Button>
);
}
ChakraProvider автоматически учитывает цветовую схему
при рендеринге компонентов.
Chakra UI предоставляет гибкую систему управления шрифтами и размерами текста. В теме можно определить:
Пример настройки:
const theme = extendTheme({
fonts: {
heading: 'Roboto, sans-serif',
body: 'Open Sans, sans-serif',
},
fontSizes: {
xs: '12px',
sm: '14px',
md: '16px',
lg: '18px',
xl: '20px',
'2xl': '24px',
'3xl': '30px',
'4xl': '36px',
},
});
Компоненты автоматически наследуют эти значения через пропсы
size, fontWeight, lineHeight.
Chakra UI позволяет задавать глобальные стили
компонентов через объект components в теме. Это
упрощает единообразное оформление приложения.
Пример настройки кнопок:
const theme = extendTheme({
components: {
Button: {
baseStyle: {
fontWeight: 'bold',
borderRadius: 'md',
},
sizes: {
lg: {
h: '48px',
fontSize: 'lg',
px: '32px',
},
},
variants: {
solid: {
bg: 'brand.500',
color: 'white',
_hover: { bg: 'brand.600' },
},
},
},
},
});
sm, md, lg).solid, outline, ghost и
т.д.).Chakra UI поддерживает глобальные CSS через
styles.global:
const theme = extendTheme({
styles: {
global: {
'html, body': {
fontSize: '16px',
color: 'gray.800',
bg: 'gray.50',
},
a: {
color: 'brand.500',
_hover: {
textDecoration: 'underline',
},
},
},
},
});
Это позволяет задать единый стиль для всего приложения, включая стандартные HTML-теги.
Для автоматического использования темной или светлой темы при
загрузке приложения используется initialColorMode:
import { extendTheme } from '@chakra-ui/react';
import { mode } from '@chakra-ui/theme-tools';
const theme = extendTheme({
config: {
initialColorMode: 'light', // или 'dark'
useSystemColorMode: true,
},
styles: {
global: (props) => ({
body: {
bg: mode('white', 'gray.800')(props),
color: mode('gray.800', 'whiteAlpha.900')(props),
},
}),
},
});
useSystemColorMode: true позволяет автоматически
определять цветовую схему по настройкам операционной системы.
Chakra UI полностью совместим с TypeScript. Для корректной типизации
темы рекомендуется создавать файл с расширением .ts и
использовать тип ChakraTheme:
import { extendTheme, ChakraTheme } from '@chakra-ui/react';
const theme: ChakraTheme = extendTheme({
colors: { brand: { 500: '#1a38ff' } },
});
export default theme;
Типизация обеспечивает автодополнение и предотвращает ошибки при обращении к нестандартным палитрам или компонентам.
Эти шаги создают полноценную базовую конфигурацию проекта с Chakra UI, позволяя использовать все преимущества библиотеки: кастомизацию компонентов, гибкую тему, цветовые схемы и глобальные стили.