Chakra UI предоставляет удобные и декларативные средства для работы с
Flexbox через компонент <Flex> и
набор утилитных пропсов. Компонент <Flex> является
расширением обычного <Box> и поддерживает все
свойства CSS Flexbox, что позволяет строить сложные макеты с минимальным
количеством кода.
import { Flex, Box } from "@chakra-ui/react";
<Flex direction="row" align="center" justify="space-between">
<Box w="100px" h="100px" bg="red.500" />
<Box w="100px" h="100px" bg="green.500" />
<Box w="100px" h="100px" bg="blue.500" />
</Flex>
В этом примере <Flex> задаёт направление элементов
по горизонтали (direction="row"), выравнивание по центру по
вертикали (align="center") и распределение пространства
между элементами (justify="space-between").
directionСвойство direction управляет направлением размещения
дочерних элементов. Возможные значения:
Пример вертикальной раскладки:
<Flex direction="column" gap={4}>
<Box bg="purple.400" w="50px" h="50px" />
<Box bg="orange.400" w="50px" h="50px" />
<Box bg="teal.400" w="50px" h="50px" />
</Flex>
Здесь gap={4} добавляет промежуток между элементами, что
эквивалентно CSS gap.
alignСвойство align контролирует выравнивание элементов вдоль
поперечной оси (перпендикулярно направлению flex).
Основные значения:
Пример с растяжением элементов:
<Flex align="stretch" h="200px">
<Box w="50px" bg="pink.300" />
<Box w="50px" bg="cyan.300" />
<Box w="50px" bg="yellow.300" />
</Flex>
Все элементы автоматически растягиваются по высоте контейнера.
justifyСвойство justify управляет распределением элементов
вдоль главной оси (по направлению flex). Основные
значения:
Пример с равномерным распределением:
<Flex justify="space-evenly">
<Box w="60px" h="60px" bg="red.400" />
<Box w="60px" h="60px" bg="green.400" />
<Box w="60px" h="60px" bg="blue.400" />
</Flex>
wrapСвойство wrap определяет, будут ли элементы переноситься
на новые строки при нехватке места. Значения:
Пример:
<Flex wrap="wrap" gap={3}>
{Array.from({ length: 8 }, (_, i) => (
<Box key={i} w="100px" h="100px" bg={`blue.${i * 100 + 200}`} />
))}
</Flex>
Элементы автоматически переходят на следующую строку, когда не помещаются в контейнере.
gapСвойство gap задаёт промежуток между элементами flex.
Оно работает как по горизонтали, так и по вертикали, если используется
перенос строк:
<Flex direction="column" gap={6}>
<Box w="80px" h="80px" bg="red.200" />
<Box w="80px" h="80px" bg="green.200" />
<Box w="80px" h="80px" bg="blue.200" />
</Flex>
gap является более предпочтительным способом создания
отступов, чем использование margin, так как сохраняет
семантическую чистоту макета.
Все Flexbox-пропсы можно комбинировать для построения сложных макетов:
<Flex
direction={{ base: "column", md: "row" }}
align="center"
justify="space-between"
wrap="wrap"
gap={4}
>
<Box w="120px" h="120px" bg="red.500" />
<Box w="120px" h="120px" bg="green.500" />
<Box w="120px" h="120px" bg="blue.500" />
<Box w="120px" h="120px" bg="yellow.500" />
</Flex>
Здесь используется адаптивность через объектные пропсы: на мобильных
устройствах (base) элементы располагаются вертикально, а на
десктопе (md) — горизонтально.
<Flex> для макетов вместо ручной
работы с CSS Flexbox.gap для отступов между элементами.direction, align,
justify и wrap для полного контроля над
компоновкой.Chakra UI делает Flexbox удобным и интуитивным, позволяя писать лаконичный и читаемый код без лишней верстки и CSS-файлов.