Skip to content

SDropdown

Обзор

Выпадающая панель (floating overlay) с позиционированием относительно якоря.

Usage

Открытие по клику на trigger-слот.

API

Краткий справочник props, slots и events — см. API Reference.

Guide

SDropdown позиционирует floating-панель относительно якоря из слота #trigger или внешнего reference.

  • Управление открытием — через v-model (boolean).
  • Слот #trigger получает toggle, open, triggerProps для a11y-связки с панелью.
  • Trigger может быть любым интерактивным элементом — кнопка, иконка, chip; компонент не привязан к SButton.
  • Для hover-режима включите showOnHover — панель открывается по наведению на trigger и content.
  • Общие паттерны overlay — см. Overlays.

Bottom sheet на мобильных

На viewport уже sheetBreakpoint (по умолчанию 768) содержимое показывается не floating-панелью у якоря, а bottom sheet — это поведение по умолчанию. Отключается пропом sheet: false для случаев, где панель должна оставаться привязанной к якорю.

Слот #content не меняется — он получает isSheet, чтобы содержимое могло адаптироваться, и close. Заголовок шапки задаётся через sheetTitle, дополнительные элементы — слотами #sheet-header-left / #sheet-header-right.

Закрытие: свайп вниз по шапке, клик по затемнению (dismissOnClickOutside), Escape (dismissOnEscape). Пока sheet открыт, скролл страницы заблокирован, фокус переходит на панель и возвращается на trigger при закрытии. В режиме sheet showOnHover не действует.

Размеры настраиваются CSS-переменными на .s-ui-dropdown-sheet: --s-ui-dropdown-sheet-max-height (по умолчанию 80svh) и --s-ui-dropdown-sheet-overdrag.

vue
<SDropdown v-model="isOpen" sheet-title="Выберите действие">
  <template #trigger="{ toggle, triggerProps }">
    <button type="button" v-bind="triggerProps" @click="toggle">Menu</button>
  </template>
  <template #content="{ isSheet, close }">…</template>
</SDropdown>
vue
<SDropdown v-model="isOpen">
  <template #trigger="{ toggle, triggerProps }">
    <button type="button" v-bind="triggerProps" @click="toggle">Menu</button>
  </template>
  <template #content>…</template>
</SDropdown>

Props

Со стрелкой

Placement top

Match reference width

Show on hover

Bottom sheet

Содержимое как bottom sheet: закрытие свайпом вниз по шапке, кликом по затемнению или Escape.

API Reference

Свойства

ИмяТипОписаниеПо умолчанию
placementESDropdownPlacementПредпочтительное положение панели относительно якоря.'bottom-start'
offsetnumberОтступ панели от якоря в пикселях.8
flipbooleanПереворот панели при нехватке места.true
shiftbooleanСдвиг панели вдоль оси, чтобы оставаться в viewport.false
matchReferenceWidthbooleanШирина панели равна ширине якоря.false
fitViewportbooleanОграничение размеров панели границами viewport.false
surfaceClassstringДополнительный CSS-класс поверхности панели.
teleportTostring | falseСелектор контейнера для Teleport; false — без телепорта.'body'
dismissOnClickOutsidebooleanЗакрытие по клику вне панели и якоря.true
dismissOnEscapebooleanЗакрытие по Escape.true
disabledbooleanБлокирует открытие и взаимодействие.false
referenceHTMLElement | nullDOM-элемент якоря; если не задан, используется слот trigger.null
contentIdstringid панели для aria-controls.
viewportPaddingnumberВнутренний отступ от краёв viewport при позиционировании.8
boundaryESDropdownBoundaryГраницы позиционирования и готовности панели: clipping-ancestors — пересечение viewport с overflow-предками якоря, viewport — только viewport (панель может выходить за скролл-контейнер якоря; скрытие при уходе якоря из его клип-границ сохраняется).'clipping-ancestors'
blockbooleanРастягивает обёртку триггера на всю ширину контейнера.false
arrowbooleanПоказывает стрелку-указатель к якорю.false
showOnHoverbooleanОткрывает и закрывает панель по наведению на якорь и содержимое.false
hoverLeaveDelaynumberЗадержка перед закрытием при уходе курсора с якоря или панели, мс.100
sheetbooleanBottom sheet вместо floating-панели на мобильном viewport.true
sheetBreakpointnumberШирина viewport в px, ниже которой включается bottom sheet.S_DROPDOWN_SHEET_BREAKPOINT
sheetTitlestringЗаголовок шапки bottom sheet.''
modelValue / v-modelbooleanДвустороннее значение компонента (v-model).false

Слоты

ИмяОписание
triggerЯкорь открытия: open, toggle, close, isSheet, triggerProps для a11y
sheet-header-leftОбласть шапки bottom sheet слева от заголовка
sheet-header-rightОбласть шапки bottom sheet справа от заголовка
contentСодержимое панели; resolvedPlacement — итоговая позиция, isSheet — режим bottom sheet