Компонент Box является фундаментальным строительным блоком в Chakra UI. По сути, это универсальный контейнер, который может использоваться для создания любых элементов интерфейса, от простых обёрток до сложных макетов. Он наследует все стандартные свойства CSS, а также поддерживает удобные системные пропсы, упрощающие стилизацию и адаптивное оформление.
Box поддерживает стандартные CSS-свойства, такие как
margin, padding, width,
height, display, position,
background, color и многие другие. Однако
Chakra UI добавляет системные пропсы, которые позволяют
задавать стили с использованием сокращённой и более читаемой записи:
import { Box } from "@chakra-ui/react";
<Box
w="200px" // width
h="100px" // height
bg="teal.500" // background-color
color="white" // text color
p={4} // padding
m={2} // margin
>
Пример Box
</Box>
Ключевые моменты:
w, h — ширина и высота, поддерживаются
значения в px, %, em, rem.p, pt, pr, pb,
pl, px, py — удобные сокращения
для padding.m, mt, mr, mb,
ml, mx, my — сокращения для
margin.bg и color — использование цветовой
палитры Chakra UI, включая оттенки.Chakra UI позволяет легко создавать адаптивные интерфейсы с помощью массивов и объектов:
<Box
w={["100%", "50%", "25%"]} // мобильные устройства, планшеты, десктоп
p={{ base: 2, md: 4, lg: 6 }} // разные отступы на разных breakpoints
bg={{ base: "red.200", md: "blue.200", lg: "green.200" }}
>
Адаптивный Box
</Box>
Принципы работы:
[mobile, tablet, desktop] соответствует
breakpoints, заданным в теме Chakra.{ base, sm, md, lg, xl } позволяет более
детально контролировать стили на каждом размере экрана.Box может использоваться для управления расположением элементов через
свойства display, position, top,
left, right, bottom и
zIndex:
<Box
position="absolute"
top="50px"
left="50px"
zIndex={10}
bg="orange.300"
w="100px"
h="100px"
>
Позиционированный Box
</Box>
Рекомендации:
flex и grid для организации
макета вместо ручного позиционирования, если требуется
адаптивность.zIndex полезен для наложения элементов, например,
модальных окон или всплывающих подсказок.Box может выполнять роль контейнера flex или grid без использования отдельного компонента:
<Box display="flex" justifyContent="center" alignItems="center" h="200px">
<Box w="50px" h="50px" bg="red.500" />
<Box w="50px" h="50px" bg="blue.500" />
</Box>
<Box display="grid" gridTemplateColumns="repeat(3, 1fr)" gap={4}>
<Box bg="yellow.400" h="50px" />
<Box bg="green.400" h="50px" />
<Box bg="pink.400" h="50px" />
</Box>
Преимущества:
flex и
grid.Box интегрируется с темой Chakra, что позволяет использовать предопределённые цвета, шрифты, размеры и радиусы:
<Box
bg="purple.500"
color="white"
borderRadius="md"
shadow="lg"
p={4}
>
Box с темой
</Box>
borderRadius — sm, md,
lg, full или числовое значение.shadow — predefined тени (sm,
md, lg, xl,
2xl).Box может реагировать на события, такие как onClick,
onMouseEnter, onMouseLeave и др.:
<Box
w="150px"
h="150px"
bg="blue.400"
_hover={{ bg: "blue.600", cursor: "pointer" }}
onCl ick={() => alert("Box кликнут!")}
>
Hover и Click
</Box>
Особенности псевдоклассов Chakra:
_hover, _focus, _active,
_disabled — для интерактивных состояний._before, _after — для вставки
псевдоэлементов._dark и _light для поддержки
темной/светлой темы.Box часто используется как обёртка для других компонентов Chakra или кастомных элементов:
<Box p={6} borderWidth={1} borderRadius="lg" overflow="hidden">
<Box fontWeight="bold" fontSize="xl" mb={2}>
Заголовок
</Box>
<Box color="gray.500">
Контент внутри Box с padding и границей
</Box>
</Box>
Box — это сердце построения интерфейсов в Chakra UI, позволяющее быстро создавать чистые и адаптивные компоненты без избыточного CSS.