Chakra UI предоставляет мощные инструменты для работы с CSS
Grid, позволяя создавать сложные сеточные макеты с минимальным
количеством кода. Основным компонентом для сеток является
<Grid>, который работает аналогично CSS-свойству
display: grid.
import { Grid, Box } from "@chakra-ui/react";
<Grid templateColumns="repeat(3, 1fr)" gap={4}>
<Box bg="tomato" height="100px" />
<Box bg="blue.500" height="100px" />
<Box bg="green.300" height="100px" />
</Grid>
В этом примере создается трехколоночная сетка, где
каждая колонка занимает равную долю пространства благодаря
1fr. Свойство gap отвечает за промежутки между
элементами сетки.
templateColumns и templateRowstemplateColumns — определяет
количество и ширину колонок.templateRows — задает высоту
рядов.Примеры значений:
"repeat(3, 1fr)" — три равные колонки."100px 2fr 1fr" — первая колонка фиксированной ширины,
вторая и третья распределяют оставшееся пространство."auto" — колонки подстраиваются под содержимое.<Grid templateColumns="100px 2fr 1fr" templateRows="50px auto 100px" gap={2}>
<Box bg="red.200" />
<Box bg="yellow.200" />
<Box bg="blue.200" />
</Grid>
gridColumn и
gridRowКаждый дочерний элемент может занимать несколько колонок или
рядов с помощью gridColumn и
gridRow:
<Box gridColumn="1 / 3" gridRow="2 / 4" bg="purple.300" />
Здесь элемент начнется с первой колонки и займет две колонки
(1 / 3), а по рядам займет вторую и третью
(2 / 4).
Ключевые моменты:
"start / end""span 2" для
растягивания на 2 единицы<Box gridColumn="span 2" bg="pink.200" />
autoFlowСвойство gridAutoFlow управляет автоматическим
порядком размещения элементов в сетке:
<Grid templateColumns="repeat(3, 1fr)" gap={4} autoFlow="row dense">
<Box bg="red.300" />
<Box bg="green.300" />
<Box bg="blue.300" />
</Grid>
Возможные значения:
"row" — элементы добавляются по рядам (по
умолчанию)"column" — добавление по колонкам"row dense" или "column dense" — плотное
размещение с минимизацией пустых ячеекgap, rowGap,
columnGapgap — общий промежуток между рядами и
колонкамиrowGap — расстояние между рядамиcolumnGap — расстояние между
колонками<Grid templateColumns="repeat(4, 1fr)" rowGap={6} columnGap={3}>
<Box bg="teal.200" height="50px" />
<Box bg="orange.200" height="50px" />
</Grid>
minmaxChakra UI поддерживает FR-единицы и функцию
minmax() для гибких макетов:
<Grid templateColumns="repeat(3, minmax(100px, 1fr))" gap={4}>
<Box bg="blue.100" />
<Box bg="blue.200" />
<Box bg="blue.300" />
</Grid>
1fr).auto и
max-contentМожно задавать размеры ячеек по содержимому или автоматически:
<Grid templateColumns="auto max-content 1fr" gap={2}>
<Box bg="red.100">Короткий текст</Box>
<Box bg="green.100">Очень длинный текст, который занимает больше места</Box>
<Box bg="blue.100" />
</Grid>
auto — размер подстраивается под контентmax-content — размер под наибольший элемент в
колонкеChakra UI позволяет использовать массивы и объекты для адаптивных сеток:
<Grid
templateColumns={{ base: "repeat(1, 1fr)", md: "repeat(3, 1fr)" }}
gap={4}
>
<Box bg="red.200" height="80px" />
<Box bg="blue.200" height="80px" />
<Box bg="green.200" height="80px" />
</Grid>
base — мобильная версияmd — планшет/десктопGridItemКомпонент <GridItem> упрощает работу с элементами
сетки:
import { Grid, GridItem } from "@chakra-ui/react";
<Grid templateColumns="repeat(4, 1fr)" gap={4}>
<GridItem colSpan={2} bg="pink.200" />
<GridItem colSpan={1} bg="blue.200" />
<GridItem colSpan={1} bg="green.200" />
</Grid>
colSpan — количество колонок, которые занимает
элементrowSpan — количество рядовjustifyItems, alignItemsСетка поддерживает горизонтальное и вертикальное выравнивание:
<Grid
templateColumns="repeat(3, 1fr)"
gap={4}
justifyItems="center"
alignItems="center"
>
<Box bg="red.200" height="50px" width="50px" />
<Box bg="green.200" height="100px" width="50px" />
<Box bg="blue.200" height="80px" width="50px" />
</Grid>
justifyItems — выравнивание по горизонтали внутри
ячейкиalignItems — по вертикалиGrid-свойства Chakra UI позволяют создавать сложные и
адаптивные макеты с минимальным кодом, комбинируя
templateColumns,
templateRows,
gap,
gridColumn,
gridRow и адаптивные объекты.
Использование <GridItem> и фракционных единиц делает
сетки гибкими и управляемыми, обеспечивая современный
дизайн без лишних CSS-оберток.