Библиотека Ant Design использует препроцессор Less в качестве основной технологии для стилизации компонентов. Все стили интерфейса — цвета, отступы, размеры элементов, тени, типографика — определяются через переменные Less и компилируются в обычный CSS во время сборки проекта.
Использование Less позволяет:
Система переменных Ant Design является фактически дизайн-токенами, которые определяют внешний вид всех компонентов.
Less — это CSS-препроцессор, расширяющий стандартный CSS дополнительными возможностями.
Ключевые функции:
1. Переменные
@primary-color: #1677ff;
@font-size-base: 14px;
Переменные используются для хранения значений, применяемых во многих местах.
2. Вложенность
.button {
color: white;
&:hover {
opacity: 0.8;
}
}
Позволяет структурировать стили подобно иерархии HTML.
3. Миксины
.border-radius(@radius) {
border-radius: @radius;
}
.card {
.border-radius(8px);
}
Миксины позволяют повторно использовать наборы правил.
4. Математические операции
@padding: 16px;
.container {
padding: @padding * 2;
}
5. Импорт файлов
@import "variables.less";
@import "mixins.less";
Исходные стили библиотеки организованы следующим образом:
antd/
├─ es/
├─ lib/
└─ style/
├─ index.less
├─ themes/
│ ├─ default.less
│ └─ compact.less
└─ core/
Основные элементы:
index.less
Главный файл стилей, который импортирует остальные.
themes/default.less
Файл с базовыми переменными темы.
компонентные стили
Каждый компонент имеет собственный файл Less:
button/style/index.less
table/style/index.less
form/style/index.less
Эти файлы используют глобальные переменные темы.
Большая часть кастомизации Ant Design осуществляется через Less-переменные.
@primary-color: #1677ff;
@success-color: #52c41a;
@warning-color: #faad14;
@error-color: #ff4d4f;
@info-color: #1677ff;
Эти переменные определяют цветовую палитру интерфейса.
@font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;
@font-size-base: 14px;
@heading-color: rgba(0, 0, 0, 0.85);
@text-color: rgba(0, 0, 0, 0.85);
@padding-lg: 24px;
@padding-md: 16px;
@padding-sm: 12px;
@padding-xs: 8px;
@border-radius-base: 6px;
@border-radius-sm: 2px;
@box-shadow-base: 0 2px 8px rgba(0,0,0,0.15);
Для корректной работы Ant Design необходимо настроить сборку, поддерживающую компиляцию Less.
Наиболее распространённые варианты:
Для Webpack требуется установить загрузчики.
npm install less less-loader --save-dev
module.exports = {
module: {
rules: [
{
test: /\.less$/,
use: [
"style-loader",
"css-loader",
{
loader: "less-loader",
options: {
lessOptions: {
javascriptEnabled: true
}
}
}
]
}
]
}
};
Параметр javascriptEnabled: true обязателен для корректной работы Ant Design.
Основная цель использования Less в Ant Design — кастомизация темы.
{
loader: "less-loader",
options: {
lessOptions: {
modifyVars: {
"primary-color": "#722ed1"
},
javascriptEnabled: true
}
}
}
После компиляции весь интерфейс будет использовать новый основной цвет.
modifyVars: {
"primary-color": "#1DA57A",
"border-radius-base": "4px",
"font-size-base": "15px"
}
Для удобства переменные часто выносятся в отдельный файл.
@primary-color: #1da57a;
@border-radius-base: 4px;
@font-size-base: 15px;
modifyVars: {
hack: `true; @import "src/styles/variables.less";`
}
Это позволяет централизованно управлять темой.
Современные проекты часто используют Vite.
npm install less
import { defineConfig } from "vite";
export default defineConfig({
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true,
modifyVars: {
"primary-color": "#1890ff"
}
}
}
}
});
Create React App не поддерживает Less из коробки. Для этого используется craco или react-app-rewired.
npm install @craco/craco
module.exports = {
style: {
less: {
loaderOptions: {
lessOptions: {
modifyVars: {
"@primary-color": "#1890ff"
},
javascriptEnabled: true
}
}
}
}
};
Less может использоваться не только для переопределения темы, но и для создания собственных глобальных стилей.
@import "~antd/dist/antd.less";
.app-container {
padding: 24px;
}
.page-title {
font-size: 24px;
font-weight: 600;
}
В некоторых приложениях требуется переключение темы во время работы приложения.
Ant Design допускает динамическую замену переменных.
Для этого используется библиотека:
less.js
или специализированные решения:
antd-theme-generator
Пример динамического изменения цвета:
window.less.modifyVars({
"@primary-color": "#ff4d4f"
});
После выполнения произойдёт перекомпиляция стилей.
Ant Design автоматически генерирует оттенки основного цвета.
Если задать:
@primary-color: #1890ff;
библиотека создаёт палитру:
@primary-1
@primary-2
@primary-3
...
@primary-10
Это используется в:
Иногда необходимо изменить стили конкретного компонента.
.ant-btn {
border-radius: 8px;
}
.ant-table {
font-size: 13px;
}
Less может использоваться внутри CSS-модулей.
Пример:
Button.module.less
.button {
background: red;
}
Импорт:
import styles from "./Button.module.less";
<button className={styles.button}>Click</button>
Это предотвращает конфликты глобальных стилей.
Есть два основных способа подключения стилей.
import "antd/dist/antd.css";
Недостаток — невозможность кастомизации.
import "antd/dist/antd.less";
Позволяет изменять переменные.
При использовании babel-plugin-import можно подключать стили только используемых компонентов.
[
"import",
{
libraryName: "antd",
libraryDirectory: "es",
style: true
}
]
Опция style: true означает использование Less.
Компиляция Less может замедлять сборку больших проектов.
Для оптимизации применяются:
В новых версиях Ant Design часть системы стилизации переходит к Design Tokens и CSS-in-JS.
Тем не менее Less остаётся важным для:
Inline JavaScript is not enabled
Решение:
javascriptEnabled: true
Cannot find module antd/dist/antd.less
Причины:
Подключение одновременно:
antd.css
antd.less
может привести к дублированию стилей.
src/
├─ styles/
│ ├─ variables.less
│ ├─ global.less
│ └─ mixins.less
│
├─ components/
│ └─ Button/
│ ├─ Button.jsx
│ └─ Button.module.less
│
└─ main.jsx
Наиболее устойчивый подход:
Пример:
@primary-color: #4c6ef5;
@border-radius-base: 6px;
@font-size-base: 15px;
Такой подход позволяет поддерживать единый визуальный стиль интерфейса, легко менять тему и масштабировать дизайн-систему приложения.