0

0

Bootstrap手风琴效果默认展开 Bootstrap Accordion如何让某一项默认打开

畫卷琴夢

畫卷琴夢

发布时间:2026-03-18 15:32:03

|

895人浏览过

|

来源于php中文网

原创

要默认展开某一项,必须同时设置目标元素的collapse和show类、对应按钮的aria-expanded="true"并移除collapsed类,且确保aria-controls与data-bs-target的ID严格匹配。

默认展开某一项:只加 show 类还不够

bootstrap accordion 默认所有项都是收起的,想让某一项“一打开页面就展开”,不能只给目标 <div class="accordion-collapse">show 类——这会导致它显示,但对应按钮的 aria-expanded 仍是 false,视觉和可访问性状态不一致,屏幕阅读器会误报,且点击后行为异常(比如点一下反而收起)。

必须同步处理三处:

  • 目标 <div class="accordion-collapse"> 同时加 showcollapse 类(顺序不限,但两个都要有)
  • 对应的触发按钮(<button class="accordion-button">)去掉 collapsed 类,并把 aria-expanded 改为 true
  • aria-controlsdata-bs-target 的值,必须与目标 id 严格匹配(包括大小写和连字符)

例如让第一项默认展开:

<div class="accordion-item">
  <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
    标题一
  </button>
  <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#myAccordion">
    <div class="accordion-body">内容</div>
  </div>
</div>

多个默认展开?别硬改,Accordion 就是设计成单开的

Accordion 的核心逻辑是「一次只开一个」,靠 data-bs-parent 把所有项绑定到同一个容器上实现互斥。如果你强行给多个 accordion-collapse 都加 show,它们确实会同时显示,但按钮的 aria-expanded 状态不会自动同步,用户点击任一按钮时,其他项也不会自动收起——这就退化成了普通 collapse,失去了手风琴意义。

真需要多开,直接换用独立的 collapse 组件,而不是套 accordion 外壳:

  • 外层不用 accordion 类,也不设 data-bs-parent
  • 每个按钮用 data-bs-toggle="collapse" 指向各自目标 id
  • 想默认开哪个,就给对应 collapseshow,其他不加

移动端适配:默认展开 → 移动端收起,不能靠 JS 监听窗口大小

你没法在 CSS 里写 “桌面端加 show,移动端去掉”,因为 show 是类名,不是样式;也不能靠 JS 在 resize 时反复增删 show——这会导致页面加载时闪一下,或横竖屏切换时状态错乱。

正确做法是用 Bootstrap 内置的响应式类组合:

百灵大模型
百灵大模型

蚂蚁集团自研的多模态AI大模型系列

下载
  • 给默认要展开的项,同时加 showcollapse
  • 再加一个隐藏类,如 d-md-block d-lg-block d-none(意思是:仅在中/大屏显示,小屏隐藏)
  • 但注意:这个隐藏只是视觉隐藏,show 仍存在,所以得配合 JS 在小屏初始化时主动收起

更稳妥的方案是放弃纯 HTML 方案,用少量 JS 初始化判断:

if (window.matchMedia('(max-width: 768px)').matches) {
  const el = document.getElementById('collapseOne');
  if (el.classList.contains('show')) {
    el.classList.remove('show');
  }
}

容易被忽略的 ARIA 同步问题

很多人加了 show 却忘了改 aria-expanded,结果按钮说“已展开”,但焦点进入后读出来却是“展开”,或者相反。这对使用读屏软件的用户是严重障碍。

关键点:

  • aria-expanded="true" 必须只出现在当前展开项的按钮上
  • 所有其他按钮必须是 aria-expanded="false",且带 collapsed 类(Bootstrap 5 用它控制按钮图标旋转)
  • aria-labelledby 的值(如 "headingOne")必须指向按钮的 id,不是标题文字的 ID —— 很多人误写成指向 <h2 id="headingOne">,其实应该让按钮自己有 id="headingOne"

没配对好,不仅影响辅助技术,某些浏览器还会拒绝触发折叠动画。

复杂点不在怎么写,而在每一处 ID、类、属性都得对得上号;少一个 #,漏一个 collapsed,或者大小写差一位,整个手风琴就卡住不动了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

275

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

413

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

233

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

122

2024.05.22

bootstrap框架介绍
bootstrap框架介绍

本专题整合了bootstrap框架相关介绍,阅读专题下面的文章了解更多详细内容。

4

2026.03.18

bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

3

2026.03.18

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

109

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

13

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.7万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 12.8万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号