折叠(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"
。
<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
。
<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-target
或href
属性中使用选择器引用多个元素来显示和隐藏多个元素。
相反,如果多个 <button>
或 <a>
元素都使用其 data-bs-target
或 href
属性引用同一元素,则可以显示和隐藏同一元素。
<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 |
在调用时切换可折叠元素。 |
方法
将您的内容激活为可折叠元素。接受可选选项 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.collapse 或 hidden.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...
})