Компонент Image в Chakra UI предназначен для
отображения изображений с полной поддержкой адаптивного дизайна,
стилизации и интеграции с системой тем. Он расширяет стандартный
HTML-тег <img>, добавляя мощные возможности для
управления размером, формой, эффектами и поведением при загрузке.
import { Image } from "@chakra-ui/react";
<Image
src="https://example.com/photo.jpg"
alt="Описание изображения"
/>
Если alt не указан, компонент выдаст предупреждение при разработке в режиме strict.
Chakra UI позволяет управлять размерами через props
boxSize, width, height,
maxW, maxH, minW,
minH.
<Image
src="https://example.com/photo.jpg"
alt="Пример"
boxSize="200px"
objectFit="cover"
/>
cover,
contain, fill, none,
scale-down.<Image
src="https://example.com/photo.jpg"
alt="Адаптивное изображение"
width={["100%", "50%", "25%"]} // mobile, tablet, desktop
borderRadius="md"
/>
Здесь размеры автоматически меняются в зависимости от breakpoint.
Компонент Image поддерживает fallbackSrc – изображение, отображаемое, если основной источник не загружается.
<Image
src="https://example.com/nonexistent.jpg"
alt="Fallback Example"
fallbackSrc="https://example.com/fallback.jpg"
/>
Можно также использовать fallback как JSX для кастомного содержимого:
<Image
src="https://example.com/nonexistent.jpg"
alt="Custom Fallback"
fallback={<div style={{width: 200, height: 200, background: "#eee"}}>Загрузка...</div>}
/>
Chakra UI позволяет применять border, shadow, rounded и transition напрямую через props:
<Image
src="https://example.com/photo.jpg"
alt="Styled Image"
borderRadius="full"
border="2px solid teal"
boxShadow="lg"
transition="transform 0.3s"
_hover={{ transform: "scale(1.05)" }}
/>
Для больших страниц или галерей изображений важна оптимизация через loading=“lazy”:
<Image
src="https://example.com/photo.jpg"
alt="Lazy Loaded"
loading="lazy"
/>
Это позволяет браузеру загружать изображения только когда они попадают в видимую область экрана.
<Image
src="https://example.com/photo.jpg"
alt="Object Position Example"
boxSize="300px"
objectFit="cover"
objectPosition="top"
/>
Изображение может быть обёрнуто в Box для добавления границ, отступов и позиционирования:
import { Box, Image } from "@chakra-ui/react";
<Box boxSize="250px" overflow="hidden" borderRadius="lg">
<Image
src="https://example.com/photo.jpg"
alt="Box Wrapped"
objectFit="cover"
width="100%"
height="100%"
/>
</Box>
Для улучшения UX при загрузке изображений используется Skeleton:
import { Image, Skeleton, Box } from "@chakra-ui/react";
import { useState } from "react";
function ImageWithSkeleton() {
const [loaded, setLoaded] = useState(false);
return (
<Box>
{!loaded && <Skeleton height="200px" width="300px" />}
<Image
src="https://example.com/photo.jpg"
alt="Skeleton Example"
display={loaded ? "block" : "none"}
onL oad={() => setLoaded(true)}
/>
</Box>
);
}
Chakra UI поддерживает динамическую стилизацию в зависимости от темы:
<Image
src="https://example.com/photo.jpg"
alt="Themed Image"
borderColor="gray.200"
_dark={{ borderColor: "gray.600" }}
borderWidth="2px"
borderStyle="solid"
/>
Галерея с адаптивными изображениями:
import { SimpleGrid, Image } from "@chakra-ui/react";
<SimpleGrid columns={[1, 2, 4]} spacing={4}>
{images.map((img) => (
<Image
key={img.id}
src={img.url}
alt={img.alt}
borderRadius="md"
objectFit="cover"
boxSize="250px"
/>
))}
</SimpleGrid>
Карточка пользователя с аватаром:
import { Box, Image, Text } from "@chakra-ui/react";
<Box p={4} borderWidth="1px" borderRadius="md">
<Image
src="https://example.com/avatar.jpg"
alt="User Avatar"
borderRadius="full"
boxSize="100px"
mb={4}
/>
<Text fontWeight="bold">Имя пользователя</Text>
<Text fontSize="sm" color="gray.500">Позиция или роль</Text>
</Box>
Компонент Image в Chakra UI предоставляет гибкую систему управления изображениями, позволяя строить адаптивные и стилизованные интерфейсы без необходимости писать CSS вручную. Его интеграция с Box, Skeleton, адаптивными props и темами делает его центральным элементом для создания визуально богатых веб-приложений.