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>
正确写法(且仅此一种):
<details><summary>标题</summary><p>内容</p> </details>
注意:summary必须是details的**首个直接子节点**,中间不能插任何其他元素(包括空格换行产生的文本节点,在严格模式下也可能干扰)。











