Spacer — это компонент утилиты в библиотеке
Chakra UI, предназначенный для управления пространством
между элементами в Flex-контейнерах. Он автоматически
занимает все доступное пространство в выбранном направлении, позволяя
выравнивать компоненты без необходимости вручную задавать отступы через
margin или padding.
Компонент Spacer работает исключительно внутри
Flex или HStack/VStack, так как
его поведение основано на flex-grow. По умолчанию
Spacer:
Пример использования в горизонтальном Flex:
import { Flex, Box, Spacer } from "@chakra-ui/react";
function Example() {
return (
<Flex>
<Box w="100px" h="50px" bg="tomato" />
<Spacer />
<Box w="100px" h="50px" bg="blue.500" />
</Flex>
);
}
В этом примере Spacer растягивает промежуток между
двумя Box, занимая всё свободное пространство.
Spacer автоматически учитывает направление родительского контейнера:
Flex с direction="row" или
HStack — создаёт горизонтальное
пространство.Flex с direction="column" или
VStack — создаёт вертикальное
пространство.Пример с вертикальной ориентацией:
<Flex direction="column" h="200px">
<Box h="50px" bg="green.400" />
<Spacer />
<Box h="50px" bg="purple.400" />
</Flex>
Здесь Spacer растягивает промежуток по вертикали,
автоматически размещая верхний и нижний Box на максимальном
расстоянии друг от друга.
Внутри одного Flex можно использовать несколько
компонентов Spacer для создания пропорциональных интервалов. Каждый
Spacer будет делить доступное пространство пропорционально своей
flex-grow.
<Flex>
<Box w="50px" h="50px" bg="red.400" />
<Spacer />
<Box w="50px" h="50px" bg="yellow.400" />
<Spacer />
<Box w="50px" h="50px" bg="blue.400" />
</Flex>
В этом случае оба Spacer растянуты равномерно, создавая одинаковые промежутки между блоками.
По умолчанию Spacer занимает всё доступное
пространство. Для точного управления можно использовать
flex свойства родителя:
<Flex>
<Box w="50px" h="50px" bg="red.400" />
<Spacer flex="2" />
<Box w="50px" h="50px" bg="blue.400" />
</Flex>
flex="2" — Spacer займёт в два раза больше
пространства, чем стандартный Spacer с
flex=1.flex
значениями для сложных макетов.Компоненты HStack и VStack — это
обёртки над Flex, упрощающие создание горизонтальных и
вертикальных стеков. Spacer внутри них ведёт себя идентично:
import { HStack, Box, Spacer } from "@chakra-ui/react";
<HStack>
<Box w="50px" h="50px" bg="pink.400" />
<Spacer />
<Box w="50px" h="50px" bg="cyan.400" />
</HStack>
flex
значениями.Макет с фиксированными и гибкими элементами:
<Flex h="100px" align="center">
<Box w="80px" h="80px" bg="red.400" />
<Spacer />
<Box w="120px" h="80px" bg="blue.400" />
<Spacer flex="2" />
<Box w="60px" h="80px" bg="green.400" />
</Flex>
flex=2 растягивается в два раза
больше.margin.Комбинация Spacer с VStack для вертикального распределения:
<VStack h="300px">
<Box h="50px" w="100px" bg="orange.400" />
<Spacer />
<Box h="50px" w="100px" bg="purple.400" />
<Spacer />
<Box h="50px" w="100px" bg="teal.400" />
</VStack>
Ключевые преимущества Spacer:
margin и padding
для динамических макетов.