当前位置:首页 > AI技术 > 正文内容

Bootstrap 5中Accordions组件的用法最佳实践|Duuu笔记

admin2个月前 (04-01)AI技术54

Accordion项点击后其他全展开,是因为id和aria-labelledby重复导致联动失效;每个item需唯一id、正确data-bs-target和aria-labelledby指向按钮id,禁用手动show类。

为什么点一个Accordion项,其他全跟着展开?

因为

id

aria-labelledby

重复了——这是最常踩的坑。Bootstrap 5 的 Accordion 默认靠这些属性做联动,一旦多个

accordion-item

共用同一个

id="collapseOne"

aria-labelledby="headingOne"

,它就“认不出谁是谁”,结果就是点哪都展开全部。

每个

accordion-item

必须有唯一

id

(如

id="collapseTwo"

对应按钮的

data-bs-target

必须带

#

前缀,且严格匹配该

id

(如

data-bs-target="#collapseTwo"

aria-labelledby

要指向按钮自身的

id

(不是内容区的),比如按钮写

id="headingTwo"

,那内容区就得写

aria-labelledby="headingTwo"

别手动加

show

类到多个内容区;Accordion 会自动管理显隐,加了反而破坏行为

想让多个面板独立开关,不互斥,怎么配?

Bootstrap 5 的 Accordion 默认是「手风琴模式」:一次只开一个。如果你要的是「可多开」(比如 FAQ 页面允许用户同时展开多个问题),就不能依赖

accordion

容器的自动行为,得退回到基础

collapse

组件。

去掉外层

class="accordion"

容器,改用独立的

data-bs-toggle="collapse"

按钮 +

class="collapse"

内容块

每个按钮配自己的

data-bs-target

,彼此无关联,互不影响

如果仍想保留 Accordion 的样式(比如边框、间距、箭头图标),可以复用它的 CSS 类,如

accordion-item

accordion-header

,但不加

accordion

父容器

注意:这样就失去了

data-bs-parent

的联动控制能力,也不再有默认的「收起其他」逻辑

折叠菜单要做二级嵌套,能硬套 Accordion 吗?

不能。原生 Accordion 只管一级联动,二级菜单一展开,父级不会自动高亮,点击子菜单也不会收起兄弟项,体验断裂。

独响

一个轻笔记+角色扮演的app

下载

多级导航推荐用

accordion

accordion

:外层设

id="nav-accordion"

,每个一级菜单项是

accordion-item

,其

accordion-body

内再放一个带

data-bs-parent="#nav-accordion"

的子

accordion

更稳妥的做法是放弃 Accordion,直接用

collapse

+ 手动 JS 控制状态,尤其当需要点击父菜单时展开子菜单、再点一次收起时

必须补全

aria-expanded

aria-controls

,否则屏幕阅读器无法识别当前展开层级

别在子菜单上再写

data-bs-parent

指向外层 ID——这会让子菜单受外层控制,点它反而关掉整个导航

React 中用 react-

bootstrap

/Accordion 怎么避免状态混乱?

关键不是靠组件自动同步,而是把展开状态收归 React 管理。react-bootstrap 的

Accordion

默认不维护内部状态,全靠你传

defaultActiveKey

或用

activeKey

+

onSelect

控制。

要用受控模式:声明

activeKey

(字符串或

null

表示全收起),并在

onSelect

里更新 state

多个面板想默认都收起?别设

defaultActiveKey

,而是在 state 初始化为

null

或空数组(配合

alwaysOpen={false}

如果用了

alwaysOpen

activeKey

就得是数组,且每个

AccordionItem

eventKey

必须唯一、不可为空字符串

别在

AccordionItem

上直接写

onClick

改状态——它和

onSelect

冲突,容易丢事件

Accordion 的核心约束其实就一条:靠 HTML 属性驱动,不是靠 JS 状态猜。ID 对不上、ARIA 错位、父容器漏

data-bs-parent

,都会让行为失准。越是想“省事”直接复制粘贴示例代码,越容易卡在某个展开/收起不响应的细节里。

相关文章

使用 ESP

针对该分类问题,我们使用了 Kaggle 手势识别数据集 中的一个开源数据集。原始数据集包括 10 个类别,我们只使用了其中 6 个。这些类别更容易识别,且日常生活中更有用,如...

推荐10个AI人工智能技术网站

除了研究和开发人工智能技术,OpenAI还积极参与人工智能伦理和安全的研究和探讨。 认为,人工智能技术的发展必须遵循伦理和法律的规范,以确保人工智能的应用不会对人类带来负面影响。...

什么是人工智能 ?

您可以使用 ML 训练 AI,使其精确、快速地执行任务。这可以通过自动化员工感到吃力或厌烦的业务部分来提高运营效率。同样,您可以使用 AI 自动化来腾出员工资源,用于更复杂和更具创造性的工作。...

前端开发实战详解:骡子快跑怎么注册账号 骡子快跑账号注册流程最佳实践|Duuu笔记

骡子快跑注册仅需1分钟,但激活码需从Discord指定频道获取,输错3次将锁账户24小时;积分与注册邮箱强绑定且不可更换;部分地区即使注册成功也无法运行Agent。 ☞☞☞AI 智能聊天, 问答助手...

AI高级应用:Perplexity 怎么写用户手册 Perplexity 产品帮助文档生成【技术】实战案例|Duuu笔记

Perplexity AI用户手册需基于API元数据、真实UI截图、典型场景示例、响应字段解析及动态调试指令五步构建:一调用API获取参数与错误码;二标注网页端搜索框、引用图标等组件;三设计信息检索、...

前端开发高级应用:骡子快跑支持日程安排吗 骡子快跑时间管理助手用法实战案例|Duuu笔记

骡子快跑具备日程安排能力,可通过计算机模式构建长效日程代理、自然语言注入日历事件、绑定外部日历实现双向同步三种方式实现。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Dee...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。