Drawer
Панель, которая выдвигается от края экрана.
- Браузеры
- Chrome 123+Firefox 121+Safari 17.5+
- Уровень
- 0
- Сжатый размер
- 4.01 kB
- Лимит принудительной компоновки
- 0 ms
- Лимит axe
- 0
- Совместим с SSR
- Да
- На основе
- elements/dialog
- Публичный контракт
- Тестовый стенд
Песочница
API
DrawerPanel
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
size | "sm" | "md" | "lg" | "full" | "md" | Ширина на компьютере: 24rem, 32rem, 40rem или доступная ширина. На мобильных устройствах любой размер превращается в вертикальную нижнюю панель. |
dismiss | "any" | "closerequest" | "none" | "any" | Нативные правила закрытия. Any разрешает фон, Escape и свайп вниз на мобильных устройствах; none требует явного элемента управления закрытием. |
backdrop | "opaque" | "transparent" | "opaque" | Внешний вид фона; не меняет семантику модального окна. |
footer | ReactNode | — | Действия после прокручиваемого содержимого. |
id* | string | — | Уникальный идентификатор диалога, на который нацелены триггер и кнопка закрытия, чтобы выдвижная панель открывалась и закрывалась до гидратации. |
trigger* | ReactNode | — | Содержимое кнопки открытия выдвижной панели. |
title* | ReactNode | — | Заголовок внутри выдвижной панели, используемый как её доступное название. |
description | ReactNode | — | Поясняющий текст под заголовком, на который ссылается aria-describedby. |
children | ReactNode | — | Основное содержимое между описанием и кнопкой закрытия. |
side | "top" | "right" | "bottom" | "left" | "bottom" | Край, от которого выдвигается панель. |
closeLabel | string | "Close" | Доступная подпись круглой иконки закрытия. |
className | string | — | Класс элемента диалога. |
Drawer.Root (client)
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
open | boolean | — | Управляемое состояние открытия. |
defaultOpen | boolean | — | Неуправляемое начальное состояние открытия. |
onOpenChange | DialogChangeHandler | — | Вызывается со следующим состоянием открытия и подробностями о причине изменения. |
side | "top" | "right" | "bottom" | "left" | "bottom" | Край, от которого выдвигается панель; также определяет ось перетаскивания. |
modal | boolean | true | Открывает через showModal(), делая остальную страницу неактивной за фоном. |
dismissible | boolean | true | Позволяет закрыть выдвижную панель перетаскиванием за последнюю точку фиксации. |
snapPoints | readonly number[] | — | Доли размера выдвижной панели, на которых она останавливается при перетаскивании. |
activeSnapPoint | number | — | Управляемая точка фиксации из значений snapPoints. |
defaultActiveSnapPoint | number | — | Неуправляемая начальная точка фиксации. |
onSnapChange | (snap: number) => void | — | Вызывается с точкой фиксации, на которой остановилась выдвижная панель. |
children | ReactNode | — | Части Trigger, Content и внутренние части. |
Drawer.Trigger (client)
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
className | string | — | Класс кнопки триггера. |
onClick | (event: MouseEvent<HTMLButtonElement>) => void | — | Вызывается при щелчке по триггеру до открытия выдвижной панели. |
ref | Ref<HTMLButtonElement> | — | Ref кнопки триггера, на которую возвращается фокус при закрытии выдвижной панели. |
children | ReactNode | — | Содержимое кнопки триггера. |
Drawer.Content (client)
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
className | string | — | Класс элемента диалога. |
style | CSSProperties | — | Встроенный стиль, объединяемый с трансформацией перетаскивания выдвижной панели. |
onCancel | ReactEventHandler<HTMLDialogElement> | — | Вызывается при нативном событии cancel диалога, например при нажатии Escape. |
onClose | ReactEventHandler<HTMLDialogElement> | — | Вызывается при нативном событии close диалога. |
ref | Ref<HTMLDialogElement> | — | Ref элемента диалога. |
children | ReactNode | — | Содержимое выдвижной панели. |
Drawer.Title (client)
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
className | string | — | Класс элемента заголовка. |
children | ReactNode | — | Содержимое заголовка, которое становится доступным названием выдвижной панели. |
Drawer.Description (client)
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
className | string | — | Класс элемента описания. |
children | ReactNode | — | Содержимое описания, на которое ссылается aria-describedby. |
Drawer.Close (client)
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
className | string | — | Класс кнопки закрытия. |
onClick | (event: MouseEvent<HTMLButtonElement>) => void | — | Вызывается при щелчке по кнопке закрытия до закрытия выдвижной панели. |
children | ReactNode | — | Содержимое кнопки закрытия. |
Drawer.Handle (client)
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
className | string | — | Класс ручки перетаскивания. |
onPointerDown | (event: PointerEvent<HTMLDivElement>) => void | — | Вызывается при начале перетаскивания за ручку. |
onPointerMove | (event: PointerEvent<HTMLDivElement>) => void | — | Вызывается при перемещении указателя во время перетаскивания. |
onPointerUp | (event: PointerEvent<HTMLDivElement>) => void | — | Вызывается при завершении перетаскивания и остановке выдвижной панели на точке фиксации. |
onPointerCancel | (event: PointerEvent<HTMLDivElement>) => void | — | Вызывается, когда браузер отменяет перетаскивание. |
Клавиатура
| Клавиша | Действие |
|---|---|
| Enter / Space | Открыть диалог через его триггер или активировать Close |
| Escape | Запросить закрытие, если dismiss не равен none |
| Tab / Shift+Tab | Перемещаться внутри модального диалога |
Доступность
DrawerPanel использует диалог с целевыми идентификаторами, поэтому открытие, закрытие, удержание и возврат фокуса работают до гидратации; dismiss управляет закрытием по фону и Escape. Ширина панелей задаётся как sm, md, lg или full; на телефонах они превращаются в нижние панели. Свайп начинается с ручки или шапки, поэтому содержимое по-прежнему прокручивается. Клиентский API добавляет управляемое состояние и точки фиксации.
Привязка стилей
data-uiify-drawerdata-partdata-sidedata-sizedata-backdropdata-statedata-dragging--uiify-drawer-inline-size--uiify-drawer-transform--uiify-sheet-offset