Navigation Menu 站点导航

用于站点导航场景的 MoriUI 组件。

导入

import { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuSub, NavigationMenuTrigger, NavigationMenuViewport } from 'moriui'

示例

概览

站点主导航菜单。

<script setup lang="ts">
  import type { HTMLAttributes } from 'vue'

  import {
    NavigationMenu,
    NavigationMenuContent,
    NavigationMenuItem,
    NavigationMenuLink,
    NavigationMenuList,
    NavigationMenuTrigger
  } from 'moriui'

  interface ListItemProps {
    title: string
    href?: string
    class?: HTMLAttributes['class']
  }

  const components: { title: string, description: string }[] = [
    { title: '弹窗', description: '模态对话框,用于重要操作确认' },
    { title: '悬浮卡片', description: '为有视力的用户预览链接内容' },
    { title: '进度条', description: '显示任务完成进度的指示器' },
    { title: '滚动区域', description: '自定义滚动条样式的内容区域' },
    { title: '标签页', description: '分层内容的面板切换组件' },
    { title: '工具提示', description: '元素聚焦或悬停时弹出的信息' }
  ]
</script>

<template>
  <NavigationMenu>
    <NavigationMenuList>
      <NavigationMenuItem>
        <NavigationMenuTrigger>概览</NavigationMenuTrigger>
        <NavigationMenuContent>
          <ul class="w-72 p-2">
            <li v-for="item in [{ title: '介绍', desc: '基于 Reka UI 的 Vue 组件库' }, { title: '安装', desc: '依赖安装与应用结构指南' }, { title: '快速开始', desc: '几分钟内搭建你的第一个页面' }]" :key="item.title">
              <NavigationMenuLink class="flex flex-col gap-1 p-2">
                <span class="text-sm font-medium leading-none">{{ item.title }}</span>
                <span class="text-xs text-muted-foreground line-clamp-2">{{ item.desc }}</span>
              </NavigationMenuLink>
            </li>
          </ul>
        </NavigationMenuContent>
      </NavigationMenuItem>
      <NavigationMenuItem>
        <NavigationMenuTrigger>组件</NavigationMenuTrigger>
        <NavigationMenuContent>
          <ul class="grid w-[22rem] gap-1 p-2 md:w-[28rem] md:grid-cols-2">
            <li v-for="c in components" :key="c.title">
              <NavigationMenuLink class="flex flex-col gap-1 p-2">
                <span class="text-sm font-medium leading-none">{{ c.title }}</span>
                <span class="text-xs text-muted-foreground line-clamp-2">{{ c.description }}</span>
              </NavigationMenuLink>
            </li>
          </ul>
        </NavigationMenuContent>
      </NavigationMenuItem>
      <NavigationMenuItem>
        <NavigationMenuTrigger>文档</NavigationMenuTrigger>
        <NavigationMenuContent>
          <ul class="w-56 p-2">
            <li>
              <NavigationMenuLink class="flex flex-col gap-1 p-2">
                <span class="text-sm font-medium leading-none">入门指南</span>
                <span class="text-xs text-muted-foreground">了解核心概念与用法</span>
              </NavigationMenuLink>
            </li>
            <li>
              <NavigationMenuLink class="flex flex-col gap-1 p-2">
                <span class="text-sm font-medium leading-none">自定义主题</span>
                <span class="text-xs text-muted-foreground">通过 Token 定制视觉风格</span>
              </NavigationMenuLink>
            </li>
            <li>
              <NavigationMenuLink class="flex flex-col gap-1 p-2">
                <span class="text-sm font-medium leading-none">无障碍</span>
                <span class="text-xs text-muted-foreground">遵循 WAI-ARIA 标准</span>
              </NavigationMenuLink>
            </li>
          </ul>
        </NavigationMenuContent>
      </NavigationMenuItem>
      <NavigationMenuItem>
        <NavigationMenuLink class="text-sm font-medium">
          指南
        </NavigationMenuLink>
      </NavigationMenuItem>
    </NavigationMenuList>
  </NavigationMenu>
</template>

RTL

从右到左的导航菜单。

<script setup lang="ts">
  import {
    DirectionProvider,
    NavigationMenu,
    NavigationMenuContent,
    NavigationMenuItem,
    NavigationMenuLink,
    NavigationMenuList,
    NavigationMenuTrigger
  } from 'moriui'
</script>

<template>
  <DirectionProvider dir="rtl">
    <NavigationMenu>
      <NavigationMenuList>
        <NavigationMenuItem>
          <NavigationMenuTrigger>الملخص</NavigationMenuTrigger>
          <NavigationMenuContent>
            <ul class="grid w-64 gap-1 p-2">
              <li>
                <NavigationMenuLink class="flex flex-col gap-1">
                  <span class="text-sm font-medium">المقدمة</span>
                  <span class="text-xs text-muted-foreground">تعرف على المكتبة وميزاتها</span>
                </NavigationMenuLink>
              </li>
              <li>
                <NavigationMenuLink class="flex flex-col gap-1">
                  <span class="text-sm font-medium">التثبيت</span>
                  <span class="text-xs text-muted-foreground">دليل البدء السريع</span>
                </NavigationMenuLink>
              </li>
            </ul>
          </NavigationMenuContent>
        </NavigationMenuItem>
        <NavigationMenuItem>
          <NavigationMenuTrigger>المكونات</NavigationMenuTrigger>
          <NavigationMenuContent>
            <ul class="grid w-56 gap-1 p-2">
              <li>
                <NavigationMenuLink class="flex flex-col gap-1">
                  <span class="text-sm font-medium">الأزرار</span>
                  <span class="text-xs text-muted-foreground">أنواع وأحجام مختلفة</span>
                </NavigationMenuLink>
              </li>
              <li>
                <NavigationMenuLink class="flex flex-col gap-1">
                  <span class="text-sm font-medium">النماذج</span>
                  <span class="text-xs text-muted-foreground">حقول الإدخال والتحقق</span>
                </NavigationMenuLink>
              </li>
            </ul>
          </NavigationMenuContent>
        </NavigationMenuItem>
        <NavigationMenuItem>
          <NavigationMenuLink class="text-sm font-medium">
            الوثائق
          </NavigationMenuLink>
        </NavigationMenuItem>
      </NavigationMenuList>
    </NavigationMenu>
  </DirectionProvider>
</template>

使用说明

组合方式

NavigationMenu 由 List、Item、Trigger 和 Content 组成,Viewport 管理弹出内容的定位。

RTL

方向由 DirectionProvider 控制。

变体

NavigationMenu 没有视觉变体;viewport 定位由 Reka UI NavigationMenu 管理。

可访问性

NavigationMenu 复用 Reka UI 的 navigation/menubar ARIA 和键盘导航。Root 元素默认输出 role="navigation";Trigger 和 Content 自动关联。

API 参考

属性类型默认值说明
NavigationMenu v-model:modelValuestringundefined当前激活菜单项的值。
NavigationMenu defaultValuestringundefined非受控初始激活项。
NavigationMenu delayDurationnumber200延迟打开/关闭的毫秒数。
NavigationMenuList classHTMLAttributes["class"]undefined合并到列表的调用方类。
NavigationMenuTrigger disabledbooleanfalse禁用触发器。
NavigationMenuLink as / asChildstring | Component / boolean'a' / false链接的元素组合能力。
NavigationMenuLink activebooleanfalse标记当前激活的导航链接。
NavigationMenuViewport classHTMLAttributes["class"]undefined合并到视口容器的调用方类。