Механизм темизации в Ant Design построен вокруг системы дизайн-токенов (Design Tokens) — набора параметров, описывающих визуальные свойства интерфейса: цвета, размеры, отступы, шрифты, тени, радиусы скругления и другие характеристики.
В версии 5 библиотека полностью перешла на алгоритмическую систему тем, в которой итоговый внешний вид интерфейса формируется из:
Такая архитектура обеспечивает:
Токены представляют собой объект конфигурации темы.
Пример базового токена:
const theme = {
token: {
colorPrimary: '#1677ff',
borderRadius: 6,
fontSize: 14
}
}
Основные категории токенов:
| Токен | Назначение |
|---|---|
| colorPrimary | основной цвет интерфейса |
| colorSuccess | цвет успешных действий |
| colorWarning | предупреждения |
| colorError | ошибки |
| colorInfo | информационные элементы |
| colorText | основной цвет текста |
| colorBgBase | базовый цвет фона |
| Токен | Назначение |
|---|---|
| fontSize | базовый размер текста |
| fontFamily | основной шрифт |
| lineHeight | межстрочный интервал |
| fontWeightStrong | жирность для акцентов |
| Токен | Назначение |
|---|---|
| borderRadius | радиус скругления |
| sizeUnit | базовая единица размеров |
| padding | внутренние отступы |
| margin | внешние отступы |
| Токен | Назначение |
|---|---|
| boxShadow | стандартная тень |
| boxShadowSecondary | вторичная тень |
| boxShadowTertiary | минимальная тень |
Все параметры темы передаются через компонент ConfigProvider, который оборачивает приложение.
Пример базовой кастомной темы:
import { ConfigProvider } from 'antd';
function App() {
return (
<ConfigProvider
theme={{
token: {
colorPrimary: '#722ed1',
borderRadius: 8,
fontSize: 15
}
}}
>
<MyApplication />
</ConfigProvider>
);
}
Изменение одного токена автоматически обновляет внешний вид всех компонентов.
Например:
Ant Design использует алгоритмы для генерации производных цветов.
Встроенные алгоритмы:
| Алгоритм | Назначение |
|---|---|
| defaultAlgorithm | стандартная светлая тема |
| darkAlgorithm | тёмная тема |
| compactAlgorithm | компактный интерфейс |
import { ConfigProvider, theme } from 'antd';
const { darkAlgorithm } = theme;
<ConfigProvider
theme={{
algorithm: darkAlgorithm
}}
>
<App />
</ConfigProvider>
Алгоритм автоматически:
Алгоритмы можно объединять.
import { theme } from 'antd';
const { darkAlgorithm, compactAlgorithm } = theme;
<ConfigProvider
theme={{
algorithm: [darkAlgorithm, compactAlgorithm]
}}
>
<App />
</ConfigProvider>
Результат:
Это особенно полезно для админ-панелей и панелей управления.
Ant Design позволяет изменять токены для конкретных компонентов, не затрагивая остальную тему.
Пример:
<ConfigProvider
theme={{
components: {
Button: {
colorPrimary: '#ff4d4f',
borderRadius: 20
}
}
}}
>
<App />
</ConfigProvider>
Изменения затронут только Button.
Возможности:
<ConfigProvider
theme={{
components: {
Button: {
controlHeight: 48,
fontWeight: 600,
borderRadius: 12
}
}
}}
>
Изменения:
Ant Design предоставляет хук useToken, позволяющий получать текущие значения темы.
import { theme } from 'antd';
const { useToken } = theme;
function CustomComponent() {
const { token } = useToken();
return (
<div style={{
background: token.colorPrimary,
padding: token.padding
}}>
Content
</div>
);
}
Преимущества:
Система тем поддерживает runtime-переключение.
Пример:
const [isDark, setIsDark] = useState(false);
<ConfigProvider
theme={{
algorithm: isDark ? theme.darkAlgorithm : theme.defaultAlgorithm
}}
>
Переключение:
setIsDark(!isDark);
Интерфейс мгновенно обновляется без перезагрузки страницы.
Ant Design автоматически генерирует 10 оттенков основного цвета.
Например:
colorPrimary: #1677ff
Генерируются:
blue-1
blue-2
blue-3
...
blue-10
Использование:
Это обеспечивает консистентность дизайна.
Можно вручную задать дополнительные цвета.
<ConfigProvider
theme={{
token: {
colorPrimary: '#6a5acd',
colorSuccess: '#52c41a',
colorWarning: '#faad14',
colorError: '#ff4d4f'
}
}}
>
Эти значения используются:
Радиусы влияют на визуальный стиль интерфейса.
token: {
borderRadius: 2
}
token: {
borderRadius: 12
}
token: {
borderRadius: 24
}
Изменение автоматически применяется к:
Шрифты также управляются через токены.
token: {
fontFamily: 'Inter, sans-serif',
fontSize: 16
}
Возможные параметры:
| Токен | Назначение |
|---|---|
| fontFamily | основной шрифт |
| fontSize | базовый размер |
| lineHeight | высота строки |
| fontWeightStrong | жирный текст |
Это влияет на:
Фон интерфейса настраивается через токены:
token: {
colorBgBase: '#f5f7fa',
colorBgContainer: '#ffffff'
}
Типы фонов:
| Токен | Назначение |
|---|---|
| colorBgBase | общий фон страницы |
| colorBgContainer | фон компонентов |
| colorBgElevated | фон всплывающих элементов |
Используется в:
Ant Design поддерживает многоуровневую систему тем.
<ConfigProvider theme={globalTheme}>
<App />
</ConfigProvider>
<ConfigProvider theme={modalTheme}>
<ModalComponent />
</ConfigProvider>
Внутренняя тема переопределяет внешнюю.
Это удобно для:
Кастомная тема может служить основой корпоративной дизайн-системы.
Типичный процесс:
Пример структуры:
theme/
tokens.js
components.js
algorithms.js
index.js
export const tokens = {
colorPrimary: '#0057ff',
borderRadius: 10,
fontFamily: 'Inter'
};
export const components = {
Button: {
borderRadius: 20
},
Card: {
padding: 24
}
};
export const theme = {
token: tokens,
components
};
const customTheme = {
token: {
colorPrimary: '#7c3aed',
borderRadius: 10,
fontFamily: 'Inter, sans-serif',
fontSize: 15
},
components: {
Button: {
borderRadius: 30,
controlHeight: 44
},
Card: {
borderRadius: 16
},
Input: {
borderRadius: 12
}
}
};
Подключение:
<ConfigProvider theme={customTheme}>
<App />
</ConfigProvider>
1. Использование токенов вместо жестких значений
Неправильно:
background: #1677ff
Правильно:
background: token.colorPrimary
2. Единая палитра
Количество основных цветов желательно ограничивать:
3. Контрастность
Цвета должны сохранять читаемость:
4. Консистентность
Все компоненты должны использовать одни и те же токены.
5. Минимизация переопределений компонентов
Большинство изменений лучше делать на уровне глобальных токенов, чтобы:
Создание собственной темы в Ant Design позволяет:
Система дизайн-токенов и алгоритмов делает Ant Design одной из наиболее гибких UI-библиотек для построения сложных веб-интерфейсов.