Tabs
Cambia entre vistas con un indicador que se desliza hasta la pestaña activa, como control segmentado o con subrayado, y listas que se desplazan cuando desbordan.
Overview
Visitors are up 12% this week, mostly from search.
pnpm dlx shadcn@latest add https://hextaui.com/r/tabs.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/tabs.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Un indicador se desliza hasta la pestaña activa y se redimensiona para ajustarse a ella, mientras el contenido cambia al instante, de modo que cambiar con frecuencia nunca espera a una animación. El indicador se coloca antes de que la página se hidrate, así que nunca aparece de golpe al cargar.
Subrayado
variant="line" en TabsList desliza un subrayado en lugar de una píldora.
Muchas pestañas
Cuando las pestañas no caben, la lista se desplaza lateralmente, desvanece los bordes que tienen más por ver y desplaza la pestaña activa o enfocada hasta dejarla a la vista.
Muchas pestañas, segmentadas
El estilo pill se desplaza igual, manteniendo su pista mientras la pestaña elegida permanece a la vista.
Iconos y contadores
Pon iconos y badges dentro de los triggers.
Vertical
orientation="vertical" apila las pestañas; el subrayado pasa al lateral.
Deshabilitado
El teclado omite las pestañas deshabilitadas.
Controlado
Pasa value y onValueChange. Los cambios externos también deslizan el indicador.
De derecha a izquierda
Las pestañas, las flechas y el indicador siguen la dirección de lectura.
| Key | Acción |
|---|---|
| Tab | Entra en la lista sobre la pestaña activa y luego pasa al panel. |
| ←→ | Se mueve entre pestañas, dando la vuelta en los extremos. ↑ y ↓ en vertical. |
| HomeEnd | Va a la primera o a la última pestaña. |
| EnterSpace | Abre la pestaña enfocada. Define activateOnFocus en TabsList para abrir las pestañas a medida que se mueve el foco. |
- La lista es un
tablist; cada trigger es untabque controla sutabpanel. - Los paneles son enfocables, para que los usuarios de teclado puedan llegar a contenido que no tiene enlaces ni botones.
- Con movimiento reducido, el indicador salta en lugar de deslizarse.
| Prop | Tipo | Predeterminado |
|---|---|---|
value | any | – |
defaultValue | any | 0 |
onValueChange | (value, details) => void | – |
orientation | "horizontal" | "vertical" | "horizontal" |
| Atributo | Descripción |
|---|---|
data-activation-direction | "left", "right", "up" o "down": dónde está la nueva pestaña respecto a la anterior. |
| Prop | Tipo | Predeterminado |
|---|---|---|
variant | "default" | "line" | "default" |
activateOnFocus | boolean | false |
loopFocus | boolean | true |
| Atributo | Descripción |
|---|---|
data-slot="tabs-indicator" | La píldora o el subrayado deslizante. |
data-scrolled-start / data-scrolled-end | Presente cuando la lista puede desplazarse en esa dirección. |
--active-tab-left / --active-tab-width | Posición y tamaño de la pestaña activa, también -top y -height. |
| Prop | Tipo | Predeterminado |
|---|---|---|
value | any | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descripción |
|---|---|
data-active | La pestaña abierta. |
data-disabled | La pestaña está deshabilitada. |
| Prop | Tipo | Predeterminado |
|---|---|---|
value | any | – |
keepMountedMantiene el panel en el DOM mientras está oculto. | boolean | false |
- BreadcrumbUn rastro de enlaces hasta la página actual que se ajusta de forma segura, se refleja en diseños de derecha a izquierda y expande los segmentos colapsados en su lugar.
- Navigation menuNavegación del sitio con menús desplegables, o un panel de ancho completo que permanece abierto mientras su contenido se desliza entre menús.
- PaginationNavegación de páginas que mantiene cada botón en su sitio, se desliza hasta la página actual y salta a cualquier página desde los puntos suspensivos.
- SidebarUna barra lateral de la app que se contrae a iconos o fuera del lienzo, se mantiene fija bajo tu encabezado y se convierte en una hoja deslizable en móviles.
Usado en bloques
Bloques que se construyen sobre Tabs.