Для списка разделов внутри панели возьмите CdsList, для навигации по подразделам одной страницы — CdsTabs. Панель — часть каркаса CdsLayout, но, в отличие от остальных частей, работает и отдельно: со свойством
fixedона прижимается к окну без макета.
Анатомия
Панель состоит из прокручиваемого списка навигации и двух закреплённых зон: prepend сверху — для логотипа или профиля, append снизу — для выхода и служебных ссылок. Свойство border рисует границы между зонами.
Вариации
Постоянная панель
Свойство permanent держит панель на экране всегда. Без него панель прячется на экранах уже 1056 px — контенту остаётся вся ширина, а навигацию открывают по кнопке.
Скрываемая панель
Обычная панель подчиняется v-model на любой ширине экрана. На широком она стоит в макете, а закрытая отдаёт своё место контенту. На узком экране та же панель выезжает поверх контента. При переходе через 1056 px панель сама закрывается и открывается обратно; disable-resize-watcher отключает эту синхронизацию. Свойство width задаёт ширину в пикселях, и макет сдвигает контент ровно на неё.
Временная панель
Свойство temporary превращает панель в выезжающую: она не занимает места в макете, открывается через v-model и закрывается кликом по затемнению или клавишей Esc. События @opened и @closed сообщают о смене состояния.
На сенсорных экранах выезжающую панель можно вытянуть свайпом от края экрана и убрать свайпом обратно. Свойство touchless отключает жесты.
Без затемнения
Свойство scrim управляет затемнением под выезжающей панелью. false убирает его: контент под панелью остаётся кликабельным, но закрыть панель кликом мимо неё уже нельзя, поэтому дайте для этого свою кнопку. Строка вместо true задаёт цвет затемнения — передавайте его с прозрачностью, например rgb(0 0 0 / 0.3), иначе контент под панелью скроется целиком.
Защита от случайного закрытия
Свойство persistent запрещает закрывать панель кликом по затемнению и клавишей Esc: закрыть её можно только через v-model. Подходит для панели с формой, где случайный клик мимо стёр бы ввод.
Свёрнутая панель
Свойство minified сжимает панель до иконок и отдаёт ширину контенту. При наведении мыши панель разворачивается поверх страницы, не сдвигая её, поэтому подписи разделов остаются доступны.
Положение
Свойство right переносит панель к правому краю. Слева обычно живёт навигация по приложению, справа — контекст текущей записи: история, комментарии, фильтры. В одном макете могут работать обе панели сразу.
Цвет
Свойство bg-color красит фон панели алиасом палитры, color — текст и иконки внутри. Тёмная панель рядом со светлым контентом подчёркивает границу рабочей области.
Фоновое изображение
Свойство image кладёт картинку по ссылке под содержимое панели, слот image — свою разметку фона. Текст поверх фона красьте свойством color, чтобы он оставался читаемым.
Слоты
| Слот | Описание |
|---|---|
prepend | Закреплённая зона сверху: логотип, профиль |
default | Элементы навигации |
append | Закреплённая зона снизу: выход, служебные ссылки |
image | Фон под содержимым панели |
Свойство fixed-slots оставляет prepend и append на месте и отдаёт скролл только списку разделов — длинная навигация не уводит кнопку выхода за край.
Рекомендации
Сценарии использования
Навигация приложения
Логотип в prepend, разделы в CdsList с active у текущего, кнопка выхода в append. Схема макета lhh lpr fff отдаёт панели верхний левый угол, поэтому она начинается от самого верха и читается как основа приложения.
Панель уведомлений
Правая панель с temporary открывается по иконке в шапке, показывает список и закрывается кликом по затемнению. Места в макете она не занимает, поэтому основной контент не перестраивается при открытии.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
bgColor | string | undefined | — | Цвет фона компонента |
border | boolean | undefined | false | Добавляет границы между секциями (prepend/append). |
captureFocus | boolean | undefined | true | Возвращает фокус внутрь контента, если он ушёл за его пределы — например, по Tab с конца страницы. Клик мышью фокус не перехватывает. |
color | string | undefined | — | Цвет компонента |
disableResizeWatcher | boolean | undefined | false | Не синхронизировать v-model с шириной экрана. По умолчанию обычная панель закрывается, когда экран сужается и она становится выезжающей, и открывается обратно на широком. |
fixed | boolean | undefined | false | Применяет position: fixed. |
fixedSlots | boolean | undefined | false | Использовать внутренний скролл для секции контента. |
height | string | number | undefined | — | Высота компонента |
image | string | undefined | — | Фоновое изображение панели (URL). Для своей разметки фона есть слот image. |
maxHeight | string | number | undefined | — | Максимальная высота компонента |
maxWidth | string | number | undefined | — | Максимальная ширина компонента |
minHeight | string | number | undefined | — | Минимальная высота компонента |
minified | boolean | undefined | false | Свёрнутый вид (только иконки) до наведения мыши. |
minWidth | string | number | undefined | — | Минимальная ширина компонента |
modelValue | boolean | null | undefined | null | Показать/скрыть панель (v-model). Без него обычная панель открыта на широком экране, а выезжающая закрыта. |
permanent | boolean | undefined | false | Постоянно видима, независимо от размера экрана. |
persistent | boolean | undefined | false | Клик по затемнению и клавиша Esc не закрывают панель — только v-model. Для панелей с формой, где случайное закрытие теряет ввод. |
retainFocus | boolean | undefined | true | Замыкает Tab-навигацию внутри контента: с последнего фокусируемого элемента фокус переходит на первый и наоборот. |
right | boolean | undefined | false | Позиционирование справа. |
scrim | string | boolean | undefined | true | Затемнение под панелью, когда она накрывает контент. false убирает его целиком — контент
остаётся кликабельным, а панель закрывается только клавишей Esc или через v-model; строка задаёт цвет. |
tag | string | JSXComponent<any> | undefined | 'aside' | Пользовательский HTML-тег для отображения |
temporary | boolean | undefined | false | Временная панель: выезжает поверх контента на любой ширине экрана, открывается через v-model и закрывается по оверлею. На узком экране так ведёт себя любая непостоянная панель. |
theme | string | undefined | — | Тема компонента |
touchless | boolean | undefined | false | Отключает жесты: выезжающая панель не открывается свайпом от края экрана и не закрывается свайпом. |
width | string | number | undefined | 240 | Ширина панели, px. Уходит и в макет: контент сдвигается ровно на неё. |
События
| Имя | Тип | Описание |
|---|---|---|
closed | [value: boolean] | Панель закрылась. |
opened | [value: boolean] | Панель открылась. |
update:modelValue | [value: boolean] | Изменение v-model. |
Слоты
| Имя | Тип | Описание |
|---|---|---|
append | any | Контент после навигации. |
default | any | Элементы навигации (CdsList). |
image | { image: string | undefined; } | Свой фон панели вместо CdsImage из пропа image; растягивается под контентом. |
prepend | any | Контент перед навигацией. |
Exposed
| Имя | Тип | Описание |
|---|---|---|
drawerRef | HTMLElement | undefined | Ссылка на корневой DOM-элемент панели. |