В Chakra UI работа с SVG-иконками строится вокруг
компонентов Icon и createIcon. Это позволяет
создавать как стандартные иконки, встроенные в библиотеку, так и
кастомные SVG с полной поддержкой стилизации и реактивного
поведения.
Компонент Icon служит оболочкой для SVG и предоставляет
стандартные свойства для управления размером, цветом и поведением при
наведении или нажатии.
import { Icon } from "@chakra-ui/react";
import { FaBeer } from "react-icons/fa";
<Icon as={FaBeer} w={6} h={6} color="teal.500" />
Ключевые моменты:
as — передаёт React-компонент иконки (часто из
библиотеки react-icons).w и h — ширина и высота иконки,
поддерживаются любые единицы CSS.color — управляет заливкой SVG через
currentColor.Для использования собственных SVG удобно использовать функцию
createIcon, которая превращает SVG в компонент Chakra UI с
полной интеграцией.
import { createIcon } from "@chakra-ui/react";
const CustomStarIcon = createIcon({
displayName: "CustomStarIcon",
viewBox: "0 0 24 24",
path: (
<path
fill="currentColor"
d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"
/>
),
});
<CustomStarIcon w={8} h={8} color="yellow.400" />
Особенности:
displayName — внутреннее имя компонента, полезно для
отладки.viewBox — определяет область отображения SVG.path — JSX с элементами <path>,
<circle>, <rect> и т.д., можно
использовать несколько элементов для сложных фигур.fill="currentColor" позволяет управлять цветом через
свойство color компонента.Chakra UI полностью поддерживает систему токенов темы для иконок:
<Icon as={FaBeer} color="pink.500" boxSize={10} _hover={{ color: "pink.300" }} />
boxSize — сокращение для установки одинаковой ширины и
высоты._hover — псевдоселектор для состояния наведения._active, _focus,
_disabled для интерактивных элементов.SVG-иконки легко комбинируются с компонентами Chakra UI, такими как
Button, IconButton и Input.
import { IconButton } from "@chakra-ui/react";
import { MdDelete } from "react-icons/md";
<IconButton
aria-label="Delete item"
icon={<MdDelete />}
colorScheme="red"
size="lg"
/>
icon принимает любой компонент иконки.colorScheme наследует цвета темы для кнопок с
иконками.isRound, variant для
изменения формы и стиля.Компоненты Icon и createIcon поддерживают
динамическое управление через пропсы:
<Icon as={isFavorite ? MdFavorite : MdFavoriteBorder} color={isFavorite ? "red.500" : "gray.400"} />
Chakra UI совместим с CSS-анимациями и библиотекой Framer Motion. Например, плавное вращение иконки:
import { motion } from "framer-motion";
const MotionIcon = motion(Icon);
<MotionIcon
as={MdAutorenew}
animate={{ rotate: 360 }}
transition={{ repeat: Infinity, duration: 2 }}
w={6}
h={6}
/>
motion обертка для Chakra
Icon.animate и transition.<path>) вместо сложных элементов
<g> и <polygon> для уменьшения
веса.fill="currentColor" упрощает стилизацию
через тему.Chakra UI полностью интегрируется с библиотекой
react-icons, что обеспечивает доступ к тысячам готовых
SVG-иконок без дополнительной работы. Любую иконку можно вставить через
компонент Icon или напрямую в IconButton.
Эта структура позволяет управлять SVG-иконками в Chakra UI максимально гибко: создавать кастомные компоненты, применять темы и состояния, а также использовать анимацию и динамическое отображение, сохраняя при этом лёгкость и читаемость кода.