НачалоОсновыКомпонентыТексты

Боковая панель

Боковая панель — колонка навигационных ссылок сбоку от приложения или документации. Она может скрываться совсем или сворачиваться в полоску иконок.

Стабильный Figma
ОбзорИспользованиеAPIДоступность
Overview Installation Foundations Color Typography
<tk-sidebar label="Documentation">
  <tk-sidebar-nav-item href="/overview" current>Overview</tk-sidebar-nav-item>
  <tk-sidebar-nav-item href="/install">Installation</tk-sidebar-nav-item>
  <tk-collapsible open>
    <span slot="trigger">Foundations</span>
    <tk-sidebar-nav-item href="/color">Color</tk-sidebar-nav-item>
    <tk-sidebar-nav-item href="/type">Typography</tk-sidebar-nav-item>
  </tk-collapsible>
</tk-sidebar>

Анатомия

Часть Что это
tk-sidebar панель с тремя областями: header, содержимое, footer
слот header оформление приложения над ссылками, например логотип или поиск
содержимое ссылки; ориентир <nav>, который прокручивается сам по себе
слот footer оформление приложения под ссылками, например меню аккаунта
tk-sidebar-nav-item одна строка: ссылка или строка, которая раскрывает вложенные строки

Остальное собирайте из других компонентов: группа — это Collapsible, кнопка сворачивания — ваша Icon button, кнопка «ещё» в строке — Menu. Когда ссылки прокручиваются, у края они плавно исчезают; разделительных линий нет.

Строки

Inbox Starred Projects Apollo Borealis Archive
<tk-sidebar label="Workspace">
  <tk-sidebar-nav-item href="/inbox"><tk-icon slot="icon" name="mail"></tk-icon>Inbox</tk-sidebar-nav-item>
  <tk-sidebar-nav-item href="/starred" current><tk-icon slot="icon" name="star"></tk-icon>Starred</tk-sidebar-nav-item>
  <tk-sidebar-nav-item open>
    <tk-icon slot="icon" name="bookmark"></tk-icon>Projects
    <tk-sidebar-nav-item slot="sub" href="/apollo">Apollo</tk-sidebar-nav-item>
    <tk-sidebar-nav-item slot="sub" href="/borealis">Borealis</tk-sidebar-nav-item>
  </tk-sidebar-nav-item>
  <tk-sidebar-nav-item href="/archive" disabled>Archive</tk-sidebar-nav-item>
</tk-sidebar>
  • current: отмечает страницу, на которой человек сейчас.
  • Слот icon: tk-icon перед подписью. В свёрнутой полоске видна только она.
  • Слот trailing: Badge со счётчиком или кнопка «ещё» после подписи.
  • Слот sub: вложенные строки. Строка становится кнопкой, которая раскрывает их на месте и сдвигает строки ниже. Строка с вложенными строками не ссылка, поэтому href не задавайте.
  • disabled: приглушена и выпадает из порядка Tab.

Сворачивание

collapsible Что происходит при сворачивании
offcanvas (по умолчанию) панель уезжает целиком
icon панель сужается до полоски иконок шириной 56px
none не сворачивается

Строки свёрнутой панели выпадают из порядка Tab и из дерева доступности, поэтому в скрытую панель фокусом не попасть.

Полоска иконок

В полоске видны иконки строк верхнего уровня. Для скринридера у каждой строки остаётся имя. Всё, что в содержимом не является строкой, скрыто: подписи групп, поля поиска и обёртки вокруг строк. Поэтому панель с группами лучше сворачивать через offcanvas. Выбирайте иконки, понятные без подписей.

<tk-sidebar id="rail" label="Main" collapsible="icon">
  <tk-sidebar-nav-item href="/inbox"><tk-icon slot="icon" name="mail"></tk-icon>Inbox</tk-sidebar-nav-item>
  <tk-sidebar-nav-item href="/starred"><tk-icon slot="icon" name="star"></tk-icon>Starred</tk-sidebar-nav-item>
</tk-sidebar>
<script>
  document.getElementById('rail').open = false;
</script>

open по умолчанию включён; чтобы панель была свёрнута с самого начала, задайте свойство из скрипта, как выше.

Кнопка сворачивания

Встроенной кнопки нет. Вызывайте toggle() из своей Icon button и называйте её по действию:

<tk-icon-button label="Toggle sidebar" onclick="document.getElementById('nav').toggle()">
  <tk-icon name="menu"></tk-icon>
</tk-icon-button>

Cmd + B на устройствах Apple и Ctrl + B на остальных сворачивают и разворачивают панель с любого места страницы, кроме набора текста в поле. Сочетание меняет hotkey, hotkey="" его выключает. persist запоминает, была ли панель открыта, в localStorage под ключом tk-sidebar:open.

Варианты

Profile Billing
<tk-sidebar label="Settings" variant="floating">
  <tk-sidebar-nav-item href="/profile" current>Profile</tk-sidebar-nav-item>
  <tk-sidebar-nav-item href="/billing">Billing</tk-sidebar-nav-item>
</tk-sidebar>
  • sidebar (по умолчанию): прижата к краю окна, с тонкой линией с внутренней стороны.
  • floating: карточка с отступом от краёв, скруглёнными углами и тенью.

side="right" прикрепляет панель к правому краю.

Раскладка страницы

Панель не сдвигает содержимое страницы. Если она стоит в flex-ряду рядом с содержимым, ничего делать не нужно: страница перестраивается, когда панель сужается. Если вы позиционируете её сами, сдвигайте содержимое теми же переменными, которые читает панель:

.app { --tk-sidebar-width: 260px; --tk-sidebar-rail-width: 56px; }
.app main { margin-inline-start: var(--tk-sidebar-width); }
.app tk-sidebar:not([open]) ~ main { margin-inline-start: 0; }
.app tk-sidebar[collapsible='icon']:not([open]) ~ main { margin-inline-start: var(--tk-sidebar-rail-width); }

Мобильная версия

Навигационное меню на узком экране модальное, поэтому берите Sheet с теми же строками, а панель на этой ширине прячьте. Своей точки перелома у панели нет.

<tk-icon-button label="Open navigation" onclick="document.getElementById('drawer').show()">
  <tk-icon name="menu"></tk-icon>
</tk-icon-button>
<tk-sheet id="drawer" heading="Menu" side="left">
  <tk-sidebar label="Main" collapsible="none">
    <tk-sidebar-nav-item href="/home" current>Home</tk-sidebar-nav-item>
  </tk-sidebar>
</tk-sheet>