0Pricing
HTML Academy · 课时

构建 PE 手风琴组件

先构建无需 JavaScript 即可运行的手风琴组件,再对其进行增强

构建 PE 手风琴组件 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。

目标:不使用 JS 实现可用的手风琴组件

手风琴组件的 PE 版本仅使用 HTML——采用原生的 <details>/<summary> 元素对。点击摘要区域即可切换面板。不需要 CSS、JS 或框架:它已经内置于 HTML 中。

<details>
  <summary>What is HTML?</summary>
  <p>HTML is the markup language of the web.</p>
</details>

内置无障碍支持

<summary> 是一个可聚焦、可通过键盘激活的按钮(按 Enter/空格键可切换)。屏幕阅读器会播报展开/折叠状态。两个 HTML 元素就实现了自定义 React 手风琴组件通常需要数十行 ARIA 和事件处理代码才能实现的功能。

CSS 分层

使用常规 CSS 设置展开三角形、面板内边距和过渡效果。open 属性反映状态,因此 details[open] summary { color: blue; } 只会在展开时生效。无需 JS 即可完善视觉效果。

details { border-bottom: 1px solid #ccc; padding: 8px 0; }
summary { font-weight: bold; cursor: pointer; }
details[open] summary { color: var(--accent); }

为打开和关闭添加动画

默认的打开和关闭是即时完成的。可以为 content-visibility 设置过渡效果,也可以通过 JS 测量面板高度并为 max-height 设置动画。对于简单场景,突然切换是可以接受的;动画属于 CSS+JS 增强功能,可以渐进式应用。

使用 JavaScript 增强功能

JS 可以添加一些便利功能:打开一个手风琴时关闭其他手风琴(单项打开模式)、将打开状态持久化到 localStorage、为过渡添加动画,或通过分析跟踪哪些条目处于展开状态。每项增强功能都完全是附加的。

document.querySelectorAll("details").forEach((d) => {
  d.addEventListener("toggle", () => {
    if (d.open) {
      document.querySelectorAll("details").forEach((o) => {
        if (o !== d) o.removeAttribute("open");
      });
    }
  });
});

切换事件

<details> 每当其打开状态发生变化时都会触发 toggle 事件。可以使用它响应用户的展开操作,而不必重新设置点击处理程序。鼠标点击和键盘激活都兼容。

服务器端渲染状态

要渲染初始已打开的手风琴,请在服务器端设置 open 属性:<details open>。状态位于 HTML 中,因此在任何 JS 执行之前,爬虫和使用慢速连接的用户都能访问它。

内置功能不足时

如果设计需要自定义的展开/折叠图标、动画显示效果或多列面板,请构建自定义版本——但如果可能,应使用 <details>/<summary> 作为底层结构。只有在完全无法使用原生元素时,才添加 ARIA。

无 JS 验证

在 DevTools 中停用 JavaScript,并验证手风琴仍能正常工作:点击 summary,面板会切换,焦点顺序保持合理,并且可以通过键盘激活。如果有任何功能损坏,JS 就不是增强功能,而是必需条件,这违反了 PE。

仅使用 CSS 实现单项打开

要在不使用 JS 的情况下实现单选框式的“同时仅打开一个”,可以在 <details> 上使用 name 属性(Chrome/Safari 支持):所有 <details name="faq"> 共享状态,因此打开一个时会关闭其他项。这是一种模拟单选按钮的纯 HTML 模式。

从仅使用 JS 的手风琴迁移

用 div 元素和 JS 替换原有实现,并保留 CSS 类用于样式设置。结果是 HTML 更简洁、不依赖 JS、可访问性更好,且内容可以被索引。大多数 JS 手风琴都可以迁移到 PE,同时几乎不改变用户可见的效果。

知识检查

哪一对 HTML 元素可以在完全不使用 JavaScript 的情况下提供功能完整的手风琴组件?

总结

PE 手风琴使用原生的 <details>/<summary> 作为基础实现——无需 JS 即可完全满足可访问性要求并支持键盘操作。使用 CSS 添加视觉样式,也可以选择使用 JS 添加动画或单项打开行为。停用 JS,验证基础功能仍然正常。新增的 name 属性甚至支持仅使用 CSS 实现单项打开模式。

常见问题解答

「构建 PE 手风琴组件」课时是免费的吗?

是的 — 「构建 PE 手风琴组件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。

「构建 PE 手风琴组件」这节课中我会学到什么?

先构建无需 JavaScript 即可运行的手风琴组件,再对其进行增强 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 HTML Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「构建 PE 手风琴组件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 HTML Academy 课中编写并运行代码吗?

能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. PE 理念:从 HTML 开始
  2. 功能检测与浏览器嗅探
  3. 优雅降级与渐进增强
  4. 构建 PE 手风琴组件
← 返回 HTML Academy