Chakra UI предоставляет мощный и гибкий механизм для реализации адаптивного дизайна в приложениях на JavaScript и React. Основная концепция заключается в том, что компоненты могут динамически изменять свои свойства в зависимости от размеров экрана или устройства, что позволяет создавать интерфейсы, одинаково удобные на мобильных, планшетах и десктопах.
Одним из ключевых инструментов является использование responsive props — специальных свойств, принимающих массивы или объекты для разных точек преломления (breakpoints).
Пример использования массива:
import { Box } from "@chakra-ui/react";
<Box
w={["100%", "75%", "50%", "25%"]}
p={[2, 4, 6, 8]}
bg="teal.500"
>
Адаптивный блок
</Box>
Здесь:
w задаёт ширину: на мобильных устройствах 100%, на
небольших планшетах 75%, на средних экранах 50%, на больших 25%.p — внутренние отступы, которые также меняются в
зависимости от размера экрана.Пример использования объекта:
<Box
w={{ base: "100%", md: "50%", lg: "25%" }}
bg="purple.300"
>
Адаптивный блок
</Box>
В объекте base, sm, md,
lg, xl соответствуют стандартным breakpoint’ам
Chakra UI:
Breakpoints в Chakra UI определяются в теме и могут быть кастомизированы. По умолчанию они выглядят так:
const theme = {
breakpoints: {
sm: "30em",
md: "48em",
lg: "62em",
xl: "80em",
},
};
1 em ≈ 16px, поэтому sm ≈ 480px. Breakpoints позволяют контролировать поведение компонентов в зависимости от ширины экрана, что обеспечивает гибкость интерфейса.
Для текста Chakra UI также поддерживает responsive props:
import { Text } from "@chakra-ui/react";
<Text fontSize={["sm", "md", "lg", "xl"]} color="gray.700">
Адаптивный текст
</Text>
Размер шрифта будет изменяться на разных устройствах, обеспечивая читаемость на маленьких экранах и гармоничный вид на больших.
Chakra UI предоставляет компоненты SimpleGrid,
Grid, Flex, которые полностью поддерживают
адаптивность.
Пример SimpleGrid:
import { SimpleGrid, Box } from "@chakra-ui/react";
<SimpleGrid columns={{ base: 1, sm: 2, md: 3, lg: 4 }} spacing={4}>
<Box bg="red.200" height="100px" />
<Box bg="green.200" height="100px" />
<Box bg="blue.200" height="100px" />
<Box bg="yellow.200" height="100px" />
</SimpleGrid>
columns меняет количество колонок в зависимости от
ширины экрана.spacing задаёт промежутки между элементами.Компонент Flex позволяет адаптивно менять направление
элементов:
<Flex direction={{ base: "column", md: "row" }} gap={4}>
<Box bg="pink.300" w="100px" h="100px" />
<Box bg="cyan.300" w="100px" h="100px" />
</Flex>
На мобильных устройствах блоки будут располагаться вертикально, на средних и больших — горизонтально.
Chakra UI поддерживает свойства display,
visibility и hidden с responsive props, что
позволяет показывать или скрывать элементы на определённых
устройствах:
<Box display={{ base: "none", md: "block" }} bg="teal.200" p={4}>
Этот блок виден только на экранах >= md
</Box>
Это особенно полезно для навигационных панелей, сайдбаров и элементов интерфейса, которые должны изменять своё присутствие на странице в зависимости от устройства.
Компонент Image в Chakra UI может масштабироваться
вместе с контейнером, а также поддерживать responsive props:
import { Image } from "@chakra-ui/react";
<Image
src="example.jpg"
boxSize={{ base: "100px", md: "200px", lg: "300px" }}
objectFit="cover"
/>
boxSize изменяется в зависимости от ширины экрана,
сохраняя пропорции изображения с помощью objectFit.
Адаптивность в Chakra UI тесно интегрирована с темой. Можно определять кастомные размеры, отступы, шрифты для разных точек преломления:
const theme = extendTheme({
sizes: {
container: {
sm: "400px",
md: "800px",
lg: "1200px",
},
},
});
Использование кастомных размеров и breakpoints позволяет создавать единый стиль интерфейса и управлять адаптивностью централизованно.
Flex, Grid) для упрощения адаптивного
поведения.Chakra UI превращает адаптивный дизайн из сложной задачи с медиа-запросами в удобную систему декларативных свойств, которая позволяет создавать интерфейсы, автоматически подстраивающиеся под размер экрана и устройство пользователя.