Exclusive accordions using the HTML 'details' element title. A vibrant gradient with a HTML and color picker logo in the bottom-left corner.

使用 HTML details 元素创建独占手风琴

作者头像Brian Smith阅读时长 3 分钟

<details> 元素的 name 属性即将在所有主要浏览器中得到支持。Firefox 130 也应该支持此属性,使大多数引擎能够仅使用 <details> 元素处理常见的 UI 手风琴模式。这对那些从头开始为这些情况编写自定义处理程序的开发人员来说是个好消息。让我们通过一些快速示例来探索该属性允许您做些什么。

注意: 此功能在 Chrome 120Safari 17.2 中稳定,并且在 Firefox Nightly 中启用,因此您可以立即开始尝试它。

<details> 如何工作?

如果您不熟悉 <details>,它是一个元素,它会创建一个“披露小部件”,其中信息仅在小部件切换到“打开”状态时才可见。您应该在其中包含一个 <summary> 元素,用于描述披露的文本。如果您省略 <summary>,则默认情况下浏览器会使用一个特定于浏览器的字符串,如“Details”。点击以下两个元素在打开和关闭状态之间切换它们,并注意第一个元素中缺少的 <summary>

html
<details>
  <p>
    The response phrase for 413 "Content Too Large" used to be "Payload Too
    Large", and this message is still widely used.
  </p>
</details>

<details>
  <summary>System configuration</summary>
  <ul>
    <li>200GB RAM</li>
    <li>4PB storage</li>
  </ul>
</details>

由于手风琴是一系列可展开的部分,允许用户显示或隐藏内容,因此可以使用一系列 <details> 元素来创建类似手风琴的界面。正如我们将在后面看到的那样,使用 name 属性,这些元素可以非常逼真地模拟常见手风琴的行为,在常见手风琴中,一次只能打开一个部分,当展开新的部分时,其他部分会自动关闭。当您想将多个 <details> 元素分组并确保排他性时,能够包含这一点非常不错。

<details> 元素具有很大的潜力融入您的页面,因为一些最小的样式就可以使用仅 HTML 和 CSS 创建交互式手风琴。

html
<details>
  <summary>System configuration</summary>
  <ul>
    <li>200GB RAM</li>
    <li>4PB storage</li>
  </ul>
</details>

<details>
  <summary>Recommended settings</summary>
  <ul>
    <li>Extreme mode: on</li>
    <li>Raytracing: enabled</li>
  </ul>
</details>

<details>
  <summary>Other details</summary>
  <ul>
    <li>Material: Faux Leather, Metal</li>
    <li>Item Weight: 10.2Kg</li>
  </ul>
</details>

使用 <details name> 创建独占手风琴

手风琴的一个常见用例是,它们中只有一个在任何时候都应该是打开的。添加 name 属性可以让您连接多个 <details> 元素并使手风琴具有排他性,因此在任何时候只有一个具有相同名称的 <details> 元素可以打开,浏览器会将所有具有相同名称的其他元素切换到“关闭”状态。当您想要将多个 <details> 元素分组并确保排他性时,能够包含这一点非常不错。

html
<details name="tech-specs">
  <summary>System configuration</summary>
  <ul>
    <li>200GB RAM</li>
    <li>4PB storage</li>
  </ul>
</details>

<details name="tech-specs">
  <summary>Recommended settings</summary>
  <ul>
    <li>Extreme mode: on</li>
    <li>Raytracing: enabled</li>
  </ul>
</details>

<details name="tech-specs">
  <summary>Other details</summary>
  <ul>
    <li>Material: Faux Leather, Metal</li>
    <li>Item Weight: 10.2Kg</li>
  </ul>
</details>

常见问题解答是这类独占手风琴的一个很好的用例,在常见问题解答中,访问者可以一次专注于一个主题。

html
<details name="faq">
  <summary>Can I request a refund?</summary>
  <p>
    Yes, you have up to 30 days to request a refund. See our T&C for details.
  </p>
</details>

<!-- etc. -->

进一步阅读

如果您想了解更多信息,可以阅读以下其他资源。

总结

随着更多支持在更多稳定浏览器中落地,这表明 Web 平台正在为 Web 开发人员以前必须自己编写的功能提供更好的功能。如果您正在寻找一个 polyfill,那么有一个很棒的 Bramus 的文章,其中包括一个针对不支持此功能的浏览器的 polyfill。

我希望您喜欢这篇文章,并且您将能从 <details> 元素中获得更多收益,这是一个灵活且有用的元素,适用于很多情况。请随时 与我们联系,告诉我您的想法或我是否遗漏了什么。不要在 <details> 中迷路,玩得开心!

随时关注 MDN

订阅 MDN 时事通讯,不错过有关最新 Web 开发趋势、技巧和最佳实践的任何更新。