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

开发Bootstrap 5中Accordions组件的法最佳践|Duuu笔记

admin2个月前 (04-09)AI技术65

生产环境中的前端应用实践

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 官网版...

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

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

前端开发高级应用:MuleRun如何连接Slack通知 MuleRun消息推送集成配置步骤实战案例|Duuu笔记

若MuleRun无法向Slack推送通知,需依次配置Incoming Webhook或Bot Token、在MuleRun中设置对应通知目标参数,并通过最小化任务测试验证;常见失败原因包括凭据错误、权...

几种主要的神经网络

卷积神经网络的输入为二维的像素整阵列,输出为这个图片的属性,当网络训练学习后,所输入的图片或许经过稍微的变换,但卷积神经网络还是可以通过识别图片局部的特征而将整个图片识别出来。 :该层...

bp神经网络是什么网络,神经网络和bp神经网络

1、前馈神经网络:一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。 2、BP神经网络:是一种按照误差逆向传播...

AI实战详解:Perplexity 怎么做市场调研 Perplexity 市场分析实操教程【商业】最佳实践|Duuu笔记

掌握Perplexity AI市场调研需五步:一、结构化提问嵌入地域/时间/主体/指标四要素;二、限定PDF等原始信源提升可信度;三、分步提问生成制表符分隔文本以自动导入Excel;四、启用Pro S...

发表评论

访客

看不清,换一张

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