Menubar — это компонент пользовательского интерфейса, предназначенный для организации навигации и доступа к действиям приложения через горизонтальное или вертикальное меню. В SvelteKit UI библиотеках Menubar обычно реализуется как высокоуровневый компонент с вложенными элементами, такими как MenubarItem, MenubarTrigger и MenubarContent.
1. Menubar
Главный контейнер меню, который определяет его ориентацию и стиль. Чаще всего принимает следующие свойства:
orientation — 'horizontal' или
'vertical'. Определяет направление отображения меню.class — кастомные CSS-классы для стилизации.loop — логическое значение; если true,
навигация по элементам с клавиатуры циклична.Пример:
<Menubar orientation="horizontal" class="bg-gray-100 p-2">
<MenubarItem>Файл</MenubarItem>
<MenubarItem>Правка</MenubarItem>
<MenubarItem>Вид</MenubarItem>
</Menubar>
2. MenubarItem
Представляет отдельный пункт меню. Может быть кликабельным или содержать выпадающий подменю. Основные свойства:
disabled — делает пункт недоступным.on:select — событие выбора элемента.class — пользовательские стили.Пример:
<MenubarItem on:select={() => console.log('Файл выбран')}>
Файл
</MenubarItem>
3. MenubarTrigger
Элемент, который открывает вложенное подменю. Обычно используется вместе с MenubarContent. Позволяет создавать сложные структуры, включая многослойные выпадающие меню.
Пример:
<MenubarItem>
<MenubarTrigger>Файл</MenubarTrigger>
<MenubarContent>
<MenubarItem>Создать</MenubarItem>
<MenubarItem>Открыть</MenubarItem>
<MenubarItem>Сохранить</MenubarItem>
</MenubarContent>
</MenubarItem>
4. MenubarContent
Контейнер для вложенных пунктов меню, который отображается при активации MenubarTrigger. Поддерживает кастомизацию стилей и анимаций.
Пример:
<MenubarContent class="bg-white shadow-lg rounded-md p-2">
<MenubarItem on:select={createFile}>Создать</MenubarItem>
<MenubarItem on:select={openFile}>Открыть</MenubarItem>
<MenubarItem on:select={saveFile}>Сохранить</MenubarItem>
</MenubarContent>
Menubar в SvelteKit UI полностью поддерживает ARIA-атрибуты и управление с клавиатуры:
Важно корректно использовать role="menu" и
role="menuitem" в кастомных реализациях для соответствия
стандартам доступности.
SvelteKit UI Menubar допускает:
Пример с Tailwind:
<Menubar class="bg-blue-600 text-white rounded-lg p-2">
<MenubarItem class="hover:bg-blue-500 px-3 py-1">Файл</MenubarItem>
<MenubarItem class="hover:bg-blue-500 px-3 py-1">Правка</MenubarItem>
</Menubar>
Menubar удобно использовать с массивами данных для генерации меню:
<script>
const menuItems = [
{ label: 'Файл', actions: ['Создать', 'Открыть', 'Сохранить'] },
{ label: 'Правка', actions: ['Отменить', 'Повторить', 'Вырезать'] }
];
</script>
<Menubar>
{#each menuItems as item}
<MenubarItem>
<MenubarTrigger>{item.label}</MenubarTrigger>
<MenubarContent>
{#each item.actions as action}
<MenubarItem on:select={() => console.log(action)}>{action}</MenubarItem>
{/each}
</MenubarContent>
</MenubarItem>
{/each}
</Menubar>
Такой подход упрощает масштабирование меню и интеграцию с динамическими данными из API.
<a> или использовать goto из
$app/navigation.Пример с навигацией SvelteKit:
<script>
import { goto } from '$app/navigation';
</script>
<Menubar>
<MenubarItem on:select={() => goto('/dashboard')}>Дашборд</MenubarItem>
<MenubarItem on:select={() => goto('/settings')}>Настройки</MenubarItem>
</Menubar>
Menubar в SvelteKit UI — это гибкий инструмент для создания удобных и доступных меню, поддерживающий кастомизацию, динамическое наполнение, работу с клавиатурой и интеграцию с маршрутизацией SvelteKit. Правильная комбинация Menubar, MenubarTrigger и MenubarContent позволяет строить как простые панели навигации, так и сложные многослойные меню с динамическим контентом.