讲师中心 微信公众号
AI工具推荐 视频效率加速

html个人页面怎么加折叠菜单_html手风琴菜单代码【组件】

胖丽姑娘_2376

胖丽姑娘_2376

发布时间:2026-01-25 21:31:02

|

308人浏览过

|

来源于php中文网

原创

HTML手风琴菜单可用原生details和summary元素实现,语义清晰、可访问性好、无需JS即可折叠展开;需注意summary必须为details首个子元素、用open属性控制默认展开、通过max-height+transition模拟动画,互斥效果须JS监听toggle事件实现。

html个人页面怎么加折叠菜单_html手风琴菜单代码【组件】

HTML 手风琴菜单怎么用 details 和 summary 实现

现代 HTML 原生就支持折叠展开,不用 JS 也能做手风琴效果——关键就是 details 和 summary 元素。它们语义清晰、可访问性好、默认带过渡(需 CSS 补一点),且在 Chrome/Firefox/Safari/Edge 中已全面支持(IE 不支持)。

常见错误是把 summary 当成普通按钮硬加 onclick,结果破坏语义和键盘导航;或者忘了 details 默认是关闭的,没加 open 属性却期望默认展开。

  • summary 必须是 details 的第一个子元素,否则不生效
  • 想默认展开?直接加 open 属性:<details open>
  • 点击 summary 文本或其右侧小箭头都会触发切换,无需额外事件绑定
  • 内容区域自动参与流式布局,不需要设置 height: 0 或 overflow: hidden

怎么用 CSS 控制手风琴样式和展开动画

原生 details 没有展开收起的过渡动画,但可以用 max-height + transition 模拟,或者更稳妥地用 animate 配合 :has()(仅支持较新浏览器)。实际项目中推荐渐进增强:先保证无 JS 可用,再加平滑动画。

容易踩的坑是给 details 直接设 height: 0 ——这会压垮内部内容流,导致布局错乱;正确做法是对 details[open] summary ~ * 设置 max-height 并过渡。

立即学习“前端免费学习笔记(深入)”;

react design
react design

将 Learn Social Studies 品牌系统应用于 React 界面,采用 CSS 变量、可复用组件规范,默认浅色主题并支持深色主题。

下载
  • 隐藏默认箭头:summary::marker { content: "" }(注意 Safari 需要 list-style: none)
  • 添加向下箭头图标:summary::after { content: "▼"; margin-left: 4px; },再用 details[open] summary::after { transform: rotate(180deg) }
  • 动画兼容性方案:用 @keyframes slideDown + animate,配合 details[open] 触发(避免依赖 JS)

多个手风琴项如何互斥(单选折叠)需要 JS 吗

原生 details 是各自独立的,没有“一次只开一个”的机制。如果要做手风琴互斥行为,必须用 JS 监听 toggle 事件并手动关闭其他项。

别用 click,要用 toggle——这是 details 元素专属事件,能准确捕获展开/收起状态变化,包括键盘空格键触发的情况。

  • 监听方式:document.querySelectorAll('details').forEach(el => el.addEventListener('toggle', handler))
  • 判断是否刚打开:if (el.open),然后遍历其他 details 并设 otherEl.open = false
  • 注意避免重复触发:不要在 handler 里再次调用 el.open = true,否则可能死循环
  • 如果页面内容动态加载,记得对新增的 details 也绑定事件

移动端点击无响应或无法收起?检查这些点

在 iOS Safari 或部分安卓 WebView 中,details 行为可能异常,比如点一次没反应、点两次才生效,或收起后内容残留空白。根本原因常是 CSS 干扰或事件冒泡。

最常被忽略的是 summary 内部嵌套了 div 或设置了 pointer-events: none,导致点击穿透失效;还有人给 summary 加了 display: block 却忘了它原本是 display: list-item,破坏了 marker 渲染逻辑。

  • 确保 summary 直接包裹文本,或只含内联元素(span、strong 等)
  • 移除所有对 summary 的 touch-action: manipulation 或 -webkit-tap-highlight-color 覆盖
  • 测试真机:iOS 15.4+ 已修复大部分 toggle 事件延迟问题,但旧版仍建议加 cursor: pointer 提示可点击
  • 若用框架(如 Vue/React)动态渲染,确保 details 元素没被框架指令意外销毁或重建

手风琴菜单真正的复杂点不在实现,而在边界场景:键盘用户按 Enter 切换、屏幕阅读器播报状态、服务端渲染时首屏是否展开、以及 Safari 下 :has(details[open]) 的兼容性兜底。这些细节不处理,看起来“能用”,实则漏掉大量真实用户。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2586

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4839

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3467

2026.03.24

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2862

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2414

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2852

2025.04.24

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

718

2025.12.04

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4036

2023.06.20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

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

精品课程

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

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.8万人学习

CSS教程
CSS教程

共754课时 | 96.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn