折叠面板(Collapse)

Bootstrap折叠板插件允许你在网页中用一点点JavaScript以及CSS类切换内容,控制内容的可见性。它是一个灵活的插件,使用少量的类(来自必需的过渡插件),以方便切换行为。

如何运作

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

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

示例

点击下面任何一个按钮,通过类更改显示和隐藏另一个class包含的元素:

  • .collapse 隐藏内容
  • .collapsing 带动态效果的切换
  • .collapse.show 显示内容
    你可以使用带href 属性的连接,、或者带 data-target 属性的按钮来创建折叠效果-这两种情况下 data-toggle="collapse" 属性都是必须的。

折叠面板(Collapse)  - 图1

  1. <p>
  2. <a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
  3. Link with href
  4. </a>
  5. <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
  6. Button with data-target
  7. </button>
  8. </p>
  9. <div class="collapse" id="collapseExample">
  10. <div class="card card-body">
  11. Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
  12. </div>
  13. </div>

多目标控制

可以在<button>或者 <a> 标签上,通过 JQuery选择器来显示和隐藏多个元素(或者多个<button><a>元素来控制显示/隐藏一个元素素)),如果被引用对象的href 或者 data-target 属性定义正确。

折叠面板(Collapse)  - 图2

  1. <p>
  2. <a class="btn btn-primary" data-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Toggle first element</a>
  3. <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Toggle second element</button>
  4. <button class="btn btn-primary" type="button" data-toggle="collapse" data-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
  5. </p>
  6. <div class="row">
  7. <div class="col">
  8. <div class="collapse multi-collapse" id="multiCollapseExample1">
  9. <div class="card card-body">
  10. Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
  11. </div>
  12. </div>
  13. </div>
  14. <div class="col">
  15. <div class="collapse multi-collapse" id="multiCollapseExample2">
  16. <div class="card card-body">
  17. Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
  18. </div>
  19. </div>
  20. </div>
  21. </div>

手风琴折叠范例

结合 card 卡片组件使用,可以扩展折叠组件为手风琴效果。

折叠面板(Collapse)  - 图3

  1. <div class="accordion" id="accordionExample">
  2. <div class="card">
  3. <div class="card-header" id="headingOne">
  4. <h2 class="mb-0">
  5. <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
  6. Collapsible Group Item #1
  7. </button>
  8. </h2>
  9. </div>
  10. <div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
  11. <div class="card-body">
  12. Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
  13. </div>
  14. </div>
  15. </div>
  16. <div class="card">
  17. <div class="card-header" id="headingTwo">
  18. <h2 class="mb-0">
  19. <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
  20. Collapsible Group Item #2
  21. </button>
  22. </h2>
  23. </div>
  24. <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionExample">
  25. <div class="card-body">
  26. Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
  27. </div>
  28. </div>
  29. </div>
  30. <div class="card">
  31. <div class="card-header" id="headingThree">
  32. <h2 class="mb-0">
  33. <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
  34. Collapsible Group Item #3
  35. </button>
  36. </h2>
  37. </div>
  38. <div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordionExample">
  39. <div class="card-body">
  40. Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
  41. </div>
  42. </div>
  43. </div>
  44. </div>

无障碍浏览提示(易用性)

建议添加 aria-expanded 到控件元素中,该属性能明确将与控件相关的可折叠元素之当前状态传达给屏幕阅读器和类似的辅助技术。如果折叠块元素默认是闭合的,它必须拥有一个 aria-expanded="false"值。如果你用.show类设置则可以定义折叠控件为默认打开,在控制器上设置 aria-expanded="true"即可。插件会根据折叠块元素是打开还是关闭的,自动切换这个属性(通过JavaScript,或者因为用户触发的另一个控件元素也绑定到相同的折叠元素)。

此外,如果控件元素只对准一个单个元素——即data-target的值指向一个id选择器,你可以给这个控件元素添加额外的aria-controls属性,容纳这个折叠块元素的id。现代的屏幕阅读器以及类似的辅助技术利用这个属性向用户提供额外的快捷方式,直接导航到折叠块元素本身。

请注意,Bootstrap的当前实现并未涵盖WAI-ARIA Authoring Practices 1.1 accordion pattern手风琴模式中描述的各种键盘交互 - 您需要使用自定义JavaScript自行包含这些交互.

用法

折叠插件使用一些Class类来处理复杂的事务:

  • .collapse 隐藏内容
  • .collapse.show 显示内容
  • .collapsing 在转换开始时被添加,当它完成时则移除。
    这些类可以在_transitions.scss文件中查阅。

利用data数据属性

data-toggle="collapse"data-target 添加到元素中,可自动指定折叠面板的控制项,其中 data-target 属性接受CSS选择器,以应用折叠。确保向可折叠面板添加collapse添加到可折叠面板组件之上。如果你希望它默认是打开的,可定义额外的 show属性。

为了给一个折叠块控件添加类似手风琴组的效果,还需要添加data属性data-parent="#selector"。可以参考下面的演示了解实践例子。

利用JavaScript

人为启用它:

  1. $('.collapse').collapse()

选项

可通过data属性或JavaScript传递选项。如用data属性,请把选项名追加到data-后面(如写为data-parent="")。

名类Type类型默认值描述
parentselector | jQuery object | DOM element false如果提供了一个选择器,然后当某个折叠块打开时,这个指定的父元素下面所有别的折叠块元素都将自动关闭(类似于传统的手风琴样式 - 这依赖card样式),属性必须在目标可折叠区域上定义。
togglebooleantrue在调用中折叠块元素。

方法

异步传输方法和转义

所有的API方法都是 异步传输和轮换, 一旦 事件发生(开始)在结束之前,它们会持续返回给调用者。另外在过渡组件上的方法将被忽略。

请参阅我们的API文档了解更多。

.collapse(options)

启用你的可折叠对象,通过 object方法。

  1. $('#myCollapsible').collapse({
  2. toggle: false
  3. })

.collapse('toggle')

即发生 shown.bs.collapsehidden.bs.collapse 事件前)返回给调用者。

.collapse('show')

显示可折叠元素, 在可折叠元素实际显示之前 (即shown.bs.collapse 事件发生之前)返回给调用者。

.collapse('hide')

隐藏可折叠元素, 在可折叠元素实际上被隐藏之前 (即hidden.bs.collapse 事件发生之前)返回给调用者。

.collapse('dispose')

销毁一个元素的折叠。

事件

Bootstrap提供为折叠面板提供了一系列事件属性。

事件类别描述
show.bs.collapse当调用show 方法时,会立即触发事件。
shown.bs.collapse用户可见折叠面板中的块时,会触发此事件(需要等CSS加载过渡完成)。
hide.bs.collapse当调用hide 方法时,立即触发该事件。
hidden.bs.collapse当折叠面板中的块对于用户完全隐藏时(需要等CSS加载过渡完成),会触发该事件)。
  1. $('#myCollapsible').on('hidden.bs.collapse', function () {
  2. // do something…
  3. })