details标签需用作为首个子元素以实现折叠功能,多版本更新应分多个details块倒序排列,open属性仅用于最新版,css可微调箭头但不可破坏语义和焦点行为,旧浏览器建议降级为css模拟而非polyfill。

details标签的基本结构和默认行为
直接用 <details></details> 包裹内容,浏览器会自动添加折叠/展开控件,不需要额外JS。它原生支持键盘操作(空格、回车切换状态),且语义上明确表示“可选展开的附加信息”。
关键点:<summary></summary> 必须是 <details></details> 的第一个子元素,否则无法触发折叠逻辑;<summary></summary> 内容就是默认显示的标题行。
常见错误:把多个 <summary></summary> 放进一个 <details></details>,或漏写 <summary></summary> —— 这会导致整个内容始终展开,且失去可访问性。
历史版本记录的合理分组方式
每个版本建议单独一个 <details></details> 块,按时间倒序排列(新版本在前)。不要把所有更新塞进一个 <details></details> 里——那样会违背“单次聚焦一个变更”的阅读预期。
示例结构:
<details open><summary>v2.4.1(2024-06-15)</summary><ul>
<li>修复导出 CSV 时中文乱码问题</li>
<li>优化移动端表单提交按钮位置</li>
</ul></details><details><summary>v2.4.0(2024-05-20)</summary><ul>
<li>新增暗色主题切换开关</li>
<li>重构用户权限校验逻辑</li>
</ul></details>
注意:open 属性只加在最新版上,避免用户首次打开页面就看到全部长列表。
样式微调与可访问性补救
<details></details> 默认没有箭头图标,且 Safari 对 summary::marker 支持不稳定。如果需要统一视觉提示,推荐用伪元素 + CSS 控制:
容易踩的坑:
- 用
background-image替代::marker更可靠 - 别给
<summary></summary>设display: block,否则可能破坏默认焦点行为 - 为屏幕阅读器保留语义,不要用
aria-hidden="true"隐藏原生控件
简单兼容写法:
details summary {
list-style: none;
}
details summary::marker {
content: "▶ ";
}
details[open] summary::marker {
content: "▼ ";
}
不建议强行兼容 IE 或旧版 Edge
<details></details> 在 IE 中完全不支持,在 Edge 12–18 中存在 focus 状态丢失、键盘操作异常等问题。Polyfill(如 details-polyfill)仅能模拟基础展开,无法还原语义和键盘导航能力。
真实使用场景下,历史更新页本就不是核心功能路径,且通常面向开发者或内部用户——这类用户基本已升级到现代浏览器。若必须支持旧环境,更务实的做法是降级为纯 CSS 折叠(用 :checked + label + div 模拟),而非硬套 polyfill。
复杂点在于:一旦引入 JS 补丁,就要同步维护焦点管理、状态同步、SSR 渲染一致性——这些开销远超收益。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











