Skip to content

CdsLayout

Каркас приложения: CdsLayout расставляет шапку, боковые панели, контент и подвал, считает их размеры и берёт на себя скролл. Части макета знают друг о друге — контент не уезжает под шапку и не прячется за панелью.

Storybook GitLab
Покрытие тестами: 86% — частичное покрытие
API в спеках
22 / 22 пропсы, события, слоты и exposed, у которых есть тест
Тест-кейсы
31 юнит · 0 браузерных
Известные баги
1 зафиксированы тестом it.fails
Покрытие кода
85.6% строк · 69% ветвей замер v4.0.0-alpha.13
A11y (axe)
13 рекомендаций в 9 историях замер v4.0.0-alpha.11

Части макета описаны на отдельных страницах: CdsHeader, CdsDrawer, CdsMain, CdsPage, CdsFooter и CdsToolbar. Собрать каркас мышью и скопировать готовый код можно в конструкторе макета.

Анатомия ​

CdsLayout — корневой элемент приложения. Внутрь кладутся части макета: шапка, панели, CdsMain с CdsPage и подвал. Порядок в шаблоне роли не играет — позиции считает сам макет.

Вариации ​

Схема view ​

Свойство view описывает макет тремя строками: верх, середина, низ. Буквы — части макета: h — шапка, f — подвал, l и r — левая и правая панели, p — страница. Угловые буквы верхней и нижней строки решают спор за углы: hhh отдаёт всю ширину шапке, lhh — верхний левый угол панели.

Sandbox Storybook

Заглавная буква добавляет части position: fixed: HHH lpr fff прибивает шапку к окну, hhh LPR fff — обе панели. Значение по умолчанию — hhh lpr fff.

Контейнерный режим ​

По умолчанию макет занимает всю страницу и управляет её скроллом. Свойство container запирает его в родителе: макет получает собственную область прокрутки, а шапка и подвал остаются на своих местах внутри неё. Так удобно показывать приложение в превью, встраивать его в чужую страницу или собирать рабочую область фиксированной высоты.

Sandbox Storybook

События ​

Макет следит за своей областью прокрутки и делится этим: @scroll отдаёт позицию, направление и точку перегиба, @resize — новые размеры, @scroll-height — высоту содержимого. На этих событиях построены плавающие шапка и подвал, но их можно использовать и для своей логики — например, подгружать следующую страницу списка.

Sandbox Storybook

Рекомендации ​

Сценарии использования ​

Каркас приложения ​

Типичный набор: шапка с CdsToolbar, постоянная навигация в CdsDrawer, CdsMain → CdsPage с контентом и подвал. Кнопка в шапке переключает minified — панель сжимается до иконок и отдаёт ширину контенту, а при наведении разворачивается обратно.

Sandbox Storybook

Шапка, скрывающаяся при скролле ​

На длинных списках место дороже навигации. Свойство reveal у шапки и подвала прячет их при прокрутке вниз и возвращает при прокрутке вверх; reveal-offset задаёт зону у начала списка, где шапка остаётся на месте.

Sandbox Storybook

Рабочая область с фильтрами ​

Схема lhh lpr fff отдаёт верхний левый угол навигации — она начинается от самого верха, а шапка занимает оставшуюся ширину. Правая панель с temporary выезжает поверх контента по кнопке и закрывается кликом по затемнению, поэтому места в макете не занимает.

Sandbox Storybook

API ​

Пропсы

ИмяТипПо умолчаниюОписание
containerboolean | undefinedfalseКонтейнерный режим: макет скроллится внутри себя, а не страницы.
themestring | undefined—Тема компонента
viewstring | undefined'hhh lpr fff'Схема макета из трёх строк: верх (header), середина (left-page-right), низ (footer). Например 'hhh lpr fff'.

События

ИмяТипОписание
resize[contentRect: Pick<DOMRectReadOnly, "width" | "height">]Изменение размеров области макета.
scroll[info: ScrollObserver]Скролл области макета.
scrollHeight[height: number]Изменение высоты прокручиваемого содержимого.

Слоты

ИмяТипОписание
defaultanyСодержимое макета: CdsHeader, CdsDrawer, CdsMain, CdsFooter.

Exposed

ИмяТипОписание
animate() => voidВключает анимацию перестроения макета на время ближайшего обновления размеров.
containerHeightnumberВысота области контента без шапки и подвала, в пикселях.
footerLayoutPartРазмеры и смещение подвала макета.
headerLayoutPartРазмеры и смещение шапки макета.
heightnumberПолная высота макета в пикселях.
instancesRecord<string, unknown>Зарегистрированные в макете компоненты по идентификаторам — шапка, подвал, панели, контент.
isContainerbooleanОграничен ли макет по ширине контейнером (container) вместо растягивания на весь экран.
leftLayoutPartРазмеры и смещение левой панели макета.
rightLayoutPartРазмеры и смещение правой панели макета.
rootRefHTMLElement | undefinedСсылка на корневой DOM-элемент макета.
rows{ top: string[]; middle: string[]; bottom: string[]; }Идентификаторы компонентов, распределённые по рядам макета: сверху, посередине и снизу.
scrollScrollObserverСостояние прокрутки макета: позиция, направление и дельта.
scrollbarWidthnumberШирина системной полосы прокрутки в пикселях — учитывается при блокировке скролла.
totalWidthnumberПолная ширина макета в пикселях.
update(part: "left" | "right" | "footer" | "header", prop: keyof LayoutPart, value: number | boolean) => voidОбновляет размер, смещение или резервирование места для части макета.