Bootstrap手风琴怎么只展开一个面板?

司马俊蓓 阅读 35

我用Bootstrap 5写了个手风琴,但点开一个面板后,其他已经打开的不会自动关闭,导致多个面板同时展开。不是说手风琴默认只能展开一个吗?

我检查了data-bs-parent属性,也加了容器ID,但还是不行。这是我的结构:

<div id="myAccordion">
  <div class="accordion-item">
    <h2 class="accordion-header">
      <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne">
        Item 1
      </button>
    </h2>
    <div id="collapseOne" class="accordion-collapse collapse show" data-bs-parent="#myAccordion">
      <div class="accordion-body">Content 1</div>
    </div>
  </div>
  <div class="accordion-item">
    <h2 class="accordion-header">
      <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo">
        Item 2
      </button>
    </h2>
    <div id="collapseTwo" class="accordion-collapse collapse" data-bs-parent="#myAccordion">
      <div class="accordion-body">Content 2</div>
    </div>
  </div>
</div>

是不是哪里写错了?为什么不能互斥展开?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
UE丶熙炫
你的代码结构有个关键问题:data-bs-parent 属性放错位置了。

在 Bootstrap 5 里,data-bs-parent 应该放在触发按钮(accordion-button)上,而不是放在折叠面板(accordion-collapse)上。你现在把它放在 div 元素上,浏览器根本识别不到这个配置。

正确的写法应该是这样:

<div id="myAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" data-bs-parent="#myAccordion">
Item 1
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse show">
<div class="accordion-body">Content 1</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" data-bs-parent="#myAccordion">
Item 2
</button>
</h2>
<div id="collapseTwo" class="accordion-collapse collapse">
<div class="accordion-body">Content 2</div>
</div>
</div>
</div>


改动有两个地方:

第一,每个按钮上都加上 data-bs-parent="#myAccordion",指向同一个父容器 ID。

第二,accordion-collapsediv 上不再需要 data-bs-parent 属性,删掉就行。

这里需要注意的是,Bootstrap 5 和 Bootstrap 4 在这点上正好相反。Bootstrap 4 是把 data-parent 放在 collapse 元素上,而 Bootstrap 5 改成了放在触发按钮上。如果你之前是用 Bootstrap 4 迁移过来的,这点很容易踩坑。

改完应该就正常了,点击任意一个面板,其他打开的会自动收起来,只保留一个展开状态。
点赞
2026-03-11 12:05
Prog.景鑫
外层容器缺了 class="accordion",加上它就能互斥展开了。

<div id="myAccordion" class="accordion">
点赞 1
2026-03-04 15:02