+原生支持无JS折叠展开,但必须确保为的首个子元素,中间不能有空格、注释或其它标签,否则交互失效;嵌套在iOS Safari等环境不兼容,协议类内容需注意结构合法性与渲染边界。

直接用 + 就能实现,不用 JS、不写过渡动画也能正常工作;但协议类内容常含代码块、列表、表格,必须注意结构合法性与渲染边界。
为什么点开没反应
不是浏览器不支持,而是 DOM 结构被破坏了:
-
必须是的第一个子元素,中间插空格、注释、或都会让折叠逻辑失效- 协议里常见「条款一」「条款二」嵌套,
不能合法嵌套另一个(部分浏览器会静默降级)- 微信 / QQ 内置 WebView(尤其安卓旧版)可能忽略
open属性或始终展开,真机测试不可跳过里能放标题+编号+状态图标吗可以,但别动语义关键属性:
- 允许内联样式:加
font-weight、color、padding没问题 - 禁用
display: block或position: absolute—— 这会让它失去按钮语义和键盘焦点能力 - 自定义箭头要用
summary::marker重置,再用summary::after补符号,例如:summary::marker { content: ""; } summary::after { content: "▶"; margin-left: 8px; transition: transform 0.2s; } details[open] summary::after { transform: rotate(90deg); }
协议里有
<code></code> 怎么避免折叠后内容被裁剪
max-height: 0+overflow: hidden是常见方案,但原生不走这套;若你手动实现动画,得防两个坑:-
高度受字体加载影响,scrollHeight可能取小了,导致展开后底部被切——建议监听load事件后重设max-height - 别用
height: auto做过渡,CSS 不支持,动画会直接跳变;稳妥做法是预估最大高度(比如 15 行 × 24px ≈ 360px),设max-height: 360px - 协议中若有 SVG 或 iframe,它们加载慢且不触发
load,此时transform: scaleY(0)+overflow: hidden比max-height更可靠
协议文档的折叠核心不是“怎么动”,而是“怎么不崩”:结构守规矩、样式不动语义、动画绕开不可过渡属性。真要兼容 IE 或老 WebView,别硬撑原生方案,直接上 checkbox + CSS 的纯样式 fallback 更省心。
- 协议里常见「条款一」「条款二」嵌套,
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











