Collapse
Alterna la visibilidad del contenido en tu proyecto con algunas clases y nuestros complementos de JavaScript.
Cómo funciona.
El complemento JavaScript para
contraer se utiliza
para mostrar y
ocultar contenido. Los botones o anclajes se utilizan como activadores que se asignan a elementos
específicos
que alterna. Colapsar un elemento animará el height
desde su valor actual a 0
.
Dado
cómo CSS maneja las animaciones, no puedes usar padding
en un elemento .collapse
.
En
su lugar, utiliza la clase como elemento envolvente independiente.
prefers-reduced-motion
.
Consulta la sección de movimiento reducido
de nuestra documentación de accesibilidad.
Ejemplo
Haz clic en los botones a continuación para mostrar y ocultar otro elemento mediante cambios de clase:
.collapse
oculta contenido.collapsing
se aplica durante las transiciones.collapse.show
muestra contenido
Generalmente, recomendamos usar un <button>
con el atributo data-bs-target
.
Aunque no se recomienda desde un punto de vista semántico, también puedes usar un enlace
<a>
con el atributo href
(y un role="button"
). En ambos casos, se
requiere data-bs-toggle="collapse"
.
<p class="d-inline-flex gap-1">
<a class="btn btn-primary" data-bs-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
Link with href
</a>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
Button with data-bs-target
</button>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger.
</div>
</div>
Horizontal
El complemento de colapso admite el colapso horizontal. Agrea la clase modificadora
.collapse-horizontal
para realizar la transición del width
en lugar de
height
y establece un width
en el elemento hijo inmediato. Siéntete libre de
escribir tu propio Sass personalizado, usar estilos en línea o usar nuestras utilidades de ancho.
min-height
configurado para evitar
repintados excesivos en nuestra documentación, esto no es un requisito explícito. Solo se requiere el
width
en el elemento secundario.
<p>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWidthExample" aria-expanded="false" aria-controls="collapseWidthExample">
Toggle width collapse
</button>
</p>
<div style="min-height: 120px;">
<div class="collapse collapse-horizontal" id="collapseWidthExample">
<div class="card card-body" style="width: 300px;">
This is some placeholder content for a horizontal collapse. It's hidden by default and shown when triggered.
</div>
</div>
</div>
Múltiples opciones y objetivos
Un elemento <button>
o <a>
puede mostrar y ocultar múltiples elementos
haciendo referencia a ellos con un selector en su atributo data-bs-target
o href
.
Por el contrario, varios elementos <button>
o <a>
pueden mostrar y
ocultar el mismo elemento si cada uno de ellos hace referencia a él con su data-bs-target
o
href
.
<p class="d-inline-flex gap-1">
<a class="btn btn-primary" data-bs-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Toggle first element</a>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Toggle second element</button>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample1">
<div class="card card-body">
Some placeholder content for the first collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample2">
<div class="card card-body">
Some placeholder content for the second collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
</div>
</div>
</div>
</div>
Accesibilidad
Asegúrate de agregar aria-expanded
al elemento de control. Este atributo transmite
explícitamente el estado actual del elemento plegable vinculado al control a lectores de pantalla y
tecnologías de asistencia similares. Si el elemento plegable está cerrado de forma predeterminada, el atributo
del elemento de control debe tener un valor de aria-expanded="false"
. Si has configurado el
elemento plegable para que se abra de forma predeterminada usando la clase show
, configura
aria-expanded="true"
en el control. El complemento alternará automáticamente este atributo en el
control en función de si el elemento plegable se ha abierto o cerrado (a través de JavaScript,
o porque el usuario activó otro
elemento de control también vinculado al mismo elemento plegable). Si el elemento HTML del elemento de
control
no es un botón (por ejemplo, un <a>
o <div>
), el atributo
role="button"
debe agregarse al elemento.
Si tu elemento de control apunta a un único elemento plegable, es decir, el atributo
data-bs-target
apunta a un selector id
, debes agregar el atributo
aria-controls
al elemento de control, que contiene el id
del elemento plegable. Los
lectores de pantalla modernos y tecnologías de asistencia similares utilizan este atributo para proporcionar a
los usuarios accesos directos adicionales para navegar directamente al elemento plegable.
Ten en cuenta que la implementación actual de Bootstrap no cubre las diversas interacciones de teclado opcionales descritas en Patrón de acordeón de la Guía de prácticas de creación de ARIA, deberás incluirlos tú mismo con JavaScript personalizado.
CSS
Variables Sass
$transition-collapse: height .35s ease;
$transition-collapse-width: width .35s ease;
Clases
Las clases de transición de collapse se pueden encontrar en scss/_transitions.scss
ya que se
comparten entre múltiples componentes (collapse y accordion).
.collapse {
&:not(.show) {
display: none;
}
}
.collapsing {
height: 0;
overflow: hidden;
@include transition($transition-collapse);
&.collapse-horizontal {
width: 0;
height: auto;
@include transition($transition-collapse-width);
}
}
Uso
El complemento de colapso utiliza algunas clases para manejar el trabajo pesado:
.collapse
oculta el contenido.collapse.show
muestra el contenido.collapsing
se agrega cuando comienza la transición y se elimina cuando finaliza
Estas clases se pueden encontrar en _transitions.scss
.
Vía atributos de datos
Simplemente agrega data-bs-toggle="collapse"
y un data-bs-target
al elemento para
asignar automáticamente control de uno o más elementos plegables. El atributo data-bs-target
acepta un selector CSS al que aplicar el colapso. Asegúrate de agregar la clase collapse
al
elemento plegable. Si deseas que se abra de forma predeterminada, agrega la clase adicional show
.
Para agregar administración de grupos tipo acordeón a un área plegable, agrega el atributo de datos
data-bs-parent="#selector"
. Consulta la página del
acordeón para obtener más información.
Vía JavaScript
Habilitar manualmente con:
const collapseElementList = document.querySelectorAll('.collapse')
const collapseList = [...collapseElementList].map(collapseEl => new bootstrap.Collapse(collapseEl))
Opciones
Como las opciones se pueden pasar a través de atributos de datos o JavaScript, puedes agregar un nombre de
opción a
data-bs-
, como en data-bs-animation="{value}"
. Asegúrate de cambiar el tipo de
caso
del nombre de la opción de “camelCase” a “kebab-case” al pasar las opciones a través de
atributos de datos. Por ejemplo, utiliza 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 experimental
reservado data-bs-config
que puede albergar datos simples de configuración 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 sobrescribirá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 combinado de data-bs-config
,
data-bs-
y js object
donde el último valor-clave dado sobrescribe los demás.
Nombre | Tipo | Predeterminado | Descripción |
---|---|---|---|
parent |
selector, elemento DOM | null |
Si se proporciona el elemento padre, todos los elementos plegables bajo el elemento padre
especificado se cerrarán cuando se muestre este elemento plegable. (similar al comportamiento
tradicional del acordeón; esto depende de la clase card ). El atributo debe establecerse
en el área plegable de destino. |
toggle |
boolean | true |
Alterna el elemento plegable al invocarlo. |
Métodos
Activa tu contenido como un elemento plegable. Acepta opciones opcionales object
.
Puedes crear una instancia colapsada con el constructor, por ejemplo:
const bsCollapse = new bootstrap.Collapse('#myCollapse', {
toggle: false
})
Método | Descripción |
---|---|
dispose |
Destruye el collapse de un elemento. (Elimina los datos almacenados en el elemento DOM) |
getInstance |
Método estático que te 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 colapsada 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 plegable. Vuelve a la persona que llama antes de que el elemento
contraíble se haya ocultado (por ejemplo, antes de que ocurra el evento
hidden.bs.collapse ).
|
show |
Muestra un elemento plegable. Vuelve a la persona que llama antes de que el elemento
plegable se haya mostrado realmente (por ejemplo, antes de que ocurra el evento
shown.bs.collapse ).
|
toggle |
Cambia un elemento plegable para mostrarlo u ocultarlo. Vuelve a la persona que llama antes
de que el elemento plegable se haya mostrado u ocultado (es decir, antes de que el evento
shown.bs.collapse o hidden.bs.collapse ocurra).
|
Eventos
La clase de colapso de Bootstrap expone algunos eventos para conectarse a la funcionalidad de colapso.
Tipo de evento | Descripción |
---|---|
hide.bs.collapse |
Este evento se activa inmediatamente cuando se llama al método hide . |
hidden.bs.collapse |
Este evento se activa cuando un elemento de colapso se ha ocultado al usuario (esperará a que se completen las transiciones CSS). |
show.bs.collapse |
Este evento se activa inmediatamente cuando se llama al método de instancia show . |
shown.bs.collapse |
Este evento se activa cuando un elemento colapsado se hace visible para el usuario (esperará a que se completen las transiciones CSS). |
const myCollapsible = document.getElementById('myCollapsible')
myCollapsible.addEventListener('hidden.bs.collapse', event => {
// do something...
})