# Tabs

> Pestañas estándar, pill, con íconos, verticales y deshabilitada.

Categoría: Navegación · Solar v0.8.0

Usa este HTML tal cual, con Tailwind y ccs-tailwind-config.js cargados (ver https://utiliza.me/solar/instalacion.html).

## Guía: Cuándo usarlo

- Para vistas del mismo nivel dentro de una página, que se ven una a la vez.
- Si cada opción lleva a otra página, es navegación (Menús, Sidebar), no pestañas.
- Estándar para contenido; Pill para filtrar una lista; Verticales cuando hay más de 5 o 6 secciones o los nombres son largos, como en una configuración.
- Íconos solo si ayudan a reconocer cada sección: siempre con texto, nunca solos.

## Tabs estándar

```html
<div class="rounded-ccs border border-ccs-line bg-white dark:border-ccs-dark-line dark:bg-ccs-dark-surface">
  <div role="tablist" aria-label="Comité" class="flex items-center gap-1 overflow-x-auto px-3 border-b border-ccs-line dark:border-ccs-dark-line"><button type="button" role="tab" id="tabs-std-tab-1" aria-selected="true" aria-controls="tabs-std-panel" class="shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-blue border-b-2 border-ccs-blue dark:text-ccs-dark-accent dark:border-ccs-dark-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Resumen</button><button type="button" role="tab" id="tabs-std-tab-2" aria-selected="false" aria-controls="tabs-std-panel" tabindex="-1" class="shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-slate border-b-2 border-transparent hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Integrantes</button><button type="button" role="tab" id="tabs-std-tab-3" aria-selected="false" aria-controls="tabs-std-panel" tabindex="-1" class="shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-slate border-b-2 border-transparent hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Documentos <span class="ml-1 px-1.5 py-0.5 rounded-full text-xs bg-ccs-bg text-ccs-slate dark:text-ccs-dark-text-2 dark:bg-ccs-dark-overlay">12</span></button><button type="button" role="tab" id="tabs-std-tab-4" aria-selected="false" aria-controls="tabs-std-panel" tabindex="-1" class="shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-slate border-b-2 border-transparent hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Actividad</button></div>
  <div role="tabpanel" id="tabs-std-panel" aria-labelledby="tabs-std-tab-1" tabindex="0" class="p-6 text-sm text-ccs-slate leading-relaxed dark:text-ccs-dark-text-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">El Comité reúne a representantes del sector para definir lineamientos, articular propuestas y desarrollar iniciativas conjuntas.</div>
</div>
```

## Pill tabs

```html
<div>
  <div role="tablist" aria-label="Tipo de contenido" class="inline-flex max-w-full items-center gap-2 overflow-x-auto rounded-full bg-ccs-bg p-1 dark:bg-ccs-dark-overlay"><button type="button" role="tab" id="tabs-pill-tab-1" aria-selected="true" aria-controls="tabs-pill-panel" class="shrink-0 whitespace-nowrap px-4 h-9 text-sm font-medium rounded-full bg-white text-ccs-ink shadow-ccs-sm dark:text-ccs-dark-text dark:bg-ccs-dark-surface focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Todos</button><button type="button" role="tab" id="tabs-pill-tab-2" aria-selected="false" aria-controls="tabs-pill-panel" tabindex="-1" class="shrink-0 whitespace-nowrap px-4 h-9 text-sm font-medium rounded-full text-ccs-slate hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Eventos</button><button type="button" role="tab" id="tabs-pill-tab-3" aria-selected="false" aria-controls="tabs-pill-panel" tabindex="-1" class="shrink-0 whitespace-nowrap px-4 h-9 text-sm font-medium rounded-full text-ccs-slate hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Estudios</button><button type="button" role="tab" id="tabs-pill-tab-4" aria-selected="false" aria-controls="tabs-pill-panel" tabindex="-1" class="shrink-0 whitespace-nowrap px-4 h-9 text-sm font-medium rounded-full text-ccs-slate hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Noticias</button></div>
  <div role="tabpanel" id="tabs-pill-panel" aria-labelledby="tabs-pill-tab-1" class="sr-only">Todos los contenidos</div>
</div>
```

## Con íconos

```html
<div class="rounded-ccs border border-ccs-line bg-white dark:border-ccs-dark-line dark:bg-ccs-dark-surface">
  <div role="tablist" aria-label="Comité" class="flex items-center gap-1 overflow-x-auto px-3 border-b border-ccs-line dark:border-ccs-dark-line"><button type="button" role="tab" id="tabs-ico-tab-1" aria-selected="true" aria-controls="tabs-ico-panel" class="inline-flex items-center gap-2 shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-blue border-b-2 border-ccs-blue dark:text-ccs-dark-accent dark:border-ccs-dark-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent"><iconify-icon icon="solar:document-text-bold" class="shrink-0 text-[18px]" aria-hidden="true"></iconify-icon>Resumen</button><button type="button" role="tab" id="tabs-ico-tab-2" aria-selected="false" aria-controls="tabs-ico-panel" tabindex="-1" class="inline-flex items-center gap-2 shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-slate border-b-2 border-transparent hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent"><iconify-icon icon="solar:users-group-rounded-outline" class="shrink-0 text-[18px]" aria-hidden="true"></iconify-icon>Integrantes</button><button type="button" role="tab" id="tabs-ico-tab-3" aria-selected="false" aria-controls="tabs-ico-panel" tabindex="-1" class="inline-flex items-center gap-2 shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-slate border-b-2 border-transparent hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent"><iconify-icon icon="solar:folder-outline" class="shrink-0 text-[18px]" aria-hidden="true"></iconify-icon>Documentos</button><button type="button" role="tab" id="tabs-ico-tab-4" aria-selected="false" aria-controls="tabs-ico-panel" tabindex="-1" class="inline-flex items-center gap-2 shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-slate border-b-2 border-transparent hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent"><iconify-icon icon="solar:history-outline" class="shrink-0 text-[18px]" aria-hidden="true"></iconify-icon>Actividad</button></div>
  <div role="tabpanel" id="tabs-ico-panel" aria-labelledby="tabs-ico-tab-1" tabindex="0" class="p-6 text-sm text-ccs-slate leading-relaxed dark:text-ccs-dark-text-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">El Comité reúne a representantes del sector para definir lineamientos, articular propuestas y desarrollar iniciativas conjuntas.</div>
</div>
```

## Verticales

```html
<div class="rounded-ccs border border-ccs-line bg-white dark:border-ccs-dark-line dark:bg-ccs-dark-surface grid gap-3 p-3 sm:grid-cols-[12rem_1fr]">
  <div role="tablist" aria-label="Preferencias" aria-orientation="vertical" class="flex flex-col gap-1 border-b border-ccs-line pb-3 sm:border-b-0 sm:border-r sm:pb-0 sm:pr-3 dark:border-ccs-dark-line"><button type="button" role="tab" id="tabs-ver-tab-1" aria-selected="true" aria-controls="tabs-ver-panel" class="flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm font-semibold bg-ccs-bg text-ccs-blue dark:bg-ccs-dark-overlay dark:text-ccs-dark-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent dark:focus-visible:ring-offset-ccs-dark-bg"><iconify-icon icon="solar:user-bold" class="shrink-0 text-[20px]" aria-hidden="true"></iconify-icon>Cuenta</button><button type="button" role="tab" id="tabs-ver-tab-2" aria-selected="false" aria-controls="tabs-ver-panel" tabindex="-1" class="flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm font-medium text-ccs-ink hover:bg-ccs-bg dark:text-ccs-dark-text dark:hover:bg-ccs-dark-overlay focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent dark:focus-visible:ring-offset-ccs-dark-bg"><iconify-icon icon="solar:bell-outline" class="shrink-0 text-[20px]" aria-hidden="true"></iconify-icon>Notificaciones</button><button type="button" role="tab" id="tabs-ver-tab-3" aria-selected="false" aria-controls="tabs-ver-panel" tabindex="-1" class="flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm font-medium text-ccs-ink hover:bg-ccs-bg dark:text-ccs-dark-text dark:hover:bg-ccs-dark-overlay focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent dark:focus-visible:ring-offset-ccs-dark-bg"><iconify-icon icon="solar:settings-outline" class="shrink-0 text-[20px]" aria-hidden="true"></iconify-icon>Configuración</button></div>
  <div role="tabpanel" id="tabs-ver-panel" aria-labelledby="tabs-ver-tab-1" tabindex="0" class="p-3 text-sm text-ccs-slate leading-relaxed dark:text-ccs-dark-text-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent"><h3 class="text-base font-semibold text-ccs-ink dark:text-ccs-dark-text">Cuenta</h3><p class="mt-1">Tu nombre, correo y empresa. Los cambios se guardan al presionar Guardar.</p></div>
</div>
```

## Pestaña deshabilitada

```html
<div class="rounded-ccs border border-ccs-line bg-white dark:border-ccs-dark-line dark:bg-ccs-dark-surface">
  <div role="tablist" aria-label="Comité" class="flex items-center gap-1 overflow-x-auto px-3 border-b border-ccs-line dark:border-ccs-dark-line"><button type="button" role="tab" id="tabs-dis-tab-1" aria-selected="true" aria-controls="tabs-dis-panel" class="shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-blue border-b-2 border-ccs-blue dark:text-ccs-dark-accent dark:border-ccs-dark-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Resumen</button><button type="button" role="tab" id="tabs-dis-tab-2" aria-selected="false" aria-controls="tabs-dis-panel" tabindex="-1" class="shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-slate border-b-2 border-transparent hover:text-ccs-ink dark:text-ccs-dark-text-2 dark:hover:text-ccs-dark-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">Integrantes</button><button type="button" role="tab" id="tabs-dis-tab-3" aria-selected="false" aria-disabled="true" disabled class="shrink-0 whitespace-nowrap px-4 py-3 text-sm font-medium text-ccs-line-strong border-b-2 border-transparent cursor-not-allowed dark:text-ccs-dark-line-strong">Votaciones</button></div>
  <div role="tabpanel" id="tabs-dis-panel" aria-labelledby="tabs-dis-tab-1" tabindex="0" class="p-6 text-sm text-ccs-slate leading-relaxed dark:text-ccs-dark-text-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ccs-blue dark:focus-visible:ring-ccs-dark-accent">El Comité reúne a representantes del sector para definir lineamientos, articular propuestas y desarrollar iniciativas conjuntas.</div>
</div>
```

## Guía: Comportamiento

Solar no entrega JavaScript: lo que sigue es lo que tu proyecto tiene que hacer al cambiar de pestaña.

- Teclado: Tab entra a la pestaña activa y sale al panel. Entre pestañas se mueve con las flechas (izquierda y derecha; arriba y abajo en las verticales), y con Inicio y Fin a la primera y la última. Por eso solo la activa queda en el orden de Tab y las demás llevan tabindex="-1".
- Al cambiar: la nueva pestaña pasa a aria-selected="true" y toma el estilo activo, y el panel muestra su contenido.
- Deshabilitada: se ve, pero no se elige ni recibe foco; las flechas la saltan. Úsala si la sección existe pero hoy no está disponible; si no aplica, mejor no mostrarla.
- En el celular: si las pestañas no caben, la fila se desplaza de lado; no se achican ni se cortan los nombres.
- Con íconos: ícono de contorno en las pestañas y relleno en la activa, para que el estado no dependa solo del color.

## Guía: Accesibilidad

La fila lleva role="tablist" con un nombre (aria-label); cada pestaña, role="tab", aria-selected y aria-controls; el panel, role="tabpanel" y aria-labelledby. Las verticales suman aria-orientation="vertical". Los íconos van con aria-hidden="true", porque el texto ya nombra la pestaña.
