跳至主要内容 跳至文档导航

折叠(Collapse)

使用几个类和我们的 JavaScript 插件切换整个项目中内容的可见性。

工作原理

折叠 JavaScript 插件用于显示和隐藏内容。按钮或锚点用作映射到您切换的特定元素的触发器。折叠元素会将height从其当前值设置为0。鉴于 CSS 处理动画的方式,您不能在.collapse元素上使用padding。相反,将该类用作独立的包装元素。

此组件的动画效果取决于prefers-reduced-motion媒体查询。请参阅我们的辅助功能文档的 减少运动部分

示例

单击下面的按钮以通过类更改显示和隐藏另一个元素:

  • .collapse 隐藏内容
  • .collapsing 在过渡期间应用
  • .collapse.show 显示内容

通常,我们建议使用带有data-bs-target属性的<button>。虽然从语义的角度来看不建议这样做,但您也可以使用带有href属性的<a>链接(以及role="button")。在这两种情况下,都需要data-bs-toggle="collapse"

Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger.
html
<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)

折叠插件支持水平折叠。添加.collapse-horizontal修饰符类以转换width而不是height,并在直接子元素上设置width。随意编写自己的自定义 Sass,使用内联样式,或使用我们的 width 实用程序

请注意,虽然下面的示例设置了min-height以避免在我们的文档中过度重绘,但这不是明确要求的。只需要子元素上的width

This is some placeholder content for a horizontal collapse. It's hidden by default and shown when triggered.
html
<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>

多个切换和目标

<button><a>元素可以通过在其data-bs-targethref属性中使用选择器引用多个元素来显示和隐藏多个元素。 相反,如果多个 <button><a> 元素都使用其 data-bs-targethref 属性引用同一元素,则可以显示和隐藏同一元素。

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.
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.
html
<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>

可访问性(Accessibility)

请务必将aria-expanded添加到控制元素。此属性显式地将绑定到控件的可折叠元素的当前状态传达给屏幕阅读器和类似的辅助技术。如果默认情况下关闭可折叠元素,则控制元素上的属性应具有 aria-expanded="false"的值。如果已使用 show 类将可折叠元素设置为默认打开,请改为在控件上设置aria-expanded="true"。该插件将根据可折叠元素是否已打开或关闭(通过 JavaScript,或者因为用户触发了另一个也绑定到同一可折叠元素的控制元素)自动在控件上切换此属性。如果控件元素的 HTML 元素不是按钮(例如,<a><div>),则应将属性role="button"添加到元素中。

如果您的控制元素针对单个可折叠元素(即data-bs-target属性指向id选择器),则应将aria-controls属性添加到控制元素中,其中包含可折叠元素的id。现代屏幕阅读器和类似的辅助技术利用此属性为用户提供其他快捷方式,以直接导航到可折叠元素本身。

请注意,Bootstrap 的当前实现不包括 ARIA 创作实践指南手风琴模式 中描述的各种可选键盘交互 - 您需要自己将这些交互包含在自定义 JavaScript 中。

CSS

Sass 变量

$transition-collapse:         height .35s ease;
$transition-collapse-width:   width .35s ease;

折叠转换类可以在 scss/_transitions.scss中找到,因为它们在多个组件(折叠和折叠)之间共享。

.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);
  }
}

用发

折叠插件利用几个类来处理繁重的工作:

  • .collapse 隐藏内容
  • .collapse.show 显示内容
  • .collapsing 在过渡开始时添加,在过渡完成时删除

这些类可以在_transitions.scss中找到。

通过数据属性

只需在元素中添加data-bs-toggle="collapse"data-bs-target,即可自动分配对一个或多个可折叠元素的控制权。data-bs-target属性接受要应用折叠的CSS选择器。请务必将collapse类添加到可折叠元素中。如果您希望它默认打开,请添加额外的类show

要将类似手风琴的组管理添加到可折叠区域,请添加数据属性data-bs-parent="#selector"。请参阅 手风琴页面了解更多信息。

通过 JavaScript

手动启用:

const collapseElementList = document.querySelectorAll('.collapse')
const collapseList = [...collapseElementList].map(collapseEl => new bootstrap.Collapse(collapseEl))

选项

由于选项可以通过数据属性或 JavaScript 传递,因此您可以将选项名称附加到 data-bs-,如 data-bs-animation="{value}"。通过数据属性传递选项时,请确保将选项名称的大小写类型从“camelCase”更改为“kebab-case”。例如,使用data-bs-custom-class="beautifier"而不是data-bs-customClass="beautifier"

从 Bootstrap 5.2.0 开始,所有组件都支持一个实验性保留数据属性data-bs-config,该属性可以将简单的组件配置作为 JSON 字符串。当元素具有 data-bs-config='{"delay":0, "title":123}'data-bs-title="456" 属性时,最终的 title 值将为 456,单独的数据属性将覆盖 data-bs-config 上给出的值。此外,现有的数据属性能够容纳JSON值,如data-bs-delay='{"show":0,"hide":150}'

名称 类型 默认值 描述
parent 选择器,DOM 元素 null 如果提供了父项,则在显示此可折叠项时,将关闭指定父级下的所有可折叠元素。(类似于传统的手风琴行为 - 这取决于card类)。必须在目标可折叠区域上设置该属性。
toggle boolean true 在调用时切换可折叠元素。

方法

所有 API 方法都是异步的,并且会启动转换。 它们在转换开始后但在转换结束之前立即返回给调用方。此外,对转换组件的方法调用将被忽略。在我们的 JavaScript 文档中了解更多信息

将您的内容激活为可折叠元素。接受可选选项 object

可以使用构造函数创建折叠实例,例如:

const bsCollapse = new bootstrap.Collapse('#myCollapse', {
  toggle: false
})
方法 描述
dispose 销毁元素的折叠。(删除 DOM 元素上存储的数据)
getInstance 静态方法,允许您获取与 DOM 元素关联的折叠实例,您可以像这样使用它: bootstrap.Collapse.getInstance(element).
getOrCreateInstance 静态方法,返回与 DOM 元素关联的折叠实例,或在未初始化的情况下创建一个新实例。你可以像这样使用它: bootstrap.Collapse.getOrCreateInstance(element).
hide 隐藏可折叠元素。在可折叠元素实际隐藏之前返回给调用方(例如,在 hidden.bs.collapse 事件发生之前)。
show 显示可折叠元素。在实际显示可折叠元素之前返回给调用方(例如,在 shown.bs.collapse 事件发生之前)。
toggle 将可折叠元素切换为显示或隐藏。在可折叠元素实际显示或隐藏之前(即在 shown.bs.collapsehidden.bs.collapse 事件发生之前)返回给调用方。

事件

Bootstrap 的折叠类公开了一些事件,用于挂钩到折叠功能。

事件类型 描述
hide.bs.collapse 调用hide 方法后,将立即触发此事件。
hidden.bs.collapse 当折叠元素对用户隐藏(将等待 CSS 过渡完成)时,将触发此事件。
show.bs.collapse 调用show实例方法时,此事件会立即触发。
shown.bs.collapse 当折叠元素对用户可见(将等待 CSS 过渡完成)时,将触发此事件。
const myCollapsible = document.getElementById('myCollapsible')
myCollapsible.addEventListener('hidden.bs.collapse', event => {
  // do something...
})