Flex — это компонент Chakra UI, который реализует CSS
Flexbox. Он наследует все свойства Box и расширяет их,
добавляя удобные пропсы для управления выравниванием,
направлением и размером элементов
внутри контейнера. Flex обеспечивает гибкое и динамическое расположение
элементов без необходимости писать кастомные CSS-классы.
Для использования Flex нужно импортировать его из Chakra
UI:
import { Flex, Box } from "@chakra-ui/react";
function Example() {
return (
<Flex>
<Box w="100px" h="100px" bg="red.400" />
<Box w="100px" h="100px" bg="green.400" />
<Box w="100px" h="100px" bg="blue.400" />
</Flex>
);
}
По умолчанию Flex располагает элементы
горизонтально (row) и выравнивает их по
началу контейнера (flex-start).
direction
(flexDirection)Определяет направление размещения элементов:
row — горизонтальное (по умолчанию)row-reverse — горизонтальное в обратном порядкеcolumn — вертикальноеcolumn-reverse — вертикальное в обратном порядке<Flex direction="column">
<Box h="50px" bg="red.300" />
<Box h="50px" bg="green.300" />
<Box h="50px" bg="blue.300" />
</Flex>
align (alignItems)Выравнивает элементы по поперечной оси:
flex-start — элементы прижаты к началуcenter — по центруflex-end — к концуstretch — растягивает на всю высоту контейнераbaseline — выравнивание по текстовой линии<Flex align="center" h="200px">
<Box w="50px" h="50px" bg="red.300" />
<Box w="50px" h="100px" bg="green.300" />
<Box w="50px" h="70px" bg="blue.300" />
</Flex>
justify
(justifyContent)Выравнивает элементы по главной оси:
flex-start — прижаты к началуcenter — по центруflex-end — к концуspace-between — равномерный интервал, первый и
последний у краёвspace-around — равные отступы вокруг элементовspace-evenly — равные интервалы между всеми
элементами<Flex justify="space-between">
<Box w="50px" h="50px" bg="red.300" />
<Box w="50px" h="50px" bg="green.300" />
<Box w="50px" h="50px" bg="blue.300" />
</Flex>
wrap (flexWrap)Позволяет элементам переноситься на новую строку, если они не помещаются:
nowrap — элементы в одну строку (по умолчанию)wrap — перенос на новую строкуwrap-reverse — перенос в обратном порядке<Flex wrap="wrap" w="200px">
<Box w="100px" h="50px" bg="red.300" />
<Box w="100px" h="50px" bg="green.300" />
<Box w="100px" h="50px" bg="blue.300" />
</Flex>
gap — расстояние
между элементамиПроп gap позволяет задать интервал между
элементами Flex без использования маргинов.
<Flex gap="4">
<Box w="50px" h="50px" bg="red.300" />
<Box w="50px" h="50px" bg="green.300" />
<Box w="50px" h="50px" bg="blue.300" />
</Flex>
Значение gap можно задавать в пикселях
(gap="16px") или использовать масштаб Chakra
(gap="4" = 1rem).
flexКаждый дочерний элемент Flex может управлять своим
поведением с помощью пропса flex:
flex="1" — элемент растягивается, заполняя доступное
пространствоflex="0 1 auto" — по умолчаниюflexGrow, flexShrink,
flexBasis — тонкая настройка поведения<Flex>
<Box flex="1" h="50px" bg="red.300" />
<Box flex="2" h="50px" bg="green.300" />
<Box flex="1" h="50px" bg="blue.300" />
</Flex>
В примере второй элемент занимает в два раза больше пространства, чем первый и третий.
Flex для центрированияЧастый кейс — вертикальное и горизонтальное центрирование:
<Flex align="center" justify="center" h="200px" bg="gray.100">
<Box w="100px" h="100px" bg="purple.300" />
</Flex>
Такой код создает идеально центрированный элемент как по горизонтали, так и по вертикали без лишних оберток.
Chakra UI поддерживает адаптивные значения через массивы или объекты. Это позволяет менять свойства Flex в зависимости от ширины экрана.
<Flex
direction={{ base: "column", md: "row" }}
gap={{ base: 2, md: 4 }}
align="center"
justify="center"
>
<Box w="50px" h="50px" bg="red.300" />
<Box w="50px" h="50px" bg="green.300" />
<Box w="50px" h="50px" bg="blue.300" />
</Flex>
base) элементы располагаются
колонкойmd) — рядомFlex отлично сочетается с Box,
Image, Text, Button и другими
компонентами Chakra. Можно создавать навигационные
панели, карточки, галереи и
сложные макеты, полностью управляемые пропсами Flex без написания
CSS.
<Flex p="4" bg="gray.50" align="center" justify="space-between">
<Box>Logo</Box>
<Flex gap="4">
<Button colorScheme="teal">Home</Button>
<Button colorScheme="teal">About</Button>
<Button colorScheme="teal">Contact</Button>
</Flex>
</Flex>
Этот подход позволяет создавать гибкие интерфейсы с минимальным кодом и высокой читаемостью.
Flex — это расширяемый контейнер на основе Flexbox с
удобными пропсами.direction, align,
justify, wrap, gap.flex,
flexGrow, flexShrink,
flexBasis.Flex в Chakra UI — это фундамент для построения динамических, адаптивных и легко поддерживаемых интерфейсов.