NavigationMenu

Bir sitenin üst navigasyonu: link'ler ve link panellerini açan butonlar; kısa bir listeden tam genişlikte mega menüye kadar.

Import

import { NavigationMenu } from "@meridui/react";

Anatomi

<NavigationMenu.Root>
  <NavigationMenu.List>
    <NavigationMenu.Item value="products">
      <NavigationMenu.Trigger />
      <NavigationMenu.Content>
        <NavigationMenu.Link />
      </NavigationMenu.Content>
    </NavigationMenu.Item>
    <NavigationMenu.Item>
      <NavigationMenu.Link />
    </NavigationMenu.Item>
  </NavigationMenu.List>
</NavigationMenu.Root>
  • Root <nav> landmark'ıdır ve hangi panelin açık olduğunu tutar (aynı anda bir tane).
  • List ve Item, çubuğun <ul> ve <li> elemanlarıdır.
  • Trigger bir disclosure <button>'ıdır; Content onun link panelidir. fullWidth mega menü için paneli çubuk boyunca yayar.
  • Link bir <a>'dır; doğrudan bir Item içinde (üst seviye link) ya da Content içinde durur. description ikinci bir satır ekler.

Örnekler

Router link'leri

asChild router'ının link'ini aynı stil ve davranışla render'lar; active, aria-current="page" atar.

import NextLink from "next/link";

<NavigationMenu.Link asChild active={pathname === "/pricing"}>
  <NextLink href="/pricing">Fiyatlar</NextLink>
</NavigationMenu.Link>

Mega menü

Content'e fullWidth ver: panel tüm çubuk boyunca yayılır ve link'leri responsive bir grid'e dizer. 640px'in altında her panel çubuk boyunca yayılır.

API referansı

Root

Tüm <nav> attribute'larını kabul eder.

PropTipVarsayılanAçıklama
valuestring–Controlled açık öğe (hiçbiri açık değilse "").
defaultValuestring""Uncontrolled kullanımda başlangıçta açık öğe.
onValueChange(value: string) => void–Açık öğenin değeriyle çağrılır.
openDelaynumber150Hover'da panel açılmadan önceki gecikme, ms. Tıklama ve tuşlar hemen açar.
closeDelaynumber250İmleç ayrıldıktan sonra panel kapanmadan önceki gecikme, ms.
aria-labelstring"Main"Navigasyon landmark'ının erişilebilir adı.
refRef<HTMLElement>–<nav>'a iletilen ref.

Item

PropTipVarsayılanAçıklama
valuestring–Benzersiz değer; controlled kullanım için gerekir. Varsayılanı üretilen bir id.

Trigger, Content

Trigger tüm <button>, Content tüm <div> attribute'larını kabul eder.

PropTipVarsayılanAçıklama
Content fullWidthbooleanfalseÇubuğun tam genişliğine yayılır (mega menü).

Tüm <a> attribute'larını kabul eder.

PropTipVarsayılanAçıklama
activebooleanfalseGeçerli sayfayı işaretler (aria-current="page").
descriptionstring–Panel içindeki link'ler için etiketin altındaki ikinci satır.
asChildbooleanfalse<a> yerine tek child elemanı (bir router link'i) render'lar.
refRef<HTMLAnchorElement>–İletilen ref.

Stil verme

SınıfEleman
.mrd-navmenuRoot
.mrd-navmenu__list, .mrd-navmenu__itemList ve Item
.mrd-navmenu__trigger, .mrd-navmenu__chevronTrigger ve ikonu
.mrd-navmenu__contentContent
.mrd-navmenu__link, .mrd-navmenu__link-title, .mrd-navmenu__link-descriptionLink parçaları
AttributeNeredeDeğerler
data-stateRoot, Item, Trigger, Contentopen, closed
data-fullContentfullWidth verildiğinde bulunur
data-activeLinkactive iken bulunur

Erişilebilirlik

role="menubar" yerine WAI-ARIA Disclosure navigation menu örneğini izler: site navigasyonu bir link listesidir ve her tetikleyici ile link Tab sırasında kalır. Paneller kapalıyken de DOM'da (hidden) durur; böylece link'leri taranabilir. Focus'un nav'dan çıkması, Escape ya da dışarıya tıklama açık paneli kapatır.

TuşNe yapar
EnterSpaceTetikleyicide: panelini açar ya da kapatır.
ArrowDownTetikleyicide: açar ve ilk link'e focus verir. Panelde: sonraki link.
ArrowUpPanelde: önceki link.
ArrowRightArrowLeftSonraki / önceki tetikleyici ya da üst seviye link (RTL'de ters).
HomeEndİlk / son tetikleyici ya da üst seviye link.
EscapePaneli kapatır ve focus'u tetikleyicisine döndürür.
TabTetikleyiciler ve link'ler arasında sırayla ilerler.

Kullanım ilkeleri

Yap

Üst seviye etiketleri kısa tut ve en çok ziyaret edilen hedefleri başa koy.

Kaçın

NavigationMenu'yü uygulama komutları için kullanmak. Aksiyonların yeri DropdownMenu ya da Toolbar.

İlgili sayfalar