Цветовые токены в MUI представляют собой централизованную систему управления цветами интерфейса, обеспечивающую единообразие и согласованность визуального оформления. Они позволяют задать основные цвета темы приложения, а затем использовать их через компоненты, обеспечивая гибкость и масштабируемость дизайна.
MUI предоставляет стандартные цветовые палитры, включающие
primary, secondary,
error, warning, info
и success. Каждая палитра состоит из нескольких
оттенков, обозначенных числовыми значениями: 50, 100, 200 … до 900, а
также контрастного цвета текста contrastText.
Пример структуры палитры:
import { createTheme } from '@mui/material/styles';
import { blue, pink } from '@mui/material/colors';
const theme = createTheme({
palette: {
primary: {
main: blue[500],
light: blue[300],
dark: blue[700],
contrastText: '#fff'
},
secondary: {
main: pink[500],
light: pink[300],
dark: pink[700],
contrastText: '#000'
}
}
});
В этом примере blue[500] и pink[500] задают
основные цвета для компонентов, а contrastText
автоматически определяет цвет текста для достаточного контраста.
Для более точного соответствия брендбуку или дизайнерским требованиям
можно создавать собственные цветовые токены. В MUI это делается через
объект palette при создании темы:
const customTheme = createTheme({
palette: {
brandPrimary: {
main: '#1a73e8',
light: '#4d95ff',
dark: '#0049b3',
contrastText: '#ffffff'
},
brandSecondary: {
main: '#ff6f00',
light: '#ffa040',
dark: '#c43e00',
contrastText: '#000000'
}
}
});
После добавления пользовательских токенов их можно использовать через
систему sx или styled компоненты:
import Button from '@mui/material/Button';
<Button sx={{ bgcolor: 'brandPrimary.main', color: 'brandPrimary.contrastText' }}>
Кнопка
</Button>
MUI интегрирует цветовые токены на уровне всех компонентов. В
большинстве компонентов есть пропсы color, позволяющие
ссылаться на палитру темы:
<Button color="primary">Primary Button</Button>
<Button color="secondary">Secondary Button</Button>
<Alert severity="error">Ошибка!</Alert>
Некоторые компоненты используют токены для автоматического расчета
оттенков при hover или disabled состояниях. Например, кнопки
Button и элементы Chip применяют
light и dark версии цвета для интерактивного
состояния.
MUI предоставляет утилиту alpha, которая позволяет
задавать прозрачность цветов:
import { alpha } from '@mui/material';
<Box sx={{ bgcolor: alpha(theme.palette.primary.main, 0.2) }}>
Полупрозрачный фон
</Box>
Функция alpha принимает цвет и значение прозрачности от
0 до 1. Это удобно для создания overlay-эффектов, теней и выделений.
В MUI выделяют отдельные токены для background и text. Например:
palette: {
background: {
default: '#f5f5f5',
paper: '#ffffff'
},
text: {
primary: '#212121',
secondary: '#757575',
disabled: '#bdbdbd'
}
}
background.default — основной фон приложения.background.paper — фон для карточек и
поверхностей.text.primary — основной цвет текста.text.secondary — вспомогательный текст.text.disabled — цвет текста в неактивных
элементах.MUI упрощает переключение между светлой (light) и тёмной
(dark) темой, предоставляя возможность автоматически менять
токены:
const darkTheme = createTheme({
palette: {
mode: 'dark',
primary: {
main: '#90caf9'
},
background: {
default: '#121212',
paper: '#1d1d1d'
},
text: {
primary: '#ffffff',
secondary: '#aaaaaa'
}
}
});
Токены автоматически адаптируют цвета компонентов под выбранный режим, включая контрастность и оттенки hover.
sx и
styledЦветовые токены удобно использовать в sx для быстрого
стилизования:
<Box sx={{ bgcolor: 'primary.main', color: 'text.primary', p: 2 }}>
Контейнер с основным цветом
</Box>
Или через styled для создания переиспользуемых
компонентов:
import { styled } from '@mui/material/styles';
import Button from '@mui/material/Button';
const BrandButton = styled(Button)(({ theme }) => ({
backgroundColor: theme.palette.brandPrimary.main,
color: theme.palette.brandPrimary.contrastText,
'&:hover': {
backgroundColor: theme.palette.brandPrimary.dark
}
}));
Цветовые токены MUI обеспечивают консистентность,
масштабируемость и адаптивность
дизайна, позволяя управлять цветами всего приложения через единый объект
theme.palette. Они поддерживают:
sx/styled.Эта система делает управление цветами централизованным и гибким, упрощая поддержку визуального единства и соответствие дизайну.