Navs and tabs
Documentación y ejemplos sobre cómo usar los componentes de navegación incluidos de Bootstrap.
😎 Esta traducción es parte del proyecto esdocu.com.
Base nav
La navegación disponible en Bootstrap comparte marcas y estilos generales, desde la clase base
.nav
hasta los estados active y disabled. Cambia las clases modificadoras para
cambiar entre cada estilo.
El componente base .nav
está construido con flexbox y proporciona una base sólida para construir
todo tipo de componentes de navegación. Incluyen algunas sobrescrituras de estilo (para trabajar con listas),
algo de padding de enlaces para áreas de acceso más grandes y estilo básico para disabled.
El componente base .nav
no incluye ningún estado .active
. Los siguientes ejemplos
incluyen la clase, principalmente para demostrar que esta clase en particular no activa ningún estilo
especial.
Para transmitir el estado activo a las tecnologías de asistencia, usa el atributo
aria-current
, usando el valor page
para la página actual, o true
para
el elemento actual en un conjunto.
<ul class="nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Las clases se utilizan en todo momento, por lo que tu marcado puede ser súper flexible. Usa
<ul>
s como arriba, <ol>
si el orden de tus elementos es importante, o
lanza el tuyo propio con un elemento <nav>
. Debido a que .nav
usa
display: flex
, los enlaces de navegación se comportan igual que los elementos de navegación, pero
sin el marcado adicional.
<nav class="nav">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
<a class="nav-link" href="#">Enlace</a>
<a class="nav-link" href="#">Enlace</a>
<a class="nav-link disabled">Deshabilitado</a>
</nav>
Estilos disponibles
Cambia el estilo del componente .nav
con modificadores y utilidades. Mezcla y combina según sea
necesario, o construye el tuyo propio.
Alineación horizontal
Cambia la alineación horizontal de tu navegación con flexbox utility. De forma predeterminada, los navegadores están alineados a la izquierda, pero puedes cambiarlos fácilmente para que estén alineados al centro o a la derecha.
Centrado con .justify-content-center
:
<ul class="nav justify-content-center">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Alineado a la derecha con .justify-content-end
:
<ul class="nav justify-content-end">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Vertical
Apila tu navegación cambiando la dirección del elemento flex con la utilidad .flex-column
.
¿Necesitas apilarlos en algos viewports pero no en otros? Usa las versiones responsive (por ejemplo,
.flex-sm-column
).
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Como siempre, la navegación vertical también es posible sin <ul>
s.
<nav class="nav flex-column">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
<a class="nav-link" href="#">Enlace</a>
<a class="nav-link" href="#">Enlace</a>
<a class="nav-link disabled">Deshabilitado</a>
</nav>
Tabs
Toma la navegación básica de arriba y agrega la clase .nav-tabs
para generar una interfaz con
pestañas. Úsalos para crear regiones tabulables con nuestro complemento de
JavaScript para pestañas.
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Pills
Toma ese mismo HTML, pero usa .nav-pills
en su lugar:
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Llena y justifica
Fuerza el contenido de tu .nav
para extender el ancho completo disponible en una de las dos
clases modificadoras. Para llenar proporcionalmente todo el espacio disponible con tus
.nav-item
s, usa .nav-fill
. Observa que todo el espacio horizontal está ocupado, pero
no todos los elementos de navegación tienen el mismo ancho.
<ul class="nav nav-pills nav-fill">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace de navegación mucho más largo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Al usar una navegación basada en <nav>
, puedes omitir con seguridad .nav-item
ya que solo se requiere .nav-link
para diseñar los elementos <a>
.
<nav class="nav nav-pills nav-fill">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
<a class="nav-link" href="#">Enlace de navegación mucho más largo</a>
<a class="nav-link" href="#">Enlace</a>
<a class="nav-link disabled">Deshabilitado</a>
</nav>
Para elementos de igual ancho, usa .nav-justified
. Todo el espacio horizontal estará ocupado por
enlaces de navegación, pero a diferencia del .nav-fill
anterior, cada elemento de navegación
tendrá el mismo ancho.
<ul class="nav nav-pills nav-justified">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace de navegación mucho más largo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Similar al ejemplo .nav-fill
usando una navegación basada en <nav>
.
<nav class="nav nav-pills nav-justified">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
<a class="nav-link" href="#">Enlace de navegación mucho más largo</a>
<a class="nav-link" href="#">Enlace</a>
<a class="nav-link disabled">Deshabilitado</a>
</nav>
Trabajar con utilidades flex
Si necesitas variaciones de navegación responsive, considera usar una serie de utilidades flexbox. Si bien son más detalladas, estas utilidades ofrecen una mayor personalización en los breakpoints responsive. En el ejemplo a continuación, nuestra navegación se apilará en el breakpoint más bajo, luego se adaptará a un diseño horizontal que llena el ancho disponible a partir del breakpoint pequeño (small).
<nav class="nav nav-pills flex-column flex-sm-row">
<a class="flex-sm-fill text-sm-center nav-link active" aria-current="page" href="#">Activo</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Enlace nav más largo</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Enlace</a>
<a class="flex-sm-fill text-sm-center nav-link disabled">Deshabilitado</a>
</nav>
En cuanto a la accesibilidad
Si estás utilizando navs para proporcionar una barra de navegación, asegúrate de agregar
role="navigation"
al contenedor principal más lógico de <ul>
, o ajusta un
elemento <nav>
alrededor de toda la navegación. No agregues el rol al propio
<ul>
, ya que esto evitaría que las tecnologías de asistencia lo anuncien como una lista
real.
Ten en cuenta que las barras de navegación, incluso si tienen un estilo visual como pestañas con la clase
.nav-tabs
, no deben recibir atributos role="tablist"
,
role="tab"
o role="tabpanel"
. Estos solo son apropiados para interfaces con pestañas
dinámicas, como se describe en las Prácticas de
creación WAI ARIA. Consulta Comportamiento de JavaScript para conocer las interfaces con pestañas
dinámicas en esta sección para ver un ejemplo. El atributo aria-current
no es necesario en las
interfaces con pestañas dinámicas ya que nuestro JavaScript
maneja el estado seleccionado agregando
aria-selected="true"
en la pestaña activa.
Uso de dropdowns
Agrega menús desplegables con un poco de HTML adicional y el complemento JavaScript de menús desplegables.
Tabs con dropdowns
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
<li><a class="dropdown-item" href="#">Algo más aquí</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Enlace separado</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Pills con dropdowns
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Activo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Acción</a></li>
<li><a class="dropdown-item" href="#">Otra acción</a></li>
<li><a class="dropdown-item" href="#">Algo más aquí</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Enlace separado</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Enlace</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Deshabilitado</a>
</li>
</ul>
Sass
Variables
$nav-link-padding-y: .5rem;
$nav-link-padding-x: 1rem;
$nav-link-font-size: null;
$nav-link-font-weight: null;
$nav-link-color: $link-color;
$nav-link-hover-color: $link-hover-color;
$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out;
$nav-link-disabled-color: $gray-600;
$nav-tabs-border-color: $gray-300;
$nav-tabs-border-width: $border-width;
$nav-tabs-border-radius: $border-radius;
$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color;
$nav-tabs-link-active-color: $gray-700;
$nav-tabs-link-active-bg: $body-bg;
$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg;
$nav-pills-border-radius: $border-radius;
$nav-pills-link-active-color: $component-active-color;
$nav-pills-link-active-bg: $component-active-bg;
Comportamiento de JavaScript
Usa el complemento JavaScript de
pestañas, inclúyelo
individualmente
o a través del archivo bootstrap.js
compilado, para ampliar nuestras pestañas (tabs) y píldoras
(pills) de navegación para crear paneles tabulados de contenido local.
Interfaces con pestañas dinámicas, como se describe en las Prácticas de creación WAI ARIA, requieren
role="tablist"
, role="tab"
, role="tabpanel"
y atributos
aria-
adicionales en orden para transmitir su estructura, funcionalidad y estado actual a los
usuarios de tecnologías de asistencia (como los lectores de pantalla). Como práctica recomendada, recomendamos
usar elementos <button>
para las pestañas, ya que estos son controles que activan un cambio
dinámico, en lugar de enlaces que navegan a una nueva página o ubicación.
Este es un contenido placeholder asociado a la pestaña Inicio. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases para controlar
la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier otra
navegación basada en .nav
.
Este es un contenido placeholder asociado a la pestaña Perfil. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases para controlar
la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier otra
navegación basada en .nav
.
Este es un contenido placeholder asociado a la pestaña Contacto. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases para controlar
la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier otra
navegación basada en .nav
.
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Inicio</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Perfil</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contacto</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
<div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
<div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">...</div>
</div>
Para ayudar a satisfacer tus necesidades, esto funciona con el marcado basado en <ul>
,
como se muestra arriba, o con cualquier marcado arbitrario “Lanza el tuyo propio”. Ten en cuenta que si estás
utilizando <nav>
, no debes agregar role="tablist"
directamente, ya que esto
sobrescribiría el rol nativo del elemento como punto de referencia de navegación. En su lugar, cambia a un
elemento alternativo (en el ejemplo a continuación, un simple <div>
) y envuélvelo con
<nav>
.
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Inicio</button>
<button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Perfil</button>
<button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contacto</button>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
<div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">...</div>
<div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">...</div>
<div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">...</div>
</div>
El complemento de pestañas (tabs) también funciona con pastillas (pills).
Este es un contenido placeholder asociado a la pestaña Inicio. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases para controlar
la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier otra
navegación basada en .nav
.
Este es un contenido placeholder asociado a la pestaña Perfil. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases para controlar
la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier otra
navegación basada en .nav
.
Este es un contenido placeholder asociado a la pestaña Contacto. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases para controlar
la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier otra
navegación basada en .nav
.
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Inicio</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Perfil</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="pills-contact-tab" data-bs-toggle="pill" data-bs-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contacto</button>
</li>
</ul>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">...</div>
<div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab">...</div>
<div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab">...</div>
</div>
Y con pastillas verticales.
Este es un contenido placeholder asociado a la pestaña Inicio. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases
para
controlar la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier
otra navegación basada en .nav
.
Este es un contenido placeholder asociado a la pestaña Perfil. Al hacer clic en otra
pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases
para
controlar la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier
otra navegación basada en .nav
.
Este es un contenido placeholder asociado a la pestaña Mensajes. Al hacer clic en
otra pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña JavaScript
intercambia clases
para
controlar la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier
otra navegación basada en .nav
.
Este es un contenido placeholder asociado a la pestaña Configuración. Al hacer clic
en otra pestaña, se cambiará la visibilidad de esta para la siguiente. La pestaña
JavaScript intercambia clases
para
controlar la visibilidad y el estilo del contenido. Puedes usarlo con pestañas, píldoras y cualquier
otra navegación basada en .nav
.
<div class="d-flex align-items-start">
<div class="nav flex-column nav-pills me-3" id="v-pills-tab" role="tablist" aria-orientation="vertical">
<button class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" data-bs-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Inicio</button>
<button class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" data-bs-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Perfil</button>
<button class="nav-link" id="v-pills-messages-tab" data-bs-toggle="pill" data-bs-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Mensajes</button>
<button class="nav-link" id="v-pills-settings-tab" data-bs-toggle="pill" data-bs-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Configuración</button>
</div>
<div class="tab-content" id="v-pills-tabContent">
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">...</div>
<div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab">...</div>
<div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab">...</div>
<div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab">...</div>
</div>
</div>
Uso de atributos de datos
Puedes activar la navegación por pestañas o píldoras sin escribir JavaScript simplemente especificando
data-bs-toggle="tab"
o data-bs-toggle="pill"
en un elemento. Utiliza estos
atributos
de datos en .nav-tabs
o .nav-pills
.
<!-- Nav tabs -->
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Inicio</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Perfil</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="messages-tab" data-bs-toggle="tab" data-bs-target="#messages" type="button" role="tab" aria-controls="messages" aria-selected="false">Mensajes</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">Configuración</button>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div class="tab-pane active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
<div class="tab-pane" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
<div class="tab-pane" id="messages" role="tabpanel" aria-labelledby="messages-tab">...</div>
<div class="tab-pane" id="settings" role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
A través de JavaScript
Habilita las pestañas que se pueden tabular a través de JavaScript (cada pestaña debe activarse individualmente):
var triggerTabList = Array.prototype.slice.call(document.querySelectorAll('#myTab button'))
triggerTabList.forEach(function (triggerEl) {
var tabTrigger = new bootstrap.Tab(triggerEl)
triggerEl.addEventListener('click', function (event) {
event.preventDefault()
tabTrigger.show()
})
})
Puedes activar pestañas individuales de varias maneras:
var triggerEl = document.querySelector('#myTab button[data-bs-target="#profile"]')
bootstrap.Tab.getInstance(triggerEl).show() // Seleccionar pestaña por nombre
var triggerFirstTabEl = document.querySelector('#myTab li:first-child button')
bootstrap.Tab.getInstance(triggerFirstTabEl).show() // Seleccionar la primera pestaña
Efecto fade
Para hacer que las pestañas aparezcan gradualmente, agrega .fade
a cada .tab-pane
.
El primer panel de pestañas también debe tener .show
para que el contenido inicial sea visible.
<div class="tab-content">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
<div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
<div class="tab-pane fade" id="messages" role="tabpanel" aria-labelledby="messages-tab">...</div>
<div class="tab-pane fade" id="settings" role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
Métodos
Transiciones y métodos asíncronos
Todos los métodos de la API son asincrónicos e inician una transition. Regresan al lugar donde se realizó la llamada tan pronto como se inicia la transición, pero antes de que finalice. Además, se ignorará una llamada de método en un componente en medio de una transición.
Consulte nuestra documentación de JavaScript para obtener más información.
constructor
Activa un elemento de pestaña y un contenedor de contenido. La pestaña debe tener un
data-bs-target
o, si usa un enlace, un atributo href
, apuntando a un nodo contenedor
en el DOM.
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Inicio</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Perfil</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="messages-tab" data-bs-toggle="tab" data-bs-target="#messages" type="button" role="tab" aria-controls="messages" aria-selected="false">Mensajes</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">Configuración</button>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
<div class="tab-pane" id="profile" role="tabpanel" aria-labelledby="profile-tab">...</div>
<div class="tab-pane" id="messages" role="tabpanel" aria-labelledby="messages-tab">...</div>
<div class="tab-pane" id="settings" role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
<script>
var firstTabEl = document.querySelector('#myTab li:last-child button')
var firstTab = new bootstrap.Tab(firstTabEl)
firstTab.show()
</script>
show
Selecciona la pestaña dada y muestra su panel asociado. Cualquier otra pestaña que se haya seleccionado
previamente se deselecciona y su panel asociado se oculta. Regresa a la persona que llama antes de que
se muestre realmente el panel de pestañas (es decir, antes de que ocurra el evento
shown.bs.tab
).
var someTabTriggerEl = document.querySelector('#someTabTrigger')
var tab = new bootstrap.Tab(someTabTriggerEl)
tab.show()
dispose
Destruye la pestaña de un elemento.
getInstance
Método estático que te permite obtener la instancia de pestaña asociada con un elemento DOM
var triggerEl = document.querySelector('#trigger')
var tab = bootstrap.Tab.getInstance(triggerEl) // Devuelve una instancia de pestaña Bootstrap
getOrCreateInstance
Método estático que te permite obtener la instancia de pestaña asociada con un elemento DOM, o crear una nueva en caso de que no se haya inicializado
var triggerEl = document.querySelector('#trigger')
var tab = bootstrap.Tab.getOrCreateInstance(triggerEl) // Devuelve una instancia de pestaña Bootstrap
Eventos
Al mostrar una nueva pestaña, los eventos se activan en el siguiente orden:
hide.bs.tab
(en la pestaña activa actual)show.bs.tab
(en la pestaña que se mostrará)hidden.bs.tab
(en la pestaña activa anterior, la misma que para el eventohide.bs.tab
)shown.bs.tab
(en la pestaña recientemente activa recién mostrada, la misma que para el eventoshow.bs.tab
)
Si ninguna pestaña estaba activa, los eventos hide.bs.tab
y hidden.bs.tab
no se
activarán.
Tipo de evento | Descripción |
---|---|
show.bs.tab |
Este evento se activa al mostrar la pestaña, pero antes de que se muestre la nueva pestaña. Usa
event.target y event.relatedTarget para referenciar la pestaña activa y la
pestaña activa anterior (si está disponible) respectivamente.
|
shown.bs.tab |
Este evento se activa en la presentación de pestañas después de que se haya mostrado una pestaña. Usa
event.target y event.relatedTarget para referenciar la pestaña activa y la
pestaña activa anterior (si está disponible) respectivamente.
|
hide.bs.tab |
Este evento se activa cuando se debe mostrar una nueva pestaña (y, por lo tanto, se debe ocultar la
pestaña activa anterior). Utiliza event.target y event.relatedTarget para
referenciar la pestaña activa actual y la nueva pestaña que pronto estará activa, respectivamente. |
hidden.bs.tab |
Este evento se activa después de que se muestra una nueva pestaña (y, por lo tanto, la pestaña activa
anterior está oculta). Utiliza event.target y event.relatedTarget para
referenciar la pestaña activa anterior y la pestaña activa nueva, respectivamente. |
var tabEl = document.querySelector('button[data-bs-toggle="tab"]')
tabEl.addEventListener('shown.bs.tab', function (event) {
event.target // pestaña recién activada
event.relatedTarget // pestaña activa anterior
})
😎 Esta traducción es parte del proyecto esdocu.com.