В библиотеке MUI (Material-UI) токены дизайна представляют собой централизованное определение визуальных и функциональных параметров интерфейса, таких как цвета, размеры, отступы, типографика и состояние компонентов. Они позволяют обеспечить единообразие и масштабируемость дизайна в приложениях на JavaScript и React.
Токены дизайна в MUI хранятся в объекте theme,
который создается с помощью функции createTheme. Основные
категории токенов:
Пример базового создания темы:
import { createTheme } from '@mui/material/styles';
const theme = createTheme({
palette: {
primary: {
main: '#1976d2',
light: '#63a4ff',
dark: '#004ba0',
contrastText: '#fff',
},
secondary: {
main: '#dc004e',
contrastText: '#fff',
},
},
typography: {
fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
h1: { fontSize: '2.5rem', fontWeight: 500 },
body1: { fontSize: '1rem' },
},
spacing: 8,
shape: { borderRadius: 4 },
});
Здесь ключевые токены — palette.primary.main, typography.h1, spacing и shape.borderRadius.
Palette — основной механизм управления цветами интерфейса. Она делится на следующие категории:
primary,
secondary, disabled.default,
paper.hover, selected, disabled.Пример использования цветов в компоненте:
import Button from '@mui/material/Button';
<Button color="primary" variant="contained">
Primary Button
</Button>
<Button sx={{ bgcolor: 'secondary.main', color: 'secondary.contrastText' }}>
Custom Secondary Button
</Button>
Использование токенов через sx и встроенные пропсы позволяет менять стиль компонентов без жесткой привязки к CSS.
Типографика задается объектом typography. Она включает:
h1…h6, body1,
body2, caption, button.Пример использования:
import Typography from '@mui/material/Typography';
<Typography variant="h4" component="h2">
Заголовок H4
</Typography>
<Typography variant="body1">
Обычный текст с использованием токенов типографики.
</Typography>
Каждый вариант автоматически наследует параметры темы, что гарантирует единообразие.
Spacing — функция для стандартизации отступов и размеров элементов. По умолчанию базовый шаг равен 8px.
<Box sx={{ m: 2, p: 3 }}>
Контент с внешним отступом 16px (2*8) и внутренним 24px (3*8)
</Box>
m — margin (внешний отступ)p — padding (внутренний отступ)mt, mb, ml, mr — отдельные стороныmx, my, px, py — горизонтальные и вертикальные
парыИспользование токенов spacing обеспечивает консистентность между всеми компонентами.
Shape управляет скруглениями и геометрией компонентов:
const theme = createTheme({
shape: { borderRadius: 12 },
});
borderRadius применяется к кнопкам, карточкам,
модальным окнам.sx или styled.Тени (shadows) задаются массивом предопределенных
уровней (0–24):
<Box sx={{ boxShadow: 3, p: 2 }}>
Контент с тенью уровня 3
</Box>
Через объект components можно переопределять токены на уровне отдельных компонентов:
const theme = createTheme({
components: {
MuiButton: {
styleOverrides: {
root: {
textTransform: 'none',
borderRadius: 8,
},
},
defaultProps: {
variant: 'contained',
color: 'primary',
},
},
},
});
Можно добавлять свои собственные токены через расширение темы:
const theme = createTheme({
custom: {
brandColor: '#ff5722',
headerHeight: 64,
},
});
Доступ через theme.custom.brandColor позволяет
использовать их в sx, styled или логике
компонентов, сохраняя консистентность.
theme.Темы подключаются через ThemeProvider:
import { ThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';
<ThemeProvider theme={theme}>
<CssBaseline />
<App />
</ThemeProvider>
theme и useTheme().Токены дизайна в MUI являются фундаментом для создания унифицированного, масштабируемого и легко поддерживаемого интерфейса, позволяя управлять всеми визуальными аспектами приложения централизованно и предсказуемо.