Collapse
Alterna la visibilidad del contenido en tu proyecto con unas pocas clases y nuestros plugins de JavaScript.
Cómo funciona
El plugin de JavaScript collapse se usa para mostrar y ocultar contenido. Los botones o
anclas se usan como disparadores que se mapean a elementos específicos que alternas. Contraer un elemento
animará el height desde su valor actual a 0. Dado cómo maneja CSS las animaciones,
no puedes usar padding en un elemento .collapse. En su lugar, usa la clase como un
elemento contenedor 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:
.collapseoculta el contenido.collapsingse aplica durante las transiciones.collapse.showmuestra el contenido
Generalmente, recomendamos usar un botón con el atributo data-bs-target.
Aunque no se recomienda desde el punto de vista semántico, también puedes usar un enlace con el atributo
href (y un role="button"). En ambos casos, el data-bs-toggle="collapse"
es obligatorio.
<p>
<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 plugin de collapse también soporta el colapso horizontal. Añade la clase modificadora
.collapse-horizontal para transicionar el width en lugar del height y
establece un width en el elemento hijo inmediato. Siéntete libre de escribir tu propio Sass
personalizado, usar estilos inline, o usar nuestras utilidades de
width.
min-height establecido para evitar repintados excesivos en nuestra documentación, esto no es
explícitamente necesario. Solo se requiere el width en el elemento hijo.
<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 objetivos
Un <button> o <a> puede mostrar y ocultar múltiples
elementos referenciándolos con un selector en su atributo href o data-bs-target.
Múltiples <button> o <a> pueden mostrar y ocultar un elemento si cada
uno lo referencia con su atributo href o data-bs-target
<p>
<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 añadir aria-expanded al elemento de control. Este atributo
transmite explícitamente el estado actual del elemento colapsable vinculado al control a los lectores de
pantalla y tecnologías de asistencia similares. Si el elemento colapsable está cerrado por defecto, el
atributo en el elemento de control debe tener un valor de aria-expanded="false". Si has
configurado el elemento colapsable para que esté abierto por defecto usando la clase show,
establece aria-expanded="true" en el control en su lugar. El plugin alternará automáticamente
este atributo en el control según si el elemento colapsable se ha abierto o cerrado (vía JavaScript, o porque
el usuario activó otro elemento de control también vinculado al mismo elemento colapsable). Si el elemento
HTML del elemento de control no es un botón (ej., un <a> o <div>), se
debe añadir el atributo role="button" al elemento.
Si tu elemento de control está apuntando a un único elemento colapsable —es decir, el
atributo data-bs-target apunta a un selector de id— debes añadir el atributo
aria-controls al elemento de control, conteniendo el id del elemento colapsable. Los
lectores de pantalla modernos y tecnologías de asistencia similares utilizan este atributo para proporcionar a
los usuarios atajos adicionales para navegar directamente al elemento colapsable.
Ten en cuenta que la implementación actual de Bootstrap no cubre las diversas interacciones de teclado opcionales descritas en el patrón de acordeón WAI-ARIA Authoring Practices 1.1 — tendrás que incluirlas tú mismo con JavaScript personalizado.
Sass
Variables
$transition-collapse: height .35s ease;
$transition-collapse-width: width .35s ease;
Clases
Las clases de transición del collapse se pueden encontrar en
scss/_transitions.scss ya que se comparten entre múltiples componentes (collapse y acordeón).
.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 plugin collapse utiliza algunas clases para hacer 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.
A través de atributos data
Solo 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 collapse. Asegúrate de añadir la clase
collapse al elemento colapsable. Si quieres que esté abierto por defecto, añade la clase
adicional show.
Para añadir gestión de grupos tipo acordeón a un área colapsable, añade el atributo de
datos data-bs-parent="#selector". Consulta la página
del acordeón para más información.
A través de JavaScript
Habilita manualmente con:
var collapseElementList = [].slice.call(document.querySelectorAll('.collapse'))
var collapseList = collapseElementList.map(function (collapseEl) {
return new bootstrap.Collapse(collapseEl)
})
Opciones
Las opciones se pueden pasar a través de atributos data o JavaScript. Para los atributos
data, añade el nombre de la opción a data-bs-, como en data-bs-parent="".
| Nombre | Tipo | Predeterminado | Descripción |
|---|---|---|---|
parent |
selector | objeto jQuery | elemento DOM | false |
Si se proporciona un parent, entonces todos los elementos colapsables bajo el parent
especificado se cerrarán cuando se muestre este elemento colapsable. (similar al comportamiento
tradicional de un acordeón — esto depende de la clase card). El atributo debe establecerse
en el área colapsable objetivo. |
toggle |
boolean | true |
Alterna el elemento colapsable al invocarlo |
Métodos
Métodos asíncronos y transiciones
Todos los métodos de la API son asíncronos e inician una transición. Vuelven al llamador tan pronto como se inicia la transición pero antes de que termine. Además, una llamada a un método en un componente en transición será ignorada.
Consulta nuestra documentación de JavaScript para más información.
Activa tu contenido como un elemento colapsable. Acepta un object de opciones
opcional.
Puedes crear una instancia de collapse con el constructor, por ejemplo:
var myCollapse = document.getElementById('myCollapse')
var bsCollapse = new bootstrap.Collapse(myCollapse, {
toggle: false
})
| Método | Descripción |
|---|---|
toggle |
Alterna un elemento colapsable para mostrarlo u ocultarlo. 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). |
show |
Muestra un elemento colapsable. Vuelve al llamador antes de que el elemento
colapsable se haya mostrado realmente (ej., antes de que ocurra el evento
shown.bs.collapse). |
hide |
Oculta un elemento colapsable. Vuelve al llamador antes de que el elemento
colapsable se haya ocultado realmente (ej., antes de que ocurra el evento
hidden.bs.collapse). |
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 collapse asociada a un
elemento DOM, puedes usarlo así: bootstrap.Collapse.getInstance(element) |
getOrCreateInstance
|
Método estático que devuelve una instancia de collapse asociada a un elemento del
DOM o crea una nueva en caso de que no haya sido inicializada.
Puedes usarlo así: bootstrap.Collapse.getOrCreateInstance(element) |
Eventos
La clase collapse de Bootstrap expone algunos eventos para conectarse a la funcionalidad del collapse.
| Tipo de evento | Descripción |
|---|---|
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 collapse se ha hecho visible al usuario (esperará a que se completen las transiciones CSS). |
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 collapse se ha ocultado del usuario (esperará a que se completen las transiciones CSS). |
var myCollapsible = document.getElementById('myCollapsible')
myCollapsible.addEventListener('hidden.bs.collapse', function () {
// do something...
})