В библиотеке Ant Design (AntD) управление z-index играет ключевую роль в организации слоёв компонентов и модальных элементов. Z-index определяет порядок наложения элементов на странице, что особенно важно при работе с модальными окнами, всплывающими подсказками, дропдаунами и тасками типа уведомлений (notification, message, tooltip).
В Ant Design структура слоёв реализована через
централизованную систему zIndex в Design
Tokens, что позволяет управлять наложением компонентов
последовательно и предсказуемо.
Контекст наложения Z-index работает в контексте
CSS stacking context. Если родительский элемент имеет
позиционирование (position: relative/absolute/fixed) и
z-index, все дочерние элементы ограничены этим контекстом. В AntD многие
компоненты создают собственные контексты:
Modal создаёт отдельный слой через
rc-dialog.Dropdown использует портал (rc-trigger),
чтобы избежать проблем с вложенными контекстами.Z-index в Design Tokens Ant Design использует переменные токенов для всех стандартных слоёв:
const zIndexToken = {
modal: 1000,
dropdown: 1050,
tooltip: 1060,
notification: 1100,
message: 1200
};
Эти значения гарантируют, что сообщения будут поверх модальных окон, а тултипы поверх дропдаунов.
Компонент Modal автоматически использует высокий z-index для поверхностного отображения:
import { Modal, Button } from 'antd';
import { useState } from 'react';
function App() {
const [open, setOpen] = useState(false);
return (
<>
<Button onCl ick={() => setOpen(true)}>Открыть модал</Button>
<Modal
title="Пример модала"
open={open}
onCan cel={() => setOpen(false)}
zIndex={1500} // Перезапись стандартного z-index
>
Содержимое модала
</Modal>
</>
);
}
Особенности:
zIndex можно задавать напрямую через проп
zIndex.zIndex.Dropdown и другие всплывающие элементы используют
getPopupContainer для контроля контекста:
import { Dropdown, Menu, Button } from 'antd';
const menu = (
<Menu>
<Menu.Item>Пункт 1</Menu.Item>
<Menu.Item>Пункт 2</Menu.Item>
</Menu>
);
<Dropdown overlay={menu} getPopupContainer={trigger => trigger.parentNode}>
<Button>Меню</Button>
</Dropdown>
Важное:
getPopupContainer)
позволяет избежать этого.Компонент Tooltip всегда рендерится через портал, что
обеспечивает корректное наложение над другими элементами. Можно
настроить zIndex через ConfigProvider или
локально:
<Tooltip title="Подсказка" overlayStyle={{ zIndex: 2000 }}>
<Button>Наведи на меня</Button>
</Tooltip>
Ant Design предоставляет возможность глобально задавать z-index для всех компонентов:
import { ConfigProvider } from 'antd';
<ConfigProvider
theme={{
token: {
zIndexPopup: 1050,
zIndexModal: 1000,
},
}}
>
<App />
</ConfigProvider>
zIndexPopup — для Dropdown, Tooltip, Popover.zIndexModal — для Modal.zIndexMessage,
zIndexNotification через кастомные токены.При работе с несколькими наложенными компонентами важно учитывать логическую иерархию:
ConfigProvider для глобальных настроек
z-index, чтобы обеспечить единый стандарт для всего приложения.getPopupContainer, чтобы исключить конфликт z-index с
другими блоками.notification,
message) использовать стандартные токены AntD и при
необходимости увеличивать zIndex.Это позволяет создавать сложные интерфейсы с модальными окнами, всплывающими подсказками и уведомлениями без конфликтов визуального наложения.