Safari中details嵌套超两层时toggle事件不可靠,需限制为两层或动态渲染第三层;summary必须是details首个直接子元素;微信X5内核不支持details,须UA检测降级为手风琴组件。

details嵌套超过2层在Safari中toggle事件不可靠
iOS Safari(含17.4)对三层及以上details嵌套的toggle事件支持不一致:点开第三级时,第二级可能意外收起,或toggle根本没触发。这不是代码写错,是WebKit引擎至今未完全实现多层状态同步。
实操建议:
- 最多用两层嵌套,第三级改用
display: none+ JS控制显隐(但需手动补aria-expanded) - 若必须三层,确保第三层
details只在第二层open为true时才渲染到DOM中(用document.createElement动态插入,而非初始HTML里硬写) - 不要监听
click去模拟展开——toggle事件才是唯一能准确反映用户意图的钩子
summary必须是details的第一个直接子元素,否则点击失效
把summary包在p、div甚至span里,Safari和旧版Chrome会直接忽略其交互逻辑,表现为“点了没反应”,控制台也无报错。
常见错误结构:
立即学习“前端免费学习笔记(深入)”;
<details> <p><summary>标题</summary></p> <p>内容</p> </details>
正确写法(且仅此一种):
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
<details> <summary>标题</summary> <p>内容</p> </details>
注意:summary必须是details的**首个直接子节点**,中间不能插任何其他元素(包括空格换行产生的文本节点,在严格模式下也可能干扰)。


















