NavigationMenu

Gir oversikt over innhold og struktur. Tilbyr en konsekvent måte å navigere på tvers av seksjoner, sider, og innhold. Består av lenker som settes i ønsket struktur, og som kan gis beskrivelser ved behov.

Komponenten er klar til testing, men ikke ferdig

Komponenten har blitt utarbeidet nok til at det ikke kommer store endringer, men trenger å bli testet for å avdekke behov. Gi tilbakemelding om noe lugger eller mangler.

Breaking changes varsles i endringsloggen som patches, ikke som major oppdateringer, for å unngå versjonsinflasjon.

Send innspill

Eksempler

Utseendet til menyen kan tilpasses ved hjelp av CSS-variabler og data-attributter i tillegg til vanlige props. Se dokumentasjonen under "Kode".

Enkel NavigationMenu

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuTrigger>Trigger 1</NavigationMenuTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuTrigger>Trigger 2</NavigationMenuTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuTrigger>Trigger 3</NavigationMenuTrigger>
      <NavigationMenuContent>Noe annet innhold</NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Active Trigger

Både <NavigationMenuTrigger />, <NavigationMenuLink /> og <NavigationMenuLinkButton /> kan settes som active.

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuTrigger active>Trigger 1</NavigationMenuTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton active href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuTrigger>Trigger 2</NavigationMenuTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuTrigger>Trigger 3</NavigationMenuTrigger>
      <NavigationMenuContent>Noe annet innhold</NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Med lenker i triggers

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#">
        Trigger 1
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#2">
        Trigger 2
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton active href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#">
        Trigger 3
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>Noe annet innhold</NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Med knapp på slutten

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#">
        Trigger 1
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#2">
        Trigger 2
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkButton href="#">
        Knapp 1
      </NavigationMenuLinkButton>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkButton active href="#">
        Knapp 2
      </NavigationMenuLinkButton>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Hvis du bruker Next.js eller et annet rammeverk kan asChild brukes på <NavigationMenuLinkTrigger /> og <NavigationMenuLinkButton /> for å få riktige lenker.

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger asChild>
        <Link href="/komponenter/navigationmenu">Next-link som trigger link</Link>
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton asChild>
            <Link href="/komponenter/navigationmenu">Next-link som knapp</Link>
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2 (Ikke Next)
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#2">
        Trigger 2
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            Link 2
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Med ikoner

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuTrigger><EnergyIcon /> Trigger 1</NavigationMenuTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            <EnergyIcon /> Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            <EnergyIcon /> Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            <EnergyIcon /> Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#" active><EnergyIcon /> Trigger 2 (link)</NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        <Stack gap="sm">
          <NavigationMenuLinkButton href="#">
            <EnergyIcon /> Link 1
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            <EnergyIcon /> Link 2
          </NavigationMenuLinkButton>
          <NavigationMenuLinkButton href="#">
            <EnergyIcon /> Link 3
          </NavigationMenuLinkButton>
        </Stack>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger asChild>
        <Link href="/komponenter/navigationmenu"><EnergyIcon /> Next-link trigger</Link>
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent><EnergyIcon /> Noe annet innhold</NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Med valgfritt innhold

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuLinkTrigger href="#">
        Trigger
      </NavigationMenuLinkTrigger>
      <NavigationMenuContent>
        Her kan du putte hva du vil!
      </NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

På mørk bakgrunn

Hvis navigasjonsmenyen skal brukes på mørk bakgrunn kan man bruke data-color-mode-attributten på elementene i menyen for å styre lyst eller mørkt fargetema. Tema kan styres på alle elementene. I denne menyen er hovedbakgrunnsfargen mørk, mens bakgrunnsfargen på innholdet under trigger 2 og 3 er lyst.

<div style={{ background: "var(--color-background-secondary)", padding: "1rem" }}>
  <NavigationMenu data-color-scheme="light">
    <NavigationMenuList>
      <NavigationMenuItem>
        <NavigationMenuTrigger>Trigger 1</NavigationMenuTrigger>
        <NavigationMenuContent>
          <Stack gap="sm">
            <NavigationMenuLinkButton href="#">
              Link 1
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton active href="#">
              Link 2
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton href="#">
              Link 3
            </NavigationMenuLinkButton>
          </Stack>
        </NavigationMenuContent>
      </NavigationMenuItem>
      <NavigationMenuItem>
        <NavigationMenuTrigger active>Trigger 2</NavigationMenuTrigger>
        <NavigationMenuContent>
          <Stack gap="sm">
            <NavigationMenuLinkButton href="#">
              Link 1
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton active href="#">
              Link 2
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton href="#">
              Link 3
            </NavigationMenuLinkButton>
          </Stack>
        </NavigationMenuContent>
      </NavigationMenuItem>
      <NavigationMenuItem>
        <NavigationMenuTrigger>Trigger 3</NavigationMenuTrigger>
        <NavigationMenuContent data-color-scheme="dark"><Typography as="span" variant="text-s-light">Noe annet innhold</Typography></NavigationMenuContent>
      </NavigationMenuItem>
    </NavigationMenuList>
  </NavigationMenu>
</div>

Overstyring av stiler

Stilene til menyen kan overstyres ved hjelp av CSS variabler.

