Chakra UI предоставляет мощный и гибкий механизм для переопределения
стилей компонентов, позволяя настраивать внешний вид элементов на уровне
темы или непосредственно при использовании компонента. Основные подходы
включают использование props компонентов,
тематических настроек (theme overrides) и
функций стилизации с sx или
styleConfig.
Каждый компонент Chakra UI имеет набор style props, которые позволяют изменять визуальные характеристики без написания CSS. Это ключевой механизм для быстрого переопределения стилей:
import { Button } from "@chakra-ui/react";
<Button
colorScheme="teal"
size="lg"
borderRadius="md"
boxShadow="md"
>
Нажми меня
</Button>
Ключевые моменты:
colorScheme задаёт базовую цветовую палитру
компонента.size регулирует размер (padding, fontSize и
height).borderRadius, boxShadow и другие style
props позволяют тонко настраивать внешний вид.extendThemeДля глобального контроля внешнего вида компонентов используют кастомизацию темы. Chakra UI поддерживает создание собственного объекта темы и расширение стандартной:
import { extendTheme } from "@chakra-ui/react";
const theme = extendTheme({
components: {
Button: {
baseStyle: {
fontWeight: "bold",
textTransform: "uppercase",
},
sizes: {
xl: {
h: "60px",
fontSize: "lg",
px: "32px",
},
},
variants: {
solid: {
bg: "blue.500",
color: "white",
_hover: {
bg: "blue.600",
},
},
},
},
},
});
export default theme;
Основные уровни переопределения:
baseStyle – базовые стили для всех экземпляров
компонента.sizes – определение размеров (height, padding,
fontSize) для sm, md, lg, или
кастомных.variants – различные визуальные варианты компонента
(например, solid, outline)._hover, _active, _focus –
псевдоклассы для интерактивного поведения.variants и sizesvariants позволяют создавать визуально различающиеся
версии одного компонента без дублирования кода. Это особенно полезно для
поддержания консистентного дизайна в проекте:
<Button variant="outline" size="lg">
Отменить
</Button>
<Button variant="solid" size="xl">
Подтвердить
</Button>
Можно создать собственные варианты через тему:
variants: {
ghostRed: {
bg: "red.100",
color: "red.700",
_hover: { bg: "red.200" },
},
}
После этого variant="ghostRed" будет доступен для
использования на всех кнопках.
styleConfigДля более сложных компонентов Chakra UI поддерживает функциональные конфигурации стилей, где стили задаются через функцию, принимающую props:
const ButtonConfig = {
variants: {
dynamic: (props) => ({
bg: props.colorMode === "dark" ? "gray.700" : "gray.200",
color: props.colorMode === "dark" ? "white" : "black",
}),
},
};
const theme = extendTheme({
components: {
Button: ButtonConfig,
},
});
Преимущество подхода в том, что стили адаптируются к props и
состоянию приложения, например colorMode или
isDisabled.
chakra()Chakra UI предоставляет утилиту chakra(), позволяющую
расширять любой компонент и переопределять его стили на уровне
конкретного элемента:
import { chakra } from "@chakra-ui/react";
const CustomHeading = chakra("h1", {
baseStyle: {
fontWeight: "extrabold",
letterSpacing: "wider",
color: "purple.600",
},
});
<CustomHeading fontSize="4xl">Заголовок</CustomHeading>
Особенности подхода:
baseStyle, псевдоклассов
и responsive props.sx propЕсли требуется изменить несколько CSS-свойств локально, можно
использовать sx:
<Box
sx={{
bg: "orange.100",
borderRadius: "lg",
padding: "24px",
_hover: { bg: "orange.200" },
}}
>
Содержимое блока
</Box>
Преимущества sx:
styleConfig.chakra() и sx подходят для переопределений
на уровне отдельных экземпляров компонента или кастомных элементов.Переопределение стилей в Chakra UI строится на комбинации этих подходов, что обеспечивает высокую гибкость при сохранении единообразия интерфейса и поддержки responsive и state-based стилей.