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

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

admin7天前AI技术19

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

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

相关文章

LLM介绍

。LLM 被证明在使用指令形式化描述的未见过的任务上表现良好。这意味着 LLM 能够根据任务指令执行任务,而无需事先见过具体示例,展示了其强大的泛化能力。 :小型语言模型通常难以解决涉...

【DL】2023年你应该知道的 10 大深度学习算法

3. 循环神经网络 (RNN) 4. 生成对抗网络 (GAN) 5. 径向基函数网络 (RBFN) 6. 多层感知器 (MLP) 7. 自组织图 (SOM)...

神经网络分类总结

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

神经网络中的单层神经网络

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 看一个经典的神经网络。这是一个包...

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

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

跨平台机器学习:ML.NET架构及应用编程

平台上的一个机器学习框架,它提供了一套丰富的算法和工具,使得开发人员可以轻松地构建和部署机器学习模型。支持多种编程语言,包括等,这使得它成为跨平台机器学习的理想选择。的架构主要包括三个部分:数据读取、...

发表评论

访客

看不清,换一张

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