В Chakra UI система цветов строится вокруг тематических
значений, позволяющих создавать консистентный и гибкий дизайн.
Цветовая палитра определяется объектом
theme, который можно расширять и
настраивать под конкретные нужды проекта.
В объекте темы ключ colors хранит основные цветовые
значения:
import { extendTheme } from "@chakra-ui/react";
const theme = extendTheme({
colors: {
brand: {
50: "#f5f7ff",
100: "#e0e7ff",
200: "#c7d2fe",
300: "#a5b4fc",
400: "#818cf8",
500: "#6366f1",
600: "#4f46e5",
700: "#4338ca",
800: "#3730a3",
900: "#312e81",
},
},
});
export default theme;
Для применения кастомной палитры нужно обернуть приложение в
ChakraProvider с переданной темой:
import { ChakraProvider } from "@chakra-ui/react";
import theme from "./theme";
function App() {
return (
<ChakraProvider theme={theme}>
{/* Компоненты приложения */}
</ChakraProvider>
);
}
После этого все компоненты Chakra будут использовать новые цвета по умолчанию.
Цвета из темы можно применять через пропсы компонентов:
import { Button } from "@chakra-ui/react";
<Button colorScheme="brand">Нажми меня</Button>
colorScheme автоматически подбирает нужный оттенок для
hover, active,
disabled состояний.bg, color, borderColor:<Box bg="brand.100" color="brand.700" p={4}>
Контент с кастомными цветами
</Box>
Chakra UI позволяет не только создавать новые палитры, но и расширять
стандартные (gray, red, blue и
др.):
const theme = extendTheme({
colors: {
gray: {
50: "#f9fafb",
100: "#f3f4f6",
200: "#e5e7eb",
300: "#d1d5db",
400: "#9ca3af",
500: "#6b7280",
600: "#4b5563",
700: "#374151",
800: "#1f2937",
900: "#111827",
950: "#0a0b0d", // добавленный оттенок
},
},
});
Это позволяет использовать новые оттенки для компонентов без изменения логики работы стандартной темы.
Chakra UI поддерживает модуль цветовой схемы для
светлого и тёмного режимов через объект config:
const theme = extendTheme({
config: {
initialColorMode: "light",
useSystemColorMode: false,
},
colors: {
brand: {
50: "#f5f7ff",
900: "#312e81",
},
},
});
initialColorMode задает стартовую тему.useSystemColorMode позволяет автоматически
переключаться в зависимости от настроек системы.Цветовые схемы можно задавать на уровне отдельных компонентов через
componentStyleConfig:
import { extendTheme } from "@chakra-ui/react";
const Button = {
variants: {
solidBrand: {
bg: "brand.500",
color: "white",
_hover: {
bg: "brand.600",
},
},
},
};
const theme = extendTheme({
components: { Button },
});
Теперь новый вариант solidBrand доступен как:
<Button variant="solidBrand">Брендовая кнопка</Button>
Chakra UI позволяет создавать цветовые токены, которые могут быть использованы для шрифтов, границ и теней:
const theme = extendTheme({
colors: {
primary: "#6366f1",
secondary: "#818cf8",
accent: "#fbbf24",
},
styles: {
global: {
body: {
bg: "primary",
color: "secondary",
},
},
},
});
Chakra автоматически создаёт CSS-переменные для каждого цвета:
--chakra-colors-brand-500 можно использовать в
sx или css пропсах:<Box sx={{ border: "2px solid var(--chakra-colors-brand-500)" }}>
Блок с переменной цвета
</Box>
Это обеспечивает гибкость и интеграцию с другими CSS-системами.
theme.colors.ChakraProvider.colorScheme, bg,
color, borderColor.config.components.Эта структура обеспечивает максимальную гибкость и консистентность в использовании цветов во всём приложении.