CSS如何实现手风琴折叠效果_结合details与summary标签样式

梦雪吖_7745

梦雪吖_7745

2026-04-12

749人浏览

原创

原生 和 标签可实现手风琴效果,无需 JavaScript;需确保 是 的第一个子元素且有结束标签;默认样式可通过 CSS 重置,如清除 ::marker、自定义箭头;多组独立展开,单开单关需 JS 监听 toggle 事件控制;兼容性方面 IE 不支持,Safari 15.4+ 才支持 ::marker。

css如何实现手风琴折叠效果_结合details与summary标签样式

details + summary 标签本身就能实现手风琴,无需 JavaScript

浏览器原生

和 组合已内置展开/折叠逻辑,点击 自动切换
的 open 属性。这意味着你不需要监听 click、不需维护 state、也不用写 toggle 函数——只要结构正确,行为就可靠。

常见错误是把

写成自闭合标签(如 ),或把它放在
外面。必须保证:

  • 是
    的**第一个子元素**
  • 必须有结束标签()
  • 多个
    并列时,默认各自独立控制,天然符合“手风琴”中“单个展开”的直觉(但注意:它不是强制互斥,要单开单关需额外控制)

默认样式难看?用 CSS 覆盖 summary 的 ::marker 和 outline

Chrome/Firefox 默认会在

前加一个三角形标记(::marker),且聚焦时有难看的蓝色外框(outline)。不重置的话,视觉上很割裂。

关键样式建议:

  • 清除原生标记:summary::marker { content: "" }
  • 移除焦点环(若设计允许):summary:focus { outline: none };更推荐用 outline-offset 或自定义 focus 样式替代全删
  • 添加自定义箭头更可控:summary::after { content: "▶"; margin-left: 8px; transition: transform 0.2s; },再配合 details[open] summary::after { transform: rotate(90deg) }
  • 注意:Safari 对 ::marker 支持较晚(15.4+),旧版本需用 list-style: none + position: relative + 伪元素模拟

让多个 details 实现“单开单关”手风琴(非默认行为)

原生

是完全独立的,点击一个不会关闭其他。要实现经典手风琴(一次只开一个),必须用 JavaScript 监听 toggle 事件并手动关闭兄弟节点。

CSS婚礼策划服务机构宣传网站模板
CSS婚礼策划服务机构宣传网站模板

CSS婚礼策划服务机构宣传网站模板是一款适合提供婚礼策划和婚庆服务机构宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

下载

实操要点:

  • 给所有
    加相同 class(如 js-accordion),方便批量操作
  • 监听 toggle 事件(注意:该事件在 open 属性改变后触发,且冒泡)
  • 只在当前 details[open] 为 true 时才执行关闭其他逻辑,避免重复触发问题
  • 示例代码片段:
document.querySelectorAll('.js-accordion').forEach(item => {
  item.addEventListener('toggle', () => {
    if (item.open) {
      document.querySelectorAll('.js-accordion').forEach(other => {
        if (other !== item) other.open = false;
      });
    }
  });
});

兼容性与渐进增强要注意这些点

IE 完全不支持

,Edge 15–18 部分支持但无 toggle 事件。如果你必须支持 IE,就得回退到 JS 实现;否则可安全使用,并用 @supports 做样式分层。

实用策略:

  • 基础功能不依赖 CSS:即使样式未加载,
    在支持浏览器里仍可交互
  • 用 @supports (display: contents) 或更直接地 @supports (display: grid) and (not (-webkit-appearance: none)) 来包裹高级样式(不够精准但够用)
  • 不要用 appearance: none 强制抹除所有原生样式——某些屏幕阅读器依赖默认 summary 的语义表现
  • 移动端点击区域小?给 summary 加 padding 和 min-height,别只靠字体大小撑开

细节决定是否真能用:比如 Safari 在 iOS 上对 details[open] 的 CSS 过渡支持不稳定,动画最好只作用于内部内容,而非

自身高度。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

css

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

5396

6

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

1157

5

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.28

2038

6

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

2023.08.01

4086

7

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

2023.08.10

8505

11

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

2023.08.10

7211

7

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

2023.08.21

2357

9

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

2023.08.22

3451

5

css禁止点击事件
css禁止点击事件

实现css禁止点击事件的方法有使用CSS的pointer-events属性和使用JavaScript禁用点击事件。本专题为大家提供点击事件相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3053

5

热门下载

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

精品课程

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

共14课时 | 1.6万人学习