Компонент SvgIcon в библиотеке MUI предназначен для работы с векторными иконками на основе SVG. Он предоставляет удобный способ создавать настраиваемые иконки, интегрируя их в дизайн системы MUI с полной поддержкой стилизации, размеров и цветовых тем.
Компонент импортируется из пакета @mui/material:
import SvgIcon from '@mui/material/SvgIcon';
Для создания собственной иконки используется следующий синтаксис:
function HomeIcon(props) {
return (
);
}
Ключевые моменты:
SvgIcon всегда располагается элемент
(или несколько ,
, ), который
определяет форму иконки.props (например, color,
fontSize, sx) автоматически применяются к
иконке.1em), что облегчает масштабирование относительно
текста.Компонент поддерживает стандартные цвета MUI:
Особенности работы с цветом:
color="inherit" позволяет наследовать цвет от
родительского элемента.sx:
Компонент поддерживает атрибут fontSize:
Также доступно более точное управление через sx:
Примечание: SvgIcon масштабируется
относительно текста по умолчанию, поэтому размер в em или
пикселях легко интегрируется с типографикой.
MUI предоставляет готовые иконки в виде отдельного пакета
@mui/icons-material. Они построены на базе
SvgIcon:
import HomeIcon from '@mui/icons-material/Home';
Преимущества:
Button,
IconButton, ListItemIcon.Для создания уникальных иконок можно комбинировать несколько
:
function CustomIcon(props) {
return (
);
}
Особенности:
circle,
rect, polygon, line,
g).currentColor. и
трансформации (transform).sx и
styledПример с sx:
Пример с styled:
import { styled } from '@mui/material/styles';
const StyledIcon = styled(SvgIcon)(({ theme }) => ({
color: theme.palette.secondary.main,
fontSize: 50,
'&:hover': {
color: theme.palette.primary.main,
},
}));
Преимущества подхода через styled:
SvgIcon может быть обернут в интерактивные компоненты,
например IconButton:
import IconButton from '@mui/material/IconButton';
Анимацию можно добавлять через CSS или библиотеку
framer-motion:
import { motion } from 'framer-motion';
@mui/icons-material, чтобы
не создавать SVG вручную для каждого случая. с тысячами точек для
уменьшения нагрузки на рендеринг.SvgIcon полностью поддерживает
ThemeProvider MUI. Цвета и размеры иконок автоматически
соответствуют теме:
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
palette: {
primary: { main: '#1976d2' },
secondary: { main: '#dc004e' },
},
});
Рекомендации:
color="primary" и
color="secondary" для согласованности интерфейса.currentColor для элементов SVG, чтобы они наследовали цвет
от темы или родителя.