Ir al contenido
Navegación

Navbar

La barra global de la home de iCloud: fija a todo el ancho, 44 de alto, translúcida con desenfoque sobre el contenido que pasa por abajo.

import { Navbar, NavbarContent } from "sebs7n-ui/navbar"

Ejemplos

La barra global

La barra global de la home de iCloud: a todo el ancho, 44 de alto, translúcida con desenfoque y con el borde abajo desde el principio. Scrolleá dentro del recuadro: el contenido pasa por debajo, desenfocado, y la barra no cambia. Sobre el wallpaper (`data-ambient`) usa un fill más liviano, para que el wallpaper se vea a través.

import { Button } from "sebs7n-ui/button"
import { Navbar, NavbarContent } from "sebs7n-ui/navbar"
import { NavbarLink } from "sebs7n-ui/navbar-link"
import { UserIcon } from "lucide-react"

function Variantes() {
  return (
    <div className="relative h-56 w-full overflow-y-auto rounded-surface border border-separator bg-background">
      <Navbar>
        <NavbarContent>
          <span className="text-title-3 text-label">
            Marca <span className="text-brand-900">Docs</span>
          </span>
          <nav aria-label="Demo de la barra" className="flex items-center gap-1">
            <NavbarLink active href="#ejemplos">
              Facturas
            </NavbarLink>
            <NavbarLink href="#ejemplos">Ayuda</NavbarLink>
            <Button aria-label="Cuenta" size="icon-md" variant="ghost">
              <UserIcon />
            </Button>
          </nav>
        </NavbarContent>
      </Navbar>
      <div className="flex flex-col gap-3 p-6">
        {Array.from({ length: 8 }, (_, i) => (
          <div className="h-10 rounded-control bg-fill-1" key={i} />
        ))}
      </div>
    </div>
  )
}

En la columna del sitio

`maxWidth`: la barra sigue a todo el ancho y su contenido se centra en la columna de la página, alineado con los bloques de abajo.

import { Navbar, NavbarContent } from "sebs7n-ui/navbar"
import { NavbarLink } from "sebs7n-ui/navbar-link"

function Column() {
  return (
    <div className="relative h-56 w-full overflow-y-auto rounded-surface border border-separator bg-background">
      <Navbar>
        <NavbarContent maxWidth={480}>
          <span className="text-title-3 text-label">Facturación</span>
          <NavbarLink href="#ejemplos">Precios</NavbarLink>
        </NavbarContent>
      </Navbar>
      <div className="mx-auto flex max-w-[480px] flex-col gap-3 px-4 py-6">
        {Array.from({ length: 6 }, (_, i) => (
          <div className="h-10 rounded-control bg-fill-1" key={i} />
        ))}
      </div>
    </div>
  )
}

Props

Generadas del TypeScript del paquete. Las propias del componente, más las heredadas del primitivo que tienen algo que explicar —marcadas «heredada de Base UI»—. El resto está en la línea «hereda de».

Navbar

Hereda las props de <header>.

PropTipoPor defectoDescripción
position"sticky" | "fixed""sticky"sticky (default) ocupa su alto; fixed se superpone al contenido.
scrollThresholdnumber12Cuántos px de scroll prenden data-scrolled. La barra no cambia: es para quien quiera cambiar algo al bajar.
surfaceClassNamestring—Clases de la caja con fondo.
variant"bar"—Obsoleta: bar se acepta y no hace nada (se borra en 3.0). floating se fue.
classNamestring—Se fusiona con las clases del componente vía cn() (tailwind-merge): lo que pongas gana.

NavbarContent

Hereda las props de <div>.

PropTipoPor defectoDescripción
maxWidthnumber | string—El ancho de la columna del sitio (1448, "80rem"): la barra sigue a todo el ancho y su contenido se centra en esa columna, alineado con los bloques de abajo.
styleCSSProperties—Se suma al maxWidth de la columna; lo que pongas gana.
classNamestring—Se fusiona con las clases del componente vía cn() (tailwind-merge): lo que pongas gana.

Teclado

Tab
Recorre los links y botones de adentro. La barra en sí no recibe foco.

Accesibilidad

  • Es un <header> (landmark banner cuando está en el body). La navegación de adentro va en un <nav> con aria-label propio.
  • Es translúcida (material-translucent). Fuera del wallpaper lleva un fill más denso (--sf-translucent-bar, 88 %): el texto y el secundario llegan a 4,5:1 aunque debajo pase blanco o negro puro, en los dos temas. Sobre el wallpaper (data-ambient) usa el de material-translucent, y el texto llega a 4,5:1 sobre cualquier punto del wallpaper. Con prefers-reduced-transparency o prefers-contrast: more es la barra opaca (surface-header).

Reglas de uso

  • NavbarContent termina a 16 del borde, como empieza: un avatar, un segmentado o un botón de texto al final no quedan pegados. Si lo último es un botón de ícono (size="icon-*"), a 10, y su aire completa los 16 hasta el glifo. Lo mismo las barras de AppShell. Una segunda fila con Toolbar variant="plain" adentro del Navbar lleva 4 de cada lado, así el texto de sus botones queda alineado. maxWidth centra el contenido en la columna del sitio.
  • Una sola barra, como iCloud: a todo el ancho y sin cápsula. La píldora flotante de 1.x se fue en 2.0.
  • Los links de la barra son NavbarLink (sebs7n-ui/navbar-link), no botones ghost: texto label-secondary que pasa a label —más blanco en oscuro— con el puntero y en la página actual (active, que pone aria-current). El CTA («Ingresar», «Crear cuenta») sí es un Button, con el acento. Para un control de ícono con el mismo color, navbarLinkClassName({ icon: true }).
  • position="fixed" cuando el hero tiene que llegar hasta el borde de arriba; sticky (el default) en todo lo demás, para que el contenido no quede tapado.
  • Una sola fila de 44px (NavbarContent, 0 6px 0 16px): la marca a la izquierda, botones de ícono de 36 y un avatar de 28 a la derecha.
  • Dentro de un AppShell no va: la barra global es su prop header, opaca adentro de una app (como Mail o Drive, donde el contenido scrollea adentro de los paneles, no debajo de la barra) y translúcida sobre el wallpaper (AppShell ambient).

Relacionados