В Ant Design тема настраивается через ConfigProvider
и систему токенов. Для глобальной настройки необходимо импортировать
ConfigProvider из пакета antd и обернуть им
корневой компонент приложения. Это позволяет задать глобальные
параметры, такие как цвета, тип шрифтов, размеры компонентов и другие
токены, которые будут распространяться на все элементы интерфейса.
Пример базовой настройки:
import React from 'react';
import ReactDOM from 'react-dom';
import { ConfigProvider, Button } from 'antd';
const App = () => (
<ConfigProvider
theme={{
token: {
colorPrimary: '#1890ff', // основной цвет
borderRadius: 6, // радиус скругления кнопок и карточек
fontSize: 14 // базовый размер шрифта
},
}}
>
<Button type="primary">Кнопка</Button>
</ConfigProvider>
);
ReactDOM.render(<App />, document.getElementById('root'));
Здесь token — объект, который содержит ключевые переменные темы. Любое изменение этих значений будет применяться ко всем компонентам библиотеки.
Ant Design использует большое количество токенов, которые делятся на группы:
colorPrimary,
colorSuccess, colorWarning,
colorError, colorInfo.borderRadius,
controlHeight, fontSize.fontFamily,
lineHeight, headingColor,
textColor.colorPrimaryHover, colorPrimaryActive,
colorPrimaryDisabled.Пример расширенной настройки цвета:
theme={{
token: {
colorPrimary: '#722ed1',
colorPrimaryHover: '#9254de',
colorPrimaryActive: '#531dab',
colorText: '#333333',
colorBorder: '#d9d9d9',
}
}}
Использование токенов позволяет не изменять стили вручную для каждого компонента, а управлять всей системой дизайна централизованно.
Ant Design поддерживает переключение между светлой и тёмной темой
через ключ algorithm. Для глобального применения тем
используется пакет antd/dist/theme:
import { ConfigProvider, theme } from 'antd';
<ConfigProvider theme={{ algorithm: theme.darkAlgorithm }}>
<App />
</ConfigProvider>
Для комбинирования пользовательских токенов с тёмной или светлой
темой можно передавать объект token вместе с
algorithm:
<ConfigProvider
theme={{
algorithm: theme.darkAlgorithm,
token: { colorPrimary: '#13c2c2', borderRadius: 8 }
}}
>
<App />
</ConfigProvider>
Это позволяет менять цвета компонентов, сохраняя всю структуру тёмной темы.
Для динамического изменения темы на лету используется
ConfigProvider с состоянием React:
import React, { useState } from 'react';
import { ConfigProvider, Button, theme } from 'antd';
const DynamicThemeApp = () => {
const [darkMode, setDarkMode] = useState(false);
return (
<ConfigProvider theme={{
algorithm: darkMode ? theme.darkAlgorithm : theme.defaultAlgorithm,
token: { colorPrimary: darkMode ? '#722ed1' : '#1890ff' }
}}>
<Button type="primary" onCl ick={() => setDarkMode(!darkMode)}>
Переключить тему
</Button>
</ConfigProvider>
);
};
Таким образом, можно реализовать переключатель светлой и тёмной темы без перезагрузки страницы.
Помимо стандартных токенов, Ant Design позволяет создавать кастомные алгоритмы генерации цветов и расширять тему:
import { theme } from 'antd';
const customAlgorithm = (token) => ({
...token,
colorPrimary: '#fa541c',
colorPrimaryHover: '#ff7a45',
borderRadius: 10,
});
<ConfigProvider theme={{ algorithm: customAlgorithm }}>
<App />
</ConfigProvider>
Это особенно полезно для компаний с уникальным корпоративным стилем, где требуется точная настройка оттенков и размеров всех элементов.
Токены, заданные в ConfigProvider, наследуются всеми
дочерними компонентами. При необходимости локально переопределить тему
для отдельного блока используется вложенный
ConfigProvider:
<ConfigProvider theme={{ token: { colorPrimary: '#1890ff' } }}>
<Button>Основная кнопка</Button>
<ConfigProvider theme={{ token: { colorPrimary: '#f5222d' } }}>
<Button>Красная кнопка</Button>
</ConfigProvider>
</ConfigProvider>
Вложенный ConfigProvider изменяет тему только для своих
дочерних компонентов, не затрагивая остальные элементы приложения.
ConfigProvider.Эта структура обеспечивает гибкость, поддержку корпоративного дизайна и единообразие интерфейса на уровне всего приложения.