В библиотеке Naive UI создание горизонтального меню
строится вокруг компонента n-menu. Этот компонент позволяет
строить многоуровневые навигационные структуры с поддержкой иконок,
подменю и различных стилей отображения. Для горизонтального меню
ключевым параметром является свойство mode, которое
принимает значение 'horizontal'.
import { createApp } from 'vue';
import { NMenu, NMenuItem } from 'naive-ui';
const app = createApp({
template: `
<n-menu :options="menuOptions" mode="horizontal" />
`,
data() {
return {
menuOptions: [
{ label: 'Главная', key: 'home' },
{ label: 'О нас', key: 'about' },
{ label: 'Контакты', key: 'contact' }
]
};
}
});
app.mount('#app');
Ключевые моменты:
mode="horizontal" — переключает меню из вертикального
стандартного режима в горизонтальный.options — массив объектов, определяющих структуру
меню.label, key, icon,
children.Naive UI позволяет создавать вложенные подменю с помощью свойства
children. Для горизонтального меню подменю открывается по
наведению мыши, что обеспечивает привычную навигацию, аналогичную
веб-сайтам с верхней панелью.
const menuOptions = [
{
label: 'Продукты',
key: 'products',
children: [
{ label: 'Продукт A', key: 'productA' },
{ label: 'Продукт B', key: 'productB' }
]
},
{ label: 'О нас', key: 'about' },
{ label: 'Контакты', key: 'contact' }
];
Особенности подменю:
Naive UI предлагает гибкую систему стилизации, которая позволяет управлять цветами, отступами, размерами и шрифтами меню через theme overrides. Для горизонтального меню особенно важно контролировать высоту строки и интервалы между пунктами меню.
import { createTheme } from 'naive-ui';
const customTheme = createTheme({
Menu: {
itemHeight: '50px',
itemFontSize: '16px',
itemTextColor: '#333',
itemTextColorHover: '#1f6feb',
itemTextColorActive: '#0d3b87'
}
});
Свойства темы для горизонтального меню:
itemHeight — высота одного пункта меню.itemFontSize — размер текста.itemTextColorHover — цвет текста при наведении.itemTextColorActive — цвет активного пункта.Меню в Naive UI предоставляет возможность подписки на события, такие как выбор пункта меню. В горизонтальном режиме это особенно полезно для динамической навигации и обновления контента.
<n-menu
:options="menuOptions"
mode="horizontal"
@update:value="handleSelect"
/>
methods: {
handleSelect(key) {
console.log('Выбран пункт меню:', key);
}
}
Особенности событий:
@update:value — срабатывает при выборе пункта
меню.key — уникальный идентификатор выбранного пункта.Добавление иконок делает меню более визуально понятным. В Naive UI можно использовать встроенные компоненты иконок или сторонние библиотеки.
import { NIcon } from 'naive-ui';
import { HomeOutlined } from '@vicons/antd';
const menuOptions = [
{ label: 'Главная', key: 'home', icon: () => h(NIcon, null, { default: () => h(HomeOutlined) }) },
{ label: 'О нас', key: 'about' }
];
Особенности работы с иконками:
() => h(...) позволяет
рендерить иконку динамически.Для адаптивного дизайна горизонтальное меню можно сочетать с
компонентами n-dropdown или n-popover для
компактного отображения на мобильных устройствах. Это позволяет скрывать
пункты в выпадающий список при уменьшении ширины экрана.
<n-menu :options="menuOptions" mode="horizontal" collapsed-width="0" />
Особенности адаптивного меню:
collapsed-width задает ширину, при которой меню
автоматически сворачивается.n-drawer для мобильного раскрытия
меню.Горизонтальное меню в Naive UI сочетает:
mode="horizontal" и
options.Эта структура обеспечивает создание гибкого, современного и визуально привлекательного навигационного интерфейса.