Части макета описаны на отдельных страницах: CdsHeader, CdsDrawer, CdsMain, CdsPage, CdsFooter и CdsToolbar. Собрать каркас мышью и скопировать готовый код можно в конструкторе макета.
Анатомия
CdsLayout — корневой элемент приложения. Внутрь кладутся части макета: шапка, панели, CdsMain с CdsPage и подвал. Порядок в шаблоне роли не играет — позиции считает сам макет.
Вариации
Схема view
Свойство view описывает макет тремя строками: верх, середина, низ. Буквы — части макета: h — шапка, f — подвал, l и r — левая и правая панели, p — страница. Угловые буквы верхней и нижней строки решают спор за углы: hhh отдаёт всю ширину шапке, lhh — верхний левый угол панели.
Заглавная буква добавляет части position: fixed: HHH lpr fff прибивает шапку к окну, hhh LPR fff — обе панели. Значение по умолчанию — hhh lpr fff.
Контейнерный режим
По умолчанию макет занимает всю страницу и управляет её скроллом. Свойство container запирает его в родителе: макет получает собственную область прокрутки, а шапка и подвал остаются на своих местах внутри неё. Так удобно показывать приложение в превью, встраивать его в чужую страницу или собирать рабочую область фиксированной высоты.
События
Макет следит за своей областью прокрутки и делится этим: @scroll отдаёт позицию, направление и точку перегиба, @resize — новые размеры, @scroll-height — высоту содержимого. На этих событиях построены плавающие шапка и подвал, но их можно использовать и для своей логики — например, подгружать следующую страницу списка.
Рекомендации
Сценарии использования
Каркас приложения
Типичный набор: шапка с CdsToolbar, постоянная навигация в CdsDrawer, CdsMain → CdsPage с контентом и подвал. Кнопка в шапке переключает minified — панель сжимается до иконок и отдаёт ширину контенту, а при наведении разворачивается обратно.
Шапка, скрывающаяся при скролле
На длинных списках место дороже навигации. Свойство reveal у шапки и подвала прячет их при прокрутке вниз и возвращает при прокрутке вверх; reveal-offset задаёт зону у начала списка, где шапка остаётся на месте.
Рабочая область с фильтрами
Схема lhh lpr fff отдаёт верхний левый угол навигации — она начинается от самого верха, а шапка занимает оставшуюся ширину. Правая панель с temporary выезжает поверх контента по кнопке и закрывается кликом по затемнению, поэтому места в макете не занимает.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
container | boolean | undefined | false | Контейнерный режим: макет скроллится внутри себя, а не страницы. |
theme | string | undefined | — | Тема компонента |
view | string | undefined | 'hhh lpr fff' | Схема макета из трёх строк: верх (header), середина (left-page-right),
низ (footer). Например 'hhh lpr fff'. |
События
| Имя | Тип | Описание |
|---|---|---|
resize | [contentRect: Pick<DOMRectReadOnly, "width" | "height">] | Изменение размеров области макета. |
scroll | [info: ScrollObserver] | Скролл области макета. |
scrollHeight | [height: number] | Изменение высоты прокручиваемого содержимого. |
Слоты
| Имя | Тип | Описание |
|---|---|---|
default | any | Содержимое макета: CdsHeader, CdsDrawer, CdsMain, CdsFooter. |
Exposed
| Имя | Тип | Описание |
|---|---|---|
animate | () => void | Включает анимацию перестроения макета на время ближайшего обновления размеров. |
containerHeight | number | Высота области контента без шапки и подвала, в пикселях. |
footer | LayoutPart | Размеры и смещение подвала макета. |
header | LayoutPart | Размеры и смещение шапки макета. |
height | number | Полная высота макета в пикселях. |
instances | Record<string, unknown> | Зарегистрированные в макете компоненты по идентификаторам — шапка, подвал, панели, контент. |
isContainer | boolean | Ограничен ли макет по ширине контейнером (container) вместо растягивания на весь экран. |
left | LayoutPart | Размеры и смещение левой панели макета. |
right | LayoutPart | Размеры и смещение правой панели макета. |
rootRef | HTMLElement | undefined | Ссылка на корневой DOM-элемент макета. |
rows | { top: string[]; middle: string[]; bottom: string[]; } | Идентификаторы компонентов, распределённые по рядам макета: сверху, посередине и снизу. |
scroll | ScrollObserver | Состояние прокрутки макета: позиция, направление и дельта. |
scrollbarWidth | number | Ширина системной полосы прокрутки в пикселях — учитывается при блокировке скролла. |
totalWidth | number | Полная ширина макета в пикселях. |
update | (part: "left" | "right" | "footer" | "header", prop: keyof LayoutPart, value: number | boolean) => void | Обновляет размер, смещение или резервирование места для части макета. |