Breadcrumb
BetaMuestra dónde está la persona dentro de la jerarquía del sitio y le deja subir de nivel.
Abrir en Figma
registry/ds/breadcrumb.tsximport { Breadcrumb, BreadcrumbItem } from "@/registry/ds/breadcrumb";
import { Home } from "@/registry/ds/icons";
export default function BreadcrumbBasic() {
return (
<Breadcrumb>
<BreadcrumbItem href="#" separator={false} icon={<Home />}>Inicio</BreadcrumbItem>
<BreadcrumbItem href="#">Carreras</BreadcrumbItem>
<BreadcrumbItem href="#">Ingeniería</BreadcrumbItem>
<BreadcrumbItem current>Plan de estudios</BreadcrumbItem>
</Breadcrumb>
);
}Cuándo usarlo
Cuando el sitio tiene tres o más niveles y la persona puede llegar a una página profunda desde afuera (un buscador, un link). Es navegación secundaria: acompaña al menú, no lo reemplaza.
- Refleja la jerarquía del sitio, no el historial de navegación.
- Arranca en Inicio y termina en la página actual, que no es link.
- Va arriba del título de la página, una sola vez.
- No lo uses en sitios planos ni dentro de flujos (checkout, inscripción).
Rutas largas y tamaños
Con más de cuatro niveles, colapsá los del medio: siempre quedan visibles el primero y los dos últimos.
import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem } from "@/registry/ds/breadcrumb";
export default function BreadcrumbCollapsed() {
return (
<div className="flex flex-col items-start gap-5">
<Breadcrumb size="sm" label="Ruta, chica">
<BreadcrumbItem href="#" separator={false}>Inicio</BreadcrumbItem>
<BreadcrumbEllipsis />
<BreadcrumbItem href="#">Ingeniería</BreadcrumbItem>
<BreadcrumbItem current>Plan de estudios</BreadcrumbItem>
</Breadcrumb>
<Breadcrumb size="lg" label="Ruta, grande">
<BreadcrumbItem href="#" separator={false}>Inicio</BreadcrumbItem>
<BreadcrumbItem href="#">Carreras</BreadcrumbItem>
<BreadcrumbItem current>Ingeniería</BreadcrumbItem>
</Breadcrumb>
</div>
);
}Contenido
- Cada nivel usa el título real de la página a la que lleva.
- Si un título es muy largo, truncalo con elipsis; nunca lo reescribas.
Medidas
| Size | Texto | Icono / separador | Gap |
|---|---|---|---|
sm | Text xs | 14 | 6 |
md | Text sm | 16 | 8 |
lg | Text md | 20 | 8 |
Tokens
| Parte | Propiedad | Token |
|---|---|---|
| Link | Color → hover | text/subtle |
| Link · hover | Color | text/muted |
| Página actual | Color · Medium | text/default |
| Separador | Color | border/default |
| Elipsis | Color | text/subtle |
| Foco | Anillo 2 px | focus/ring |
En Figma
| Propiedad en Figma | Valores | En código | Nota |
|---|---|---|---|
| Breadcrumb › Size | sm · md · lg | size | — |
| .Breadcrumb item › Type | Link · Current · Ellipsis | href · current · <BreadcrumbEllipsis /> | — |
| Icon (+ swap) | on/off · icono | icon | — |
| Label | Texto | children | — |
Instalación
npx shadcn@latest add https://polen.cdc.cool/r/breadcrumb.jsonPlayground
Configurá el componente y copiá el snippet: se genera del mismo estado que renderiza el preview.
size
Niveles
<Breadcrumb>
<BreadcrumbItem href="#" separator={false}>Inicio</BreadcrumbItem>
<BreadcrumbItem href="#">Carreras</BreadcrumbItem>
<BreadcrumbItem href="#">Ingeniería</BreadcrumbItem>
<BreadcrumbItem current>Plan de estudios</BreadcrumbItem>
</Breadcrumb>Props
| Prop | Tipo | Default | Descripción |
|---|---|---|---|
Breadcrumb · size | "sm" | "md" | "lg" | "md" | Tipografía e iconos. |
Breadcrumb · label | string | "Ruta de navegación" | Nombre accesible del nav. |
BreadcrumbItem · href | string | — | Destino del nivel. |
BreadcrumbItem · current | boolean | — | Página actual: sin link, con aria-current. |
BreadcrumbItem · icon | ReactNode | — | Típicamente la casa en Inicio. |
BreadcrumbItem · separator | boolean | true | false en el primer nivel. |
BreadcrumbEllipsis · onClick | () => void | — | Si se pasa, es un botón para abrir los niveles ocultos. |
Con Next.js, pasá tu Link por composición: el item acepta todos los
atributos de <a>.
- Es un
<nav>con nombre propio y una lista ordenada: el lector de pantalla anuncia "Ruta de navegación, lista de 4 elementos". - La página actual lleva
aria-current="page". - Los separadores son decorativos (
aria-hidden). - Si hay otro
<nav>en la página, cada uno necesita suaria-labeldistinto. - En mobile, preferí mostrar solo el nivel anterior ("← Carreras").