Popover
Компонент, предназначенный для отображения части пользовательского интерфейса во всплывающем окне.
Функциональность
Компонент позволяет отобразить всплывающее окно, позиционированное рядом с якорным элементом.
В качестве якорного используется элемент, переданный в свойство children
.
Механизм вызова всплывающего окна
Свойство trigger
определяет способ взаимодействия, при котором всплывающее окно будет отображаться или скрываться.
"click"
Показ/скрытие происходит при нажатии на якорный элемент;
"hover"
Показ происходит при наведении мыши на якорных элемент, скрытие - при отведении.
Используйте как единственный механизм активации только для декоративных элементов в сочетании с aria-hidden
и disableFocusTrap
(см. секцию Доступность (a11y))
"focus"
Показ происходит при фокусе на якорном элементе, скрытие - при потере фокуса;
"manual"
Показ/скрытие контролируется только через свойство shown
.
Обработчик, переданный в свойство onShownChange
, будет вызываться при нажатии за пределами якорного и всплывающего элементов,
а также по кнопке ESC
.
Хук usePopover
Вы можете использовать хук usePopover
, который позволяет устанавливать якорный элемент для Popover
,
не прокидывая его в качестве children
.
Доступность (a11y)
Текстовые метки
Старайтесь сопровождать элемент текстовым описанием для корректной работы скринридеров. Для этого необходимо вручную передавать некоторые параметры.
- у всплывающего элемента обязательно должен быть указан
role
↗. Зачастую это либо"tooltip"
↗, либо"dialog"
↗; - у якорного элемента, в зависимости от
role
всплывающего элемента, должны быть заданы атрибутыaria-*
. Какие именно можно ознакомиться в документации конкретногоrole
.
trigger="hover"
Использования trigger="hover"
, как единственного механизма активации, приводит к тому, что события наведения не генерируются при клавиатурной навигации или скринридером.
Если нужно, чтобы контент из Popover
был доступен, комбинируйте hover
с триггером focus
.
// ❌ WCAG
<Popover trigger="hover">{children}</Popover>
// ✅ WCAG
<Popover trigger={['hover', 'focus']}>{children}</Popover>
Свойства и методы
Свойство | Описание |
---|---|
arrow | boolean Отображать ли стрелку, указывающую на якорный элемент. По умолчанию: - |
arrowHeight | number Высота стрелки. Складывается с По умолчанию: - |
ArrowIcon | ComponentType<SVGAttributes<SVGSVGElement>> Пользовательская SVG иконка. Требования:
По умолчанию: - |
arrowPadding | number Безопасная зона вокруг стрелки, чтобы та не выходила за края контента. По умолчанию: - |
arrowProps | PopoverArrowProps Позволяет набросить на стрелку пользовательские атрибуты. По умолчанию: - |
autoFocus | boolean | "root" Управление автоматическим фокусом при открытии всплывающего элемента. По умолчанию: - |
children | ReactElement<unknown, string | JSXElementConstructor<any>> Целевой элемент. Всплывающее окно появится возле него. По умолчанию: - |
closeAfterClick | boolean При По умолчанию: - |
content | ReactNode | FloatingContentRenderProp Содержимое всплывающего окна. При передаче контента в виде render prop ↗,
в аргументе функции можно получить метод По умолчанию: - |
customMiddlewares | { name: string; options?: any; fn: (state: { placement: Placement; platform: Platform; strategy: Strategy; x: number; y: number; initialPlacement: Placement; middlewareData: MiddlewareData; rects: ElementRects; elements: Elements; }) => Promisable<...>; }[] Массив кастомных модификаторов для Popper (необходимо мемоизировать). По умолчанию: - |
defaultShown | boolean Начальное состояние всплывающего элемента. По умолчанию: - |
disableCloseOnClickOutside | boolean Отключает закрытие нажатием на область вне целевого и всплывающего элемента. По умолчанию: - |
disableCloseOnEscKey | boolean Отключает закрытие нажатием на кнопку ESC. По умолчанию: - |
disabled | boolean Блокирует изменение состояния. По умолчанию: - |
disableFlipMiddleware | boolean Указанное значение По умолчанию: - |
disableFocusTrap | boolean Позволяет отключить захват фокуса. По умолчанию: - |
disableInteractive | boolean Отключает взаимодействие со всплывающим элементом. По умолчанию: - |
disableShiftMiddleware | boolean Позволяет отключить смещение по главной оси, которое не даёт всплывающему элементу выходить за границы видимой области. По умолчанию: - |
getRootRef | Ref<HTMLDivElement> По умолчанию: - |
hideWhenReferenceHidden | boolean Принудительно скрывает компонент если целевой элемент вышел за область видимости. По умолчанию: - |
hoverDelay | number | [number, number] Количество миллисекунд, после которых произойдёт показ/скрытие всплывающего элемента при наведении. По умолчанию: - |
keepMounted | boolean Используется для того, чтобы не удалять всплывающий элемент из DOM дерева при скрытии. По умолчанию: - |
noStyling | boolean Отключает у всплывающего элемента стилизацию по умолчанию. У
У
Используется в случае, если необходимо стилизовать по своему. Для По умолчанию: - |
offsetByCrossAxis | number Отступ по вспомогательной оси. По умолчанию: - |
offsetByMainAxis | number Отступ по главной оси. По умолчанию: - |
onPlacementChange | OnPlacementChange В зависимости от области видимости, позиция может смениться на более оптимальную, чтобы всплывающий элемент вместился в эту область видимости. По умолчанию: - |
onReferenceHiddenChange | ((hidden: boolean) => void) Событие скрытия / раскрытия компонента при использовании свойства По умолчанию: - |
onShownChange | OnShownChange Вызывается при каждом изменении видимости всплывающего элемента. По умолчанию: - |
onShownChanged | OnShownChange Вызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации. По умолчанию: - |
placement | PlacementWithAuto По умолчанию компонент выберет наилучшее расположение сам, но приоритетное можно задать с помощью этого свойства. По умолчанию: - |
restoreFocus | RestoreFocusType Нужно ли после закрытия всплывающего элемента возвращать фокус на предыдущий активный элемент. По умолчанию: - |
sameWidth | boolean Выставлять ширину равной target элементу. По умолчанию: - |
shown | boolean Если передан, то всплывающий элемент будет показано/скрыто в зависимости от значения свойства. По умолчанию: - |
strategy | Strategy Стратегия позиционирования всплывающего элемента.
По умолчанию: - |
trigger | TriggerType Механика вызова всплывающего элемента.
Избегайте использования По умолчанию: - |
usePortal | boolean | HTMLElement | RefObject<HTMLElement> По умолчанию используется document.body. По умолчанию: - |
zIndex | string | number Перебивает zIndex заданный по умолчанию. По умолчанию: - |