Acordeón
Construye acordeones que se colapsan verticalmente en combinación con nuestro plugin de JavaScript Collapse.
Cómo funciona
El acordeón utiliza collapse internamente para hacerlo colapsable.
El efecto de animación de este componente depende de la consulta de medios prefers-reduced-motion. Consulta la sección de movimiento reducido en nuestra documentación de accesibilidad.
Ejemplo
Haz clic en los acordeones a continuación para expandir o colapsar el contenido del acordeón.
Para renderizar un acordeón que esté expandido por defecto:
- añade la clase
.showal elemento.accordion-collapse. - quita la clase
.collapseddel elemento.accordion-buttony establece su atributoaria-expandedentrue.
.accordion-body, aunque la transición limita el desbordamiento.
.accordion-body, aunque la transición limita el desbordamiento.
.accordion-body, aunque la transición limita el desbordamiento.
<div class="accordion" id="accordionExample">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Elemento de acordeón #1
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse show" data-bs-parent="#accordionExample">
<div class="accordion-body">
<strong>Este es el cuerpo del acordeón del primer elemento.</strong> Se muestra por defecto, hasta que el plugin de colapso añade las clases apropiadas que utilizamos para dar estilo a cada elemento. Estas clases controlan la apariencia general, así como el mostrar y ocultar mediante transiciones CSS. Puedes modificar cualquier parte de esto con CSS personalizado o anulando nuestras variables predeterminadas. También vale la pena señalar que casi cualquier HTML puede ir dentro de <code>.accordion-body</code>, aunque la transición limita el desbordamiento.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Elemento de acordeón #2
</button>
</h2>
<div id="collapseTwo" class="accordion-collapse collapse" data-bs-parent="#accordionExample">
<div class="accordion-body">
<strong>Este es el cuerpo del acordeón del segundo elemento.</strong> Está oculto por defecto, hasta que el plugin de colapso añade las clases apropiadas que utilizamos para dar estilo a cada elemento. Estas clases controlan la apariencia general, así como el mostrar y ocultar mediante transiciones CSS. Puedes modificar cualquier parte de esto con CSS personalizado o anulando nuestras variables predeterminadas. También vale la pena señalar que casi cualquier HTML puede ir dentro de <code>.accordion-body</code>, aunque la transición limita el desbordamiento.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Elemento de acordeón #3
</button>
</h2>
<div id="collapseThree" class="accordion-collapse collapse" data-bs-parent="#accordionExample">
<div class="accordion-body">
<strong>Este es el cuerpo del acordeón del tercer elemento.</strong> Está oculto por defecto, hasta que el plugin de colapso añade las clases apropiadas que utilizamos para dar estilo a cada elemento. Estas clases controlan la apariencia general, así como el mostrar y ocultar mediante transiciones CSS. Puedes modificar cualquier parte de esto con CSS personalizado o anulando nuestras variables predeterminadas. También vale la pena señalar que casi cualquier HTML puede ir dentro de <code>.accordion-body</code>, aunque la transición limita el desbordamiento.
</div>
</div>
</div>
</div> Flush
Añade .accordion-flush para eliminar algunos bordes y esquinas redondeadas para renderizar los acordeones de borde a borde con su contenedor padre.
.accordion-flush. Este es el cuerpo del acordeón del primer elemento..accordion-flush. Este es el cuerpo del acordeón del segundo elemento. Imaginemos que esto se llena con algún contenido real..accordion-flush. Este es el cuerpo del acordeón del tercer elemento. Nada más emocionante sucede aquí en términos de contenido, solo rellenando el espacio para que se vea, al menos a primera vista, un poco más representativo de cómo se vería esto en una aplicación del mundo real.<div class="accordion accordion-flush" id="accordionFlushExample">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseOne" aria-expanded="false" aria-controls="flush-collapseOne">
Elemento de acordeón #1
</button>
</h2>
<div id="flush-collapseOne" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
<div class="accordion-body">Contenido de marcador de posición para este acordeón, que tiene la intención de demostrar la clase <code>.accordion-flush</code>. Este es el cuerpo del acordeón del primer elemento.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseTwo" aria-expanded="false" aria-controls="flush-collapseTwo">
Elemento de acordeón #2
</button>
</h2>
<div id="flush-collapseTwo" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
<div class="accordion-body">Contenido de marcador de posición para este acordeón, que tiene la intención de demostrar la clase <code>.accordion-flush</code>. Este es el cuerpo del acordeón del segundo elemento. Imaginemos que esto se llena con algún contenido real.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseThree" aria-expanded="false" aria-controls="flush-collapseThree">
Elemento de acordeón #3
</button>
</h2>
<div id="flush-collapseThree" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
<div class="accordion-body">Contenido de marcador de posición para este acordeón, que tiene la intención de demostrar la clase <code>.accordion-flush</code>. Este es el cuerpo del acordeón del tercer elemento. Nada más emocionante sucede aquí en términos de contenido, solo rellenando el espacio para que se vea, al menos a primera vista, un poco más representativo de cómo se vería esto en una aplicación del mundo real.</div>
</div>
</div>
</div> Siempre abierto
Omite el atributo data-bs-parent en cada .accordion-collapse para que los elementos del acordeón permanezcan abiertos cuando se abre otro elemento.
.accordion-body, aunque la transición limita el desbordamiento.
.accordion-body, aunque la transición limita el desbordamiento.
.accordion-body, aunque la transición limita el desbordamiento.
<div class="accordion" id="accordionPanelsStayOpenExample">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
Elemento de acordeón #1
</button>
</h2>
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show">
<div class="accordion-body">
<strong>Este es el cuerpo del acordeón del primer elemento.</strong> Se muestra por defecto, hasta que el plugin de colapso añade las clases apropiadas que utilizamos para dar estilo a cada elemento. Estas clases controlan la apariencia general, así como el mostrar y ocultar mediante transiciones CSS. Puedes modificar cualquier parte de esto con CSS personalizado o anulando nuestras variables predeterminadas. También vale la pena señalar que casi cualquier HTML puede ir dentro de <code>.accordion-body</code>, aunque la transición limita el desbordamiento.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
Elemento de acordeón #2
</button>
</h2>
<div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse">
<div class="accordion-body">
<strong>Este es el cuerpo del acordeón del segundo elemento.</strong> Está oculto por defecto, hasta que el plugin de colapso añade las clases apropiadas que utilizamos para dar estilo a cada elemento. Estas clases controlan la apariencia general, así como el mostrar y ocultar mediante transiciones CSS. Puedes modificar cualquier parte de esto con CSS personalizado o anulando nuestras variables predeterminadas. También vale la pena señalar que casi cualquier HTML puede ir dentro de <code>.accordion-body</code>, aunque la transición limita el desbordamiento.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
Elemento de acordeón #3
</button>
</h2>
<div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse">
<div class="accordion-body">
<strong>Este es el cuerpo del acordeón del tercer elemento.</strong> Está oculto por defecto, hasta que el plugin de colapso añade las clases apropiadas que utilizamos para dar estilo a cada elemento. Estas clases controlan la apariencia general, así como el mostrar y ocultar mediante transiciones CSS. Puedes modificar cualquier parte de esto con CSS personalizado o anulando nuestras variables predeterminadas. También vale la pena señalar que casi cualquier HTML puede ir dentro de <code>.accordion-body</code>, aunque la transición limita el desbordamiento.
</div>
</div>
</div>
</div> Accesibilidad
Consulta la sección de accesibilidad de collapse para obtener más información.
CSS
Variables
Agregado en v5.2.0Como parte del enfoque evolutivo de las variables CSS de Bootstrap, los acordeones ahora utilizan variables CSS locales en .accordion para una personalización mejorada en tiempo real. Los valores de las variables CSS se establecen a través de Sass, por lo que la personalización de Sass también es compatible.
--#{$prefix}accordion-color: #{$accordion-color};
--#{$prefix}accordion-bg: #{$accordion-bg};
--#{$prefix}accordion-transition: #{$accordion-transition};
--#{$prefix}accordion-border-color: #{$accordion-border-color};
--#{$prefix}accordion-border-width: #{$accordion-border-width};
--#{$prefix}accordion-border-radius: #{$accordion-border-radius};
--#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};
--#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};
--#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};
--#{$prefix}accordion-btn-color: #{$accordion-button-color};
--#{$prefix}accordion-btn-bg: #{$accordion-button-bg};
--#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};
--#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
--#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
--#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
--#{$prefix}accordion-active-color: #{$accordion-button-active-color};
--#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};
Variables de Sass
$accordion-padding-y: 1rem;
$accordion-padding-x: 1.25rem;
$accordion-color: var(--#{$prefix}body-color);
$accordion-bg: var(--#{$prefix}body-bg);
$accordion-border-width: var(--#{$prefix}border-width);
$accordion-border-color: var(--#{$prefix}border-color);
$accordion-border-radius: var(--#{$prefix}border-radius);
$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width);
$accordion-body-padding-y: $accordion-padding-y;
$accordion-body-padding-x: $accordion-padding-x;
$accordion-button-padding-y: $accordion-padding-y;
$accordion-button-padding-x: $accordion-padding-x;
$accordion-button-color: var(--#{$prefix}body-color);
$accordion-button-bg: var(--#{$prefix}accordion-bg);
$accordion-transition: $btn-transition, border-radius .15s ease;
$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle);
$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis);
// fusv-disable
$accordion-button-focus-border-color: $input-focus-border-color; // Deprecated in v5.3.3
// fusv-enable
$accordion-button-focus-box-shadow: $btn-focus-box-shadow;
$accordion-icon-width: 1.25rem;
$accordion-icon-color: $body-color;
$accordion-icon-active-color: $primary-text-emphasis;
$accordion-icon-transition: transform .2s ease-in-out;
$accordion-icon-transform: rotate(-180deg);
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-color}' stroke-linecap='round' stroke-linejoin='round'><path d='m2 5 6 6 6-6'/></svg>");
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-active-color}' stroke-linecap='round' stroke-linejoin='round'><path d='m2 5 6 6 6-6'/></svg>");
Uso
El plugin collapse utiliza algunas clases para manejar el trabajo pesado:
.collapseoculta el contenido.collapse.showmuestra el contenido.collapsingse añade cuando comienza la transición y se elimina cuando termina
Estas clases se pueden encontrar en _transitions.scss.
Mediante atributos de datos
Simplemente añade data-bs-toggle="collapse" y un data-bs-target al elemento para asignar automáticamente el control de uno o más elementos colapsables. El atributo data-bs-target acepta un selector CSS para aplicar el colapso. Asegúrate de añadir la clase collapse al elemento colapsable. Si deseas que se abra por defecto, añade la clase adicional show.
Para añadir la gestión de grupos de acordeón a un área colapsable, añade el atributo de datos data-bs-parent="#selector".
Mediante JavaScript
Actívalo manualmente con:
const accordionCollapseElementList = document.querySelectorAll('#myAccordion .collapse')
const accordionCollapseList = [...accordionCollapseElementList].map(accordionCollapseEl => new bootstrap.Collapse(accordionCollapseEl))
Opciones
Como las opciones se pueden pasar a través de atributos de datos o JavaScript, puedes añadir un nombre de opción a data-bs-, como en data-bs-animation="{value}". Asegúrate de cambiar el tipo de mayúsculas y minúsculas del nombre de la opción de “camelCase” a “kebab-case” al pasar las opciones a través de atributos de datos. Por ejemplo, usa data-bs-custom-class="beautifier" en lugar de data-bs-customClass="beautifier".
A partir de Bootstrap 5.2.0, todos los componentes admiten un atributo de datos reservado experimental data-bs-config que puede albergar una configuración simple del componente como una cadena JSON. Cuando un elemento tiene los atributos data-bs-config='{"delay":0, "title":123}' y data-bs-title="456", el valor final de title será 456 y los atributos de datos separados anularán los valores proporcionados en data-bs-config. Además, los atributos de datos existentes pueden albergar valores JSON como data-bs-delay='{"show":0,"hide":150}'.
El objeto de configuración final es el resultado fusionado de data-bs-config, data-bs- y el js object (objeto js) donde el último par clave-valor proporcionado anula a los demás.
| Nombre | Tipo | Predeterminado | Descripción |
|---|---|---|---|
parent | selector, elemento DOM | null | Si se proporciona un padre, todos los elementos colapsables bajo el padre especificado se cerrarán cuando se muestre este elemento colapsable. (similar al comportamiento tradicional de acordeón; esto depende de la clase card). El atributo tiene que establecerse en el área colapsable de destino. |
toggle | boolean | true | Alterna el elemento colapsable al invocarlo. |
Métodos
Todos los métodos de la API son asíncronos e inician una transición. Devuelven el control al llamador tan pronto como se inicia la transición, pero antes de que termine. Además, se ignorará cualquier llamada a un método en un componente en transición. Más información en nuestra documentación de JavaScript.
Activa tu contenido como un elemento colapsable. Acepta un object de opciones opcional.
Puedes crear una instancia de collapse con el constructor, por ejemplo:
const bsCollapse = new bootstrap.Collapse('#myCollapse', {
toggle: false
})
| Método | Descripción |
|---|---|
dispose | Destruye el colapso de un elemento. (Elimina los datos almacenados en el elemento DOM) |
getInstance | Método estático que permite obtener la instancia de colapso asociada a un elemento DOM, puedes usarlo así: bootstrap.Collapse.getInstance(element). |
getOrCreateInstance | Método estático que devuelve una instancia de colapso asociada a un elemento DOM o crea una nueva en caso de que no haya sido inicializada. Puedes usarlo así: bootstrap.Collapse.getOrCreateInstance(element). |
hide | Oculta un elemento colapsable. Vuelve al llamador antes de que el elemento colapsable se haya ocultado realmente (por ejemplo, antes de que ocurra el evento hidden.bs.collapse). |
show | Muestra un elemento colapsable. Vuelve al llamador antes de que el elemento colapsable se haya mostrado realmente (por ejemplo, antes de que ocurra el evento shown.bs.collapse). |
toggle | Alterna un elemento colapsable a mostrado u oculto. Vuelve al llamador antes de que el elemento colapsable se haya mostrado u ocultado realmente (es decir, antes de que ocurra el evento shown.bs.collapse o hidden.bs.collapse). |
Eventos
La clase collapse de Bootstrap expone algunos eventos para conectarse a la funcionalidad de colapso.
| Tipo de evento | Descripción |
|---|---|
hide.bs.collapse | Este evento se dispara inmediatamente cuando se ha llamado al método hide. |
hidden.bs.collapse | Este evento se dispara cuando un elemento de colapso se ha ocultado al usuario (esperará a que se completen las transiciones CSS). |
show.bs.collapse | Este evento se dispara inmediatamente cuando se llama al método de instancia show. |
shown.bs.collapse | Este evento se dispara cuando un elemento de colapso se ha hecho visible para el usuario (esperará a que se completen las transiciones CSS). |
const myCollapsible = document.getElementById('myCollapsible')
myCollapsible.addEventListener('hidden.bs.collapse', event => {
// hacer algo...
})