details 和 summary:披露组件
无需 JavaScript 即可构建原生展开和折叠组件
details 和 summary:披露组件 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。
什么是 details 和摘要
<details> 和 <summary> 元素可以创建原生的展开控件——一种无需使用 JavaScript 的展开/折叠组件:
<details>
<summary>What is HTML?</summary>
<p>HTML (HyperText Markup Language) is the standard markup language
used to create web pages.</p>
</details>工作原理
交互行为:
- 默认情况下,只有
<summary>可见 - 点击摘要会切换其余内容的可见性
- 摘要默认会显示一个展开三角形
- 无需使用 JavaScript
open 属性
open 属性会预先展开 details 元素:
<details open>
<summary>Installation instructions</summary>
<ol>
<li>Download the installer</li>
<li>Run the installer</li>
<li>Restart your computer</li>
</ol>
</details>
<!-- open is a boolean attribute: presence = expanded -->
<!-- Remove it to start collapsed -->构建常见问题
常见问题分区非常适合使用这种元素:
<h2>Frequently Asked Questions</h2>
<details>
<summary>Is HTML5 a programming language?</summary>
<p>No. HTML5 is a markup language that defines the structure and meaning
of web content. Programming languages like JavaScript add logic and behavior.</p>
</details>
<details>
<summary>Do I need to close void elements?</summary>
<p>In HTML5, void elements like <img> and <br> do not require
a closing slash. Both <br> and <br /> are valid.</p>
</details>设置 details 和摘要的样式
自定义外观:
details {
border: 1px solid #e2e8f0;
border-radius: 0.5rem;
padding: 0.75rem 1rem;
margin-bottom: 0.5rem;
}
summary {
font-weight: 600;
cursor: pointer;
list-style: none; /* remove default triangle */
}
summary::before {
content: '▶ '; /* custom arrow */
}
details[open] > summary::before {
content: '▼ '; /* rotate when open */
}移除默认三角形
展开三角形通过 list-style 应用:
/* Remove the default arrow: */
summary {
list-style: none;
}
/* Firefox: */
summary::-webkit-details-marker {
display: none;
}
/* Then add a custom indicator: */
summary::after {
content: '+';
float: right;
}
details[open] summary::after {
content: '−';
}切换事件
监听打开或关闭操作的 toggle 事件:
const details = document.querySelector('details');
details.addEventListener('toggle', () => {
if (details.open) {
console.log('Details opened');
// Track analytics, load content, etc.
} else {
console.log('Details closed');
}
});使用 details 创建手风琴
构建一个基本的手风琴组件——同一时间只展开一个面板:
/* Pure CSS accordion using details: */
/* Each item is a details element */
/* For exclusive open, use JavaScript: */
const allDetails = document.querySelectorAll('details');
allDetails.forEach(d => {
d.addEventListener('toggle', () => {
if (d.open) {
allDetails.forEach(other => {
if (other !== d) other.removeAttribute('open');
});
}
});
});details/summary 的无障碍支持
内置的无障碍功能:
- 摘要可以获得键盘焦点,并可使用 Enter 或空格键激活
- 屏幕阅读器会读出摘要文本和展开状态
- 隐藏内容仍然存在于 DOM 中,但在展开前会被宣布为隐藏
用于独占式手风琴的 name 属性
HTML 2025 为 details 添加了 name,以支持原生独占式手风琴:
<details name="faq">
<summary>Question 1</summary>
<p>Answer 1...</p>
</details>
<details name="faq">
<summary>Question 2</summary>
<p>Answer 2...</p>
</details>
<!-- details with the same name act as a group -->
<!-- Opening one closes the others automatically -->
<!-- Supported in Chrome 120+ and Firefox 130+ -->使用 toggle 延迟加载内容
仅在 details 打开时加载内容:
<details id="advanced">
<summary>Load advanced settings...</summary>
<div id="advanced-content">Loading...</div>
</details>
<script>
const d = document.getElementById('advanced');
d.addEventListener('toggle', async () => {
if (d.open) {
const res = await fetch('/api/settings');
const html = await res.text();
document.getElementById('advanced-content').innerHTML = html;
d.removeEventListener('toggle', arguments.callee);
}
}, { once: true });
</script>快速检查
在 details 展开控件中,哪个元素提供始终可见的触发文本?
回顾:详细信息与总结
披露组件要点:
<details>+<summary>— 原生展开/折叠,无需 JavaScriptopen属性 — 预先展开- 切换事件 — 对打开/关闭做出响应
- 使用 CSS 设置样式;将列表样式设为 none 以移除默认三角形
name属性 — 排他式手风琴组件(Chrome 120 及以上)
常见问题解答
「details 和 summary:披露组件」课时是免费的吗?
是的 — 「details 和 summary:披露组件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。
「details 和 summary:披露组件」这节课中我会学到什么?
无需 JavaScript 即可构建原生展开和折叠组件 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 HTML Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「details 和 summary:披露组件」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 HTML Academy 课中编写并运行代码吗?
能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- aside:补充内容
- 重新认识 figure 和 figcaption
- details 和 summary:披露组件
- progress 和 meter 元素