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

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

admin7个月前 (04-01)AI技术191

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

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

相关文章

【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

一、Submarine(Hadoop生态系统) (一)Submarine 介绍 (三)Submarine 属于 Hadoop 生态系统 (四)Submarine 官网版...

使用 ESP

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

神经网络分类总结

从网络性能角度可分为连续型与离散型网络、确定性与随机性网络。 从网络结构角度可为前向网络与反馈网络。 从学习方式角度可分为有导师学习网络和无导师学习网络。 按连续突触性...

一文讲清神经网络、BP神经网络、深度学习的关系

人工神经网络中的顶级代表。往往说《神经网络》就是指《BP神经网络》。 大家研究着各种神经网络,研究得不亦乐乎, 来了两个家伙Romelhart 和Mcclelland,...

什么是人工智能 ?

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

深入理解优化:如何利用 Gemini 3.1 的阶梯计费策略?企业级大规模调用实务完全指南|Duuu笔记

需深入理解Gemini 3.1阶梯计费与调用联动关系,通过识别阶梯区间、请求级Token预估截断、多模型路由调度、响应缓存去重、项目拆分配额绑定五种路径优化成本。 ☞☞☞AI 智能聊天, 问答助手,...

发表评论

访客

看不清,换一张

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