پرتوپرتو

منوی ناوبری (Navigation Menu)

مجموعه‌ای از لینک‌های ناوبری با زیرمنوهای پیچیده

معرفی

کامپوننت Navigation Menu برای ایجاد منوهای ناوبری پیچیده با زیرمنوها و محتوای غنی استفاده می‌شود.

چه زمانی استفاده کنیم:

  • برای ناوبری اصلی سایت یا اپلیکیشن در هدر
  • وقتی لینک‌های ناوبری نیاز به زیرمنو با محتوای غنی دارند
  • برای ساختار ناوبری افقی با dropdown های چندستونی

چه زمانی استفاده نکنیم:

  • برای application های داخلی با sidebar — از Sidebar استفاده کنید
  • برای منوهای context-sensitive — از DropdownMenu استفاده کنید

استفاده

import {
  NavigationMenu,
  NavigationMenuContent,
  NavigationMenuItem,
  NavigationMenuLink,
  NavigationMenuList,
  NavigationMenuTrigger,
} from '@parto-system-design/ui'

export default function MyComponent() {
  return (
    <NavigationMenu>
      <NavigationMenuList>
        <NavigationMenuItem>
          <NavigationMenuTrigger>شروع</NavigationMenuTrigger>
          <NavigationMenuContent>
            <ul className="grid gap-3 p-6 md:w-[400px]">
              <li>
                <NavigationMenuLink href="/docs">مستندات</NavigationMenuLink>
              </li>
              <li>
                <NavigationMenuLink href="/examples">نمونه‌ها</NavigationMenuLink>
              </li>
            </ul>
          </NavigationMenuContent>
        </NavigationMenuItem>
        <NavigationMenuItem>
          <NavigationMenuLink href="/about">درباره ما</NavigationMenuLink>
        </NavigationMenuItem>
      </NavigationMenuList>
    </NavigationMenu>
  )
}

حالت‌ها و انواع

با محتوای غنی

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuTrigger>محصولات</NavigationMenuTrigger>
      <NavigationMenuContent>
        <ul className="grid w-[400px] gap-3 p-4 md:w-[500px] md:grid-cols-2">
          <li className="row-span-3">
            <NavigationMenuLink
              href="/"
              className="flex h-full w-full select-none flex-col rounded-md bg-gradient-to-b from-muted/50 to-muted p-6"
            >
              <div className="mb-2 text-lg font-medium">معرفی محصول</div>
              <p className="text-sm leading-tight text-muted-foreground">بهترین محصولات ما را کشف کنید</p>
            </NavigationMenuLink>
          </li>
          <li>
            <NavigationMenuLink href="/product-1">محصول ۱</NavigationMenuLink>
          </li>
          <li>
            <NavigationMenuLink href="/product-2">محصول ۲</NavigationMenuLink>
          </li>
        </ul>
      </NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

بدون Viewport

برای منوهای ساده‌تر:

<NavigationMenu viewport={false}>{/* محتوا */}</NavigationMenu>

Props

Prop

Type

راهنمای استفاده

بکنید

  • از viewport={false} برای منوهای ساده بدون انیمیشن viewport استفاده کنید - لینک‌های مستقیم (بدون زیرمنو) را با NavigationMenuLink تعریف کنید - محتوای غنی در زیرمنو را با grid چندستونی سازماندهی کنید

نکنید

  • از NavigationMenu برای اپلیکیشن‌های داخلی با ساختار عمیق استفاده نکنید — از Sidebar استفاده کنید - بیش از ۵-۶ آیتم سطح اول نگذارید — ناوبری شلوغ می‌شود

دسترسی‌پذیری

  • پیمایش با Tab و کلیدهای جهت‌نما
  • با Enter یا Space زیرمنو باز می‌شود
  • با Escape زیرمنو بسته می‌شود
  • از role="navigation" و aria-expanded استفاده می‌شود
  • سازگار با RTL

کامپوننت‌های مرتبط

  • Sidebar — وقتی ناوبری عمودی با ساختار عمیق در اپلیکیشن داخلی نیاز دارید
  • Menubar — وقتی منوهای دستوری (فایل، ویرایش) به سبک اپلیکیشن دسکتاپ نیاز دارید