SimpleGrid — это компонент сетки, реализованный в библиотеке Chakra UI, предназначенный для упрощённого создания сеточных макетов. Он работает как обёртка над CSS Grid, предоставляя удобные свойства для задания колонок, промежутков и адаптивности без необходимости писать сложные CSS-правила. SimpleGrid идеально подходит для расположения карточек, элементов интерфейса или любых компонентов в виде сетки с равномерным распределением.
columns Определяет количество колонок в сетке. Может быть числом или массивом для адаптивного поведения.
<SimpleGrid columns={3} spacing={4}>
<Box bg="tomato" height="80px" />
<Box bg="blue.500" height="80px" />
<Box bg="green.500" height="80px" />
</SimpleGrid>
Здесь создается сетка из трёх колонок с равным промежутком в 4 единицы.
spacing Задаёт расстояние между элементами
сетки, аналог свойства gap в CSS Grid. Можно задавать одно
значение для всех размеров или массив для адаптивности.
<SimpleGrid columns={[1, 2, 3]} spacing={[2, 4, 6]}>
<Box bg="red.200" height="100px" />
<Box bg="yellow.200" height="100px" />
<Box bg="green.200" height="100px" />
</SimpleGrid>
В этом примере сетка изменяет количество колонок и размер промежутка в зависимости от ширины экрана.
minChildWidth Позволяет автоматически подбирать
количество колонок в зависимости от ширины элементов. Если ширина
контейнера больше, чем minChildWidth, элементы
выстраиваются в несколько колонок.
<SimpleGrid minChildWidth="150px" spacing="6">
<Box bg="pink.300" height="120px" />
<Box bg="purple.300" height="120px" />
<Box bg="orange.300" height="120px" />
</SimpleGrid>
Этот способ удобен для адаптивного дизайна, так как сетка сама рассчитывает количество колонок, чтобы сохранить минимальную ширину элемента.
breakpoints и адаптивность SimpleGrid полностью поддерживает массивные пропсы для адаптивного дизайна. Можно задавать разное количество колонок для разных размеров экрана:
<SimpleGrid columns={{ base: 1, sm: 2, md: 3, lg: 4 }} spacing={5}>
{Array.from({ length: 8 }).map((_, i) => (
<Box key={i} bg="teal.400" height="100px" />
))}
</SimpleGrid>
Здесь base — для мобильных устройств, sm,
md, lg — для progressively больших
экранов.
SimpleGrid поддерживает все стандартные свойства
стиля Chakra UI: bg, p, m,
borderRadius, shadow и т.д. Это позволяет
создавать визуально привлекательные сетки без написания CSS.
<SimpleGrid columns={3} spacing={4} p={5} bg="gray.50" borderRadius="md">
<Box bg="red.400" height="80px" borderRadius="md" />
<Box bg="blue.400" height="80px" borderRadius="md" />
<Box bg="green.400" height="80px" borderRadius="md" />
</SimpleGrid>
SimpleGrid легко интегрируется с любыми Chakra-компонентами, например с Box, Card, Image или пользовательскими компонентами. Это даёт возможность создавать сложные макеты, включая карточки товаров, галереи изображений и информационные панели.
<SimpleGrid columns={[1, 2, 4]} spacing={6}>
<Card>
<CardHeader>
<Heading size="md">Заголовок 1</Heading>
</CardHeader>
<CardBody>
<Text>Содержимое карточки</Text>
</CardBody>
</Card>
<Card>
<CardHeader>
<Heading size="md">Заголовок 2</Heading>
</CardHeader>
<CardBody>
<Text>Содержимое карточки</Text>
</CardBody>
</Card>
</SimpleGrid>
columns.minChildWidth.spacing.columns={{ base: 1, md: 3 }}).В отличие от компонента Grid, SimpleGrid:
columns или minChildWidth.templateColumns и других CSS
Grid-свойств.<SimpleGrid minChildWidth="200px" spacing="8">
{images.map((img, index) => (
<Image key={index} src={img.src} alt={img.alt} borderRadius="lg" />
))}
</SimpleGrid>
<SimpleGrid columns={{ base: 1, md: 2, lg: 4 }} spacing={6}>
<Box bg="blue.300" height="120px" />
<Box bg="green.300" height="200px" />
<Box bg="purple.300" height="150px" />
<Box bg="orange.300" height="100px" />
</SimpleGrid>
SimpleGrid обеспечивает быстрый, гибкий и чистый способ организации элементов в сетку, полностью используя преимущества адаптивности и встроенной системы стилей Chakra UI.