Библиотека Ant Design использует комбинацию JavaScript-компонентов, системных CSS-классов и переменных темы. Стилизация построена таким образом, чтобы разработчик мог:
CSS-система Ant Design является частью общей дизайн-системы, где визуальные параметры стандартизированы: цвета, размеры, отступы, типографика и анимации. Это обеспечивает единообразие интерфейсов и упрощает масштабирование проекта.
Ant Design использует соглашение, похожее на BEM-подход, однако с собственными особенностями.
Основной формат:
.ant-[component]
Примеры:
.ant-btn
.ant-input
.ant-card
.ant-modal
.ant-table
Если компонент содержит внутренние элементы, применяется вложенная структура:
.ant-[component]-[element]
Примеры:
.ant-btn-icon
.ant-card-head
.ant-card-body
.ant-modal-header
.ant-modal-footer
Состояния или модификаторы добавляются в виде дополнительных классов:
.ant-[component]-[modifier]
Примеры:
.ant-btn-primary
.ant-btn-danger
.ant-btn-loading
.ant-input-disabled
.ant-modal-open
Подобная структура облегчает:
Кнопка — один из наиболее часто используемых компонентов.
Основной класс:
.ant-btn
Модификаторы:
.ant-btn-primary
.ant-btn-default
.ant-btn-dashed
.ant-btn-text
.ant-btn-link
.ant-btn-dangerous
Пример HTML:
<button class="ant-btn ant-btn-primary">
Сохранить
</button>
Классы состояний:
.ant-btn-loading
.ant-btn-disabled
.ant-btn-background-ghost
.ant-btn-block
Базовый класс:
.ant-input
Дополнительные элементы:
.ant-input-affix-wrapper
.ant-input-group
.ant-input-group-addon
.ant-input-prefix
.ant-input-suffix
Пример структуры:
<div class="ant-input-affix-wrapper">
<input class="ant-input" />
</div>
Состояния:
.ant-input-disabled
.ant-input-status-error
.ant-input-status-warning
Карточки используются для контейнеров интерфейса.
Основные классы:
.ant-card
.ant-card-head
.ant-card-body
.ant-card-actions
Структура:
<div class="ant-card">
<div class="ant-card-head">
Заголовок
</div>
<div class="ant-card-body">
Контент
</div>
</div>
Таблицы имеют сложную структуру и большое количество классов.
Основные элементы:
.ant-table
.ant-table-container
.ant-table-content
.ant-table-thead
.ant-table-tbody
.ant-table-row
.ant-table-cell
Пример:
<table class="ant-table">
<thead class="ant-table-thead">
</thead>
<tbody class="ant-table-tbody">
</tbody>
</table>
Дополнительные состояния:
.ant-table-row-selected
.ant-table-row-hover
.ant-table-cell-fix-left
.ant-table-cell-fix-right
Ant Design также использует утилитарные классы.
.ant-hidden
или
.ant-hidden-xs
.ant-hidden-sm
.ant-hidden-md
Используются для адаптивного поведения.
.ant-motion-collapse
.ant-motion-fade
.ant-motion-slide
Эти классы управляют переходами и анимациями компонентов.
Одним из распространённых способов кастомизации является переопределение стандартных классов.
Пример изменения цвета кнопки:
.ant-btn-primary {
background: #5a54ff;
border-color: #5a54ff;
}
Изменение радиуса:
.ant-btn {
border-radius: 10px;
}
Изменение отступов:
.ant-card-body {
padding: 32px;
}
Важно учитывать специфичность CSS. Иногда требуется повышение приоритета:
.ant-btn.ant-btn-primary {
background: #4b40ff;
}
Начиная с современных версий библиотеки, Ant Design активно использует CSS-переменные (Custom Properties).
Они позволяют изменять тему интерфейса без полной переработки стилей.
Основной формат:
--ant-[token]
Цветовая система — основа визуального оформления интерфейса.
Основные переменные:
--ant-primary-color
--ant-success-color
--ant-warning-color
--ant-error-color
--ant-info-color
Пример использования:
:root {
--ant-primary-color: #4f46e5;
}
После изменения переменной все компоненты, использующие основной цвет, автоматически обновятся.
Ant Design стандартизирует размеры шрифтов.
Основные переменные:
--ant-font-size
--ant-font-size-sm
--ant-font-size-lg
--ant-line-height
Пример:
:root {
--ant-font-size: 15px;
}
Это влияет на:
Отступы контролируют вертикальный и горизонтальный ритм интерфейса.
Основные токены:
--ant-padding
--ant-padding-sm
--ant-padding-lg
--ant-margin
--ant-margin-sm
--ant-margin-lg
Пример:
:root {
--ant-padding: 16px;
}
Система радиусов определяет форму элементов интерфейса.
Основные переменные:
--ant-border-radius
--ant-border-radius-sm
--ant-border-radius-lg
Пример:
:root {
--ant-border-radius: 8px;
}
Это влияет на:
Тени используются для создания иерархии интерфейса.
Основные токены:
--ant-box-shadow-base
--ant-box-shadow-secondary
Пример:
:root {
--ant-box-shadow-base: 0 4px 16px rgba(0,0,0,0.08);
}
Некоторые компоненты используют собственные переменные.
Пример для кнопок:
--ant-btn-height
--ant-btn-padding-horizontal
Для форм:
--ant-input-height
--ant-input-padding-horizontal
Для таблиц:
--ant-table-padding-vertical
--ant-table-padding-horizontal
CSS-переменные можно применять напрямую.
Пример:
.custom-button {
background: var(--ant-primary-color);
border-radius: var(--ant-border-radius);
}
Это обеспечивает совместимость с темой Ant Design.
CSS-переменные позволяют изменять тему во время работы приложения.
Пример:
document.documentElement.style.setProperty(
"--ant-primary-color",
"#7c3aed"
);
После выполнения кода все компоненты автоматически изменят основной цвет.
Это используется для:
Ant Design поддерживает тёмную тему через набор переменных.
Пример:
[data-theme="dark"] {
--ant-primary-color: #8b5cf6;
--ant-background-color: #141414;
--ant-text-color: #ffffff;
}
Переключение темы:
document.body.setAttribute("data-theme", "dark");
Иногда переменные объявляются внутри конкретного компонента.
Пример:
.ant-card {
--card-padding: 24px;
}
Использование:
.ant-card-body {
padding: var(--card-padding);
}
Это позволяет гибко изменять стили отдельных компонентов.
Чаще всего кастомизация выполняется в глобальном файле стилей.
Пример:
:root {
--ant-primary-color: #6366f1;
--ant-border-radius: 10px;
--ant-font-size: 15px;
}
После этого вся библиотека автоматически адаптируется под новые значения.
Наиболее гибкий подход — совмещать оба механизма.
Пример:
.ant-btn-primary {
background: var(--ant-primary-color);
border-radius: var(--ant-border-radius);
}
Такой подход позволяет:
Лучше использовать существующие классы библиотеки:
.ant-btn
.ant-card
.ant-input
Это обеспечивает предсказуемость интерфейса.
Глубокие переопределения могут привести к конфликтам при обновлении библиотеки.
Предпочтительнее:
Часто используется подход:
.app-button {
border-radius: var(--ant-border-radius);
}
<Button className="app-button">
Это снижает зависимость от внутренней структуры Ant Design.
В больших приложениях стили обычно разделяются на несколько уровней.
theme.css
antd-overrides.css
components.css
Такая архитектура облегчает поддержку проекта и обновление библиотеки.