Collapse
Toggle the visibility of content across your project with a few classes and our JavaScript plugins.
How it works
The collapse JavaScript plugin is used to show and hide content. Buttons or anchors are used as
triggers that are mapped to specific elements you toggle. Collapsing an element will animate the
height from its current value to 0. Given how CSS handles animations, you
cannot use padding on a .collapse element. Instead, use the class as an
independent wrapping element.
The animation effect of this component is dependent on the prefers-reduced-motion media
query. See the
reduced motion section of our accessibility documentation.
Example
Click the buttons below to show and hide another element via class changes:
.collapsehides content.collapsingis applied during transitions.collapse.showshows content
Generally, we recommend using a <button> with the
data-bs-target attribute. While not recommended from a semantic point of view, you can
also use an <a> link with the href attribute (and a
role="button"). In both cases, the
data-bs-toggle="collapse" is required.
Horizontal
The collapse plugin supports horizontal collapsing. Add the .collapse-horizontal modifier
class to transition the width instead of height and set a
width on the immediate child element. Feel free to write your own custom Sass, use inline
styles, or use our width utilities.
Please note that while the example below has a min-height set to avoid excessive
repaints in our docs, this is not explicitly required.
Only the width on the child element is required.
Multiple toggles and targets
A <button> or <a> element can show and hide multiple elements by
referencing them with a selector in its data-bs-target or href attribute.
Conversely, multiple <button> or <a> elements can show and hide
the same element if they each reference it with their data-bs-target or
href attribute.
Accessibility
Be sure to add aria-expanded to the control element. This attribute explicitly conveys
the current state of the collapsible element tied to the control to screen readers and similar
assistive technologies. If the collapsible element is closed by default, the attribute on the control
element should have a value of aria-expanded="false". If you’ve set the
collapsible element to be open by default using the show class, set
aria-expanded="true" on the control instead. The plugin will automatically
toggle this attribute on the control based on whether or not the collapsible element has been opened
or closed (via JavaScript, or because the user triggered another control element also tied to the same
collapsible element). If the control element’s HTML element is not a button (e.g., an
<a> or <div>), the attribute
role="button" should be added to the element.
If your control element is targeting a single collapsible element – i.e. the
data-bs-target attribute is pointing to an id selector – you should add the
aria-controls attribute to the control element, containing the id of the
collapsible element. Modern screen readers and similar assistive technologies make use of this
attribute to provide users with additional shortcuts to navigate directly to the collapsible element
itself.
Note that Bootstrap’s current implementation does not cover the various optional keyboard interactions described in the ARIA Authoring Practices Guide accordion pattern - you will need to include these yourself with custom JavaScript.
Usage
The collapse plugin utilizes a few classes to handle the heavy lifting:
.collapsehides the content.collapse.showshows the content.collapsingis added when the transition starts, and removed when it finishes
These classes can be found in _transitions.scss.
Via data attributes
Just add data-bs-toggle="collapse" and a data-bs-target to the
element to automatically assign control of one or more collapsible elements. The
data-bs-target attribute accepts a CSS selector to apply the collapse to. Be sure to add
the class collapse to the collapsible element. If you’d like it to default open, add the
additional class show.
To add accordion-like group management to a collapsible area, add the data attribute
data-bs-parent="#selector". Refer to the
accordion page for more information.
Via JavaScript
Enable manually with:
const collapseElementList = document.querySelectorAll('.collapse');
const collapseList = [...collapseElementList].map((collapseEl) => new bootstrap.Collapse(collapseEl));
Options
As options can be passed via data attributes or JavaScript, you can append an option name to
data-bs-, as in data-bs-animation="{value}". Make sure to change
the case type of the option name from “camelCase” to “kebab-case” when passing the
options via data attributes. For example, use
data-bs-custom-class="beautifier" instead of
data-bs-customClass="beautifier".
As of Bootstrap 5.2.0, all components support an experimental reserved data attribute
data-bs-config that can house simple component configuration as a JSON string. When an
element has data-bs-config='{"delay":0, "title":123}' and
data-bs-title="456" attributes, the final title value will be
456 and the separate data attributes will override values given on
data-bs-config. In addition, existing data attributes are able to house JSON values like
data-bs-delay='{"show":0,"hide":150}'.
The final configuration object is the merged result of data-bs-config,
data-bs-, and js object where the latest given key-value overrides the
others.
| Name | Type | Default | Description |
|---|---|---|---|
parent |
selector, DOM element | null |
If parent is provided, then all collapsible elements under the specified parent will be closed
when this collapsible item is shown. (similar to traditional accordion behavior - this is
dependent on the card class). The attribute has to be set on the target
collapsible area.
|
toggle |
boolean | true |
Toggles the collapsible element on invocation. |
Methods
All API methods are asynchronous and start a transition. They return to the caller as soon as the transition is started, but before it ends. In addition, a method call on a transitioning component will be ignored. Learn more in our JavaScript docs.
Activates your content as a collapsible element. Accepts an optional options object.
You can create a collapse instance with the constructor, for example:
const bsCollapse = new bootstrap.Collapse('#myCollapse', {
toggle: false
});
| Method | Description |
|---|---|
dispose |
Destroys an element’s collapse. (Removes stored data on the DOM element) |
getInstance |
Static method which allows you to get the collapse instance associated to a DOM element, you
can use it like this: bootstrap.Collapse.getInstance(element).
|
getOrCreateInstance |
Static method which returns a collapse instance associated to a DOM element or create a new
one in case it wasn’t initialized. You can use it like this:
bootstrap.Collapse.getOrCreateInstance(element).
|
hide |
Hides a collapsible element.
Returns to the caller before the collapsible element has actually been hidden
(e.g., before the hidden.bs.collapse event occurs).
|
show |
Shows a collapsible element.
Returns to the caller before the collapsible element has actually been shown
(e.g., before the shown.bs.collapse event occurs).
|
toggle |
Toggles a collapsible element to shown or hidden.
Returns to the caller before the collapsible element has actually been shown or
hidden
(i.e. before the shown.bs.collapse or hidden.bs.collapse event
occurs).
|
Events
Bootstrap’s collapse class exposes a few events for hooking into collapse functionality.
| Event type | Description |
|---|---|
hide.bs.collapse |
This event is fired immediately when the hide method has been called. |
hidden.bs.collapse |
This event is fired when a collapse element has been hidden from the user (will wait for CSS transitions to complete). |
show.bs.collapse |
This event fires immediately when the show instance method is called. |
shown.bs.collapse |
This event is fired when a collapse element has been made visible to the user (will wait for CSS transitions to complete). |
const myCollapsible = document.getElementById('myCollapsible');
myCollapsible.addEventListener('hidden.bs.collapse', (event) => {
// do something...
});