标签实现折叠展开最直接,但需确保为首个子元素,注意Safari和旧版WebView兼容性,CSS自定义箭头推荐list-style:none+::before,高度动画须用max-height过渡而非原生height。

为什么 有时点不动
不是代码语法错了,而是触发机制被悄悄破坏了:
-
必须是的第一个子元素;中间插个、注释、甚至空格都会让折叠逻辑失效- Safari 15.4 之前不响应
el.open = true这类 JS 赋值,得用el.setAttribute('open', '')才可靠- 微信/QQ 安卓旧版 WebView 可能始终展开或完全无响应,真机测试不能跳过
- 嵌套
在部分浏览器中会中断事件冒泡,导致内层无法点击怎么用 CSS 自定义
样式又不翻车浏览器对
的样式控制有限,尤其箭头图标容易失控:- 别直接用
summary::marker { content: ""; }隐藏默认箭头——Safari 不认这个写法 - 稳妥做法是
summary { list-style: none; },再用summary::before补自定义图标 - 要加旋转动画?给
summary::before设transition: transform 0.2s,再配合details[open] summary::before { transform: rotate(90deg); } - 别给
设height或max-height过渡——它不支持,强行加只会卡顿或无效
需要平滑高度动画时,必须放弃原生
原生
没有 height 过渡能力,所有“滑动展开”效果都是模拟出来的:- 改用
max-height + overflow: hidden + transition组合,初始设max-height: 80px(略高于行高),展开态设为足够大的值(如500px),但别设成none或auto,否则过渡失效 - JS 切换状态时,优先读
el.dataset.expanded而不是查 class,更可靠 - 内容含图片或异步加载时,展开后需调用
el.offsetHeight强制重排,确保scrollHeight计算准确 - 如果段落里有
、没问题,但含float、position: absolute或 flex 子项,可能撑不出真实高度,导致底部被截断
快速上线,等设计提出动效或兼容需求再切过去,比一开始硬上 JS 更稳。 - Safari 15.4 之前不响应
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