<div style={{ background: "var(--color-background-secondary)", padding: "1rem" }}>
  <NavigationMenu data-color-mode="dark" style={{ ["--navigation-menu-background"]: "pink", ["--navigation-menu-color"]: "green" }}>
    <NavigationMenuList>
      <NavigationMenuItem>
        <NavigationMenuTrigger>Trigger 1</NavigationMenuTrigger>
        <NavigationMenuContent>
          <Stack gap="sm">
            <NavigationMenuLinkButton href="#">
              Link 1
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton active href="#">
              Link 2
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton href="#">
              Link 3
            </NavigationMenuLinkButton>
          </Stack>
        </NavigationMenuContent>
      </NavigationMenuItem>
      <NavigationMenuItem>
        <NavigationMenuTrigger active>Trigger 2</NavigationMenuTrigger>
        <NavigationMenuContent data-color-mode="light">
          <Stack gap="sm">
            <NavigationMenuLinkButton href="#">
              Link 1
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton active href="#">
              Link 2
            </NavigationMenuLinkButton>
            <NavigationMenuLinkButton href="#">
              Link 3
            </NavigationMenuLinkButton>
          </Stack>
        </NavigationMenuContent>
      </NavigationMenuItem>
      <NavigationMenuItem>
        <NavigationMenuTrigger>Trigger 3</NavigationMenuTrigger>
        <NavigationMenuContent data-color-mode="light">Noe annet innhold</NavigationMenuContent>
      </NavigationMenuItem>
    </NavigationMenuList>
  </NavigationMenu>
</div>

Retningslinjer

NB! Når du bruker navigasjonsmenyen er det viktig at alle menyelementer wrappes i <NavigationMenuLink /> eller <NavigationMenuLinkButton /> for at tastaturnavigasjon og UU skal virke.

Kode

<NavigationMenu />

import { NavigationMenu } from "@aneo-org/design-react/clientComponents";

Inneholder alle elementer i en navigasjonsmeny. Inneholder ett eller flere <NavigationMenuItem />.

PropTypeBeskrivelse
childrenReactNode
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.
CSS variabelBeskrivelse
--navigation-menu-list-gapBrukes for å styre spacing mellom knapper i menyen.
--navigation-menu-colorStyrer tekstfargen på knapper.
--navigation-menu-color-hoverStyrer tekstfargen ved hover på knapper.
--navigation-menu-color-activeStyrer tekstfargen på aktive elementer.
--navigation-menu-backgroundStyrer bakgrunnsfargen på knapper.
--navigation-menu-background-hoverStyrer bakgrunnsfargen ved hover på knapper.
--navigation-menu-background-activeStyrer bakgrunnsfargen på aktive knapper.
--navigation-menu-content-backgroundStyrer bakgrunnsfargen på popover-menyen.

<NavigationMenuList />

import { NavigationMenuList } from "@aneo-org/design-react/clientComponents";

Inneholder ett eller flere <NavigationMenuItem />.

PropTypeBeskrivelse
childrenReactNode
className?string
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.

<NavigationMenuItem />

import { NavigationMenuItem } from "@aneo-org/design-react/clientComponents";

Inneholder enten

<NavigationMenuLink />/<NavigationMenuLinkButton />

eller en kombinasjon av

<NavigationMenuTrigger />/<NavigationMenuLinkTrigger /> samt <NavigationMenuContent

PropTypeBeskrivelse
childrenReactNode
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.

<NavigationMenuTrigger />

import { NavigationMenuTrigger } from "@aneo-org/design-react/clientComponents";

Viser en knapp som åpner innhold ved hover eller klikk.

PropTypeBeskrivelse
childrenReactNode
asChild?booleanBrukes hvis du vil rendre noe annet som innhold i triggeren. Elementet som er child må da rendre en knapp eller lenke.
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.

<NavigationMenuLinkTrigger />

import { NavigationMenuLinkTrigger } from "@aneo-org/design-react/clientComponents";

Er en kombinasjon av <NavigationMenuTrigger /> med en lenke inne i knappen.

PropTypeBeskrivelse
hrefstringHvor lenken skal peke. Påkrevd dersom ikke asChild brukes.
childrenReactNodeInnholdet i lenken. Typisk lenketeksten.
asChild?booleanBrukes hvis man vil rendre et annet element som lenke. For eksempel hvis man bruker Next.js eller andre rammeverk. Må spreade alle props som kommer inn, og rendre et klikkbart element.
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.

<NavigationMenuContent />

import { NavigationMenuContent } from "@aneo-org/design-react/clientComponents";

Innholdet som dukker opp når en trigger åpnes. Kan være hva som helst, men er typisk en liste av <NavigationMenuLink /> eller <NavigationMenuLinkButton />.

PropTypeBeskrivelse
childrenReactNode
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.

<NavigationMenuLinkButton />

import { NavigationMenuLinkButton } from "@aneo-org/design-react/clientComponents";

En navigasjonslenke som er ferdig stylet som en knapp. Bør brukes foran <NavigationMenuLink /> med mindre du har spesielle behov.

NB! Alle lenker i menyen må wrappes i enten denne eller <NavigationMenuLink /> for at menyen skal fungere.

PropTypeBeskrivelse
href?stringPåkrevd med mindre asChild brukes.
active?booleanBrukes for å indikere om lenken er aktiv eller ikke. Må settes på dette elementet selv om asChild brukes.
asChildbooleanBrukes hvis man vil rendre et annet element som lenke. For eksempel hvis man bruker Next.js.
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.
import { NavigationMenuLink } from "@aneo-org/design-react/clientComponents";

En navigasjonslenke.

NB! Alle lenker i menyen må wrappes i enten denne eller <NavigationMenuLinkButton /> for at menyen skal fungere.

PropTypeBeskrivelse
href?stringPåkrevd med mindre asChild brukes.
active?booleanBrukes for å indikere om lenken er aktiv eller ikke. Må settes på dette elementet selv om asChild brukes.
asChildbooleanBrukes hvis man vil rendre et annet element som lenke. For eksempel hvis man bruker Next.js.
Data attributtTypeBeskrivelse
[data-color-mode]"light" | "dark"Brukes for å styre fargemodusen til elementet og alle barn. Light betyr lys bakgrunn, dark betyr mørk bakgrunn.