Система тем в Ant Design основана на концепции дизайн-токенов — параметров, описывающих визуальные характеристики интерфейса: цвета, отступы, радиусы скруглений, типографику, размеры элементов и другие свойства. Темная тема представляет собой альтернативный набор этих токенов, адаптированный для интерфейсов с низкой яркостью фона.
Начиная с Ant Design 5, механизм тем реализован через алгоритмы темы (theme algorithms), которые автоматически преобразуют базовые токены в набор значений для компонентов интерфейса.
Основные уровни системы тем:
Seed tokens (базовые токены) Исходные параметры дизайна, например:
Map tokens Токены, получаемые на основе базовых значений через алгоритмы темы.
Component tokens Финальные параметры, применяемые конкретными компонентами интерфейса.
Темная тема создаётся при помощи специального алгоритма
darkAlgorithm.
Темная тема — это не простая инверсия цветов. В Ant Design используются несколько принципов:
Элементы интерфейса должны сохранять читаемость и различимость.
Пример распределения:
| Элемент | Цвет |
|---|---|
| Основной фон | почти черный |
| Карточки | немного светлее |
| Hover-состояния | ещё светлее |
Это создаёт слоистую иерархию интерфейса.
В темной теме используется несколько уровней фона:
Это позволяет визуально разделять блоки.
Светлые и насыщенные цвета в темной теме могут выглядеть слишком агрессивно. Поэтому Ant Design автоматически модифицирует палитру.
Например:
primaryColor → более мягкий оттенок
Алгоритм темной темы корректирует:
Темная тема подключается через компонент
ConfigProvider.
Пример базовой настройки:
import { ConfigProvider, theme } from 'antd';
const { darkAlgorithm } = theme;
function App() {
return (
<ConfigProvider
theme={{
algorithm: darkAlgorithm
}}
>
<MyApp />
</ConfigProvider>
);
}
В данном случае:
darkAlgorithmAnt Design позволяет комбинировать алгоритмы тем.
Например:
import { theme } from 'antd';
const { darkAlgorithm, compactAlgorithm } = theme;
Использование:
<ConfigProvider
theme={{
algorithm: [darkAlgorithm, compactAlgorithm]
}}
>
Результат:
Это удобно для админ-панелей и аналитических систем.
Даже при использовании darkAlgorithm можно
переопределять токены.
Пример:
<ConfigProvider
theme={{
algorithm: theme.darkAlgorithm,
token: {
colorPrimary: '#722ed1',
borderRadius: 6
}
}}
>
Изменённые параметры:
Алгоритм темной темы автоматически пересчитает производные цвета.
Наиболее важные токены:
colorBgBase
colorBgContainer
colorBgElevated
Назначение:
colorBgBase — основной фон страницыcolorBgContainer — фон карточекcolorBgElevated — фон всплывающих элементовcolorText
colorTextSecondary
colorTextTertiary
colorTextDisabled
Различные уровни контрастности позволяют выстраивать иерархию информации.
colorBorder
colorBorderSecondary
В темной теме границы часто более мягкие и менее контрастные.
colorPrimary
colorSuccess
colorWarning
colorError
colorInfo
Алгоритм темной темы корректирует их яркость.
Часто требуется переключение между светлой и темной темой.
Пример реализации:
import { ConfigProvider, theme } from 'antd';
import { useState } from 'react';
function App() {
const [dark, setDark] = useState(false);
return (
<ConfigProvider
theme={{
algorithm: dark
? theme.darkAlgorithm
: theme.defaultAlgorithm
}}
>
<MyApp toggleTheme={() => setDark(!dark)} />
</ConfigProvider>
);
}
Теперь приложение поддерживает динамическое переключение темы.
Пример интерфейсного элемента:
import { Switch } from 'antd';
<Switch
checked={dark}
onCha nge={(checked) => setDark(checked)}
checkedChildren="Dark"
unCheckedChildren="Light"
/>
Такой переключатель часто размещается:
Ant Design v5 использует CSS variables, что значительно ускоряет переключение темы.
При смене темы:
Преимущества:
Если используются собственные компоненты, желательно также опираться на токены Ant Design.
Пример:
import { theme } from 'antd';
const { useToken } = theme;
function CustomCard() {
const { token } = useToken();
return (
<div
style={{
background: token.colorBgContainer,
color: token.colorText,
padding: 16,
borderRadius: token.borderRadius
}}
>
Content
</div>
);
}
Преимущества:
Компонент Layout часто используется в админ-панелях.
Для темной темы обычно используется:
SiderПример:
import { Layout } from 'antd';
const { Header, Sider, Content } = Layout;
<Layout>
<Sider theme="dark">
Menu
</Sider>
<Layout>
<Header style={{ background: '#141414' }}>
Header
</Header>
<Content>
Content
</Content>
</Layout>
</Layout>
Компонент Menu имеет собственное свойство темы.
theme="dark"
Пример:
import { Menu } from 'antd';
<Menu
theme="dark"
mode="inline"
items={items}
/>
Особенности:
При кастомизации рекомендуется избегать:
Ant Design использует более мягкие оттенки:
#141414
#1f1f1f
#262626
Это снижает нагрузку на глаза.
Если используются библиотеки визуализации (например, Chart.js или ECharts), необходимо синхронизировать их цвета с токенами Ant Design.
Пример:
const { token } = theme.useToken();
const chartOptions = {
backgroundColor: token.colorBgContainer,
textStyle: {
color: token.colorText
}
};
Таким образом:
Ant Design оптимизирует работу тем за счёт:
В результате:
Плохо:
color: #000;
background: #fff;
Такие стили ломают темную тему.
Лучше использовать токены.
Неправильно:
style={{ background: '#fff' }}
Правильно:
style={{ background: token.colorBgContainer }}
В темной теме особенно важно проверять:
В крупных проектах рекомендуется:
1. Центральный конфиг темы
theme/
tokens.js
algorithms.js
2. Обёртка ThemeProvider
<ThemeProvider>
<App />
</ThemeProvider>
3. Использование useToken во всех компонентах
Это обеспечивает:
Ant Design позволяет создавать собственные темы.
Пример:
const customDarkTheme = {
algorithm: theme.darkAlgorithm,
token: {
colorPrimary: '#00b96b'
}
};
Использование:
<ConfigProvider theme={customDarkTheme}>
Таким образом можно реализовать: