MUI (Material-UI) — это библиотека компонентов для React, реализующая принципы Material Design от Google. Она предоставляет готовые визуальные элементы, такие как кнопки, формы, навигационные панели, таблицы и модальные окна, позволяя создавать современный и консистентный пользовательский интерфейс без необходимости писать стили с нуля.
Ключевые особенности MUI:
Для работы с MUI необходимо установить базовый пакет и пакет иконок:
npm install @mui/material @emotion/react @emotion/styled
npm install @mui/icons-material
Подключение компонентов в проекте React происходит через импорт:
import Button from '@mui/material/Button';
import TextField from '@mui/material/TextField';
Каждый компонент MUI поставляется с предустановленными стилями, которые можно переопределять через props, sx-параметр или styled API.
MUI позволяет задавать глобальные темы через createTheme
и провайдер ThemeProvider:
import { createTheme, ThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';
const theme = createTheme({
palette: {
primary: {
main: '#1976d2',
},
secondary: {
main: '#dc004e',
},
},
typography: {
fontFamily: 'Roboto, Arial, sans-serif',
},
});
function App() {
return (
<ThemeProvider theme={theme}>
<CssBaseline />
{/* остальные компоненты */}
</ThemeProvider>
);
}
Преимущества использования темы:
Кнопки (Button):
<Button variant="contained" color="primary">
Нажми меня
</Button>
variant="contained" создаёт заполненную кнопку.variant="outlined" — с границей.variant="text" — минималистичная текстовая кнопка.Текстовые поля (TextField):
<TextField
label="Имя"
variant="outlined"
fullWidth
required
/>
fullWidth делает поле на всю ширину контейнера.required добавляет визуальную и функциональную
обязательность поля.variant позволяют выбирать оформление:
outlined, filled, standard.Сетки (Grid):
<Grid container spacing={2}>
<Grid item xs={12} sm={6}>
<TextField label="Левый блок" fullWidth />
</Grid>
<Grid item xs={12} sm={6}>
<TextField label="Правый блок" fullWidth />
</Grid>
</Grid>
container определяет родительский контейнер.item — дочерний элемент сетки.xs, sm, md — точки останова
для адаптивного поведения.Использование sx-параметра:
<Button sx={{ bgcolor: 'primary.main', '&:hover': { bgcolor: 'primary.dark' } }}>
Стилизация через sx
</Button>
Styled API:
import { styled } from '@mui/material/styles';
import Button from '@mui/material/Button';
const CustomButton = styled(Button)(({ theme }) => ({
borderRadius: '20px',
padding: theme.spacing(2),
backgroundColor: theme.palette.secondary.main,
color: '#fff',
'&:hover': {
backgroundColor: theme.palette.secondary.dark,
},
}));
MUI включает библиотеку иконок:
import DeleteIcon from '@mui/icons-material/Delete';
<Button startIcon={<DeleteIcon />} color="secondary">
Удалить
</Button>
startIcon и endIcon упрощают добавление
графических элементов в кнопки и другие компоненты.MUI сочетает в себе мощь React и строгие стандарты Material Design, предоставляя инструменты для быстрой, гибкой и эстетичной разработки интерфейсов.