原生 HTML:重温手风琴

2025-06-09

原生 HTML:重温手风琴

六年前,我探索了原生<details>元素<summary>,以创建易于访问的手风琴折叠面板。从那时起,Web 平台不断发展,引入了令人兴奋的新功能,例如这些元素独有的打开行为流畅的动画。

在本文中,我们将重温<details>并充分利用现代 CSS 属性,为您的手风琴面板增添光彩。我还将分享一个演示实现来展示这些功能。

基础知识:<details><summary>

<details>元素提供了一种在 HTML 中创建可切换部分的原生方式,该<summary>元素充当可点击的标签。这使得创建信息披露小部件变得轻而易举。

这是一个简单的例子:

<details>
  <summary>Read more</summary>
  Some text to be hidden. 
</details>
Enter fullscreen mode Exit fullscreen mode

点击摘要可切换相关内容的可见性。无需 JavaScript!

增强功能:独有的开放行为

为了模拟传统的手风琴折叠行为(即一次只打开一个部分),您可以name<details>元素上使用 属性。当<details>元素共享相同的 属性时name,打开一个元素会自动关闭组中的其他元素。

<details name="exclusive">
  <summary>Section 1</summary>
  <p>Content for section 1.</p>
</details>
<details name="exclusive">
  <summary>Section 2</summary>
  <p>Content for section 2.</p>
</details>
Enter fullscreen mode Exit fullscreen mode

这种行为是原生的,并且可以在现代浏览器中无缝运行!

使用 CSS 添加流畅的动画

为了使打开和关闭过渡更加平滑,我们可以使用现代 CSS 属性,如interpolate-sizetransition-behavior

关键属性

  • interpolate-size:允许在固有尺寸(如auto)和固定尺寸之间进行动画处理。此属性目前仅在 Chrome 中受支持。
  • transition-behavior:当设置为时allow-discrete,通常不能以动画形式呈现的属性visibilitydisplay等待而不是立即更新。

示例样式

以下是演示中使用的 CSS 的完整示例:

details {
  interpolate-size: allow-keywords;
  overflow: clip;
  margin-top: 0.125em;
  border: 1px solid #dddddd;
  background: #ffffff;
  color: #333333;
  border-radius: 3px;
}

details summary {
  display: block;
  cursor: pointer;
  position: relative;
  padding: 0.5em 0.5em 0.5em 0.7em;
  background: #ededed;
  color: #2b2b2b;
  border-radius: 3px 3px 0 0;
}

details:not([open]) summary:hover,
details:not([open]) summary:focus {
  background: #f6f6f6;
  color: #454545;
}

details[open] summary {
  outline: 1px solid #003eff;
  background: #007fff;
  color: #ffffff;
}

details[open]::details-content {
  height: auto;
}

details::details-content {
  height: 0;
  overflow-y: clip;
  transition: content-visibility 475ms allow-discrete, height 475ms;
}

details main {
  padding: 1em 2.2em;
}
Enter fullscreen mode Exit fullscreen mode

工作原理

  1. 高度动画:该属性允许在(关闭)和(打开)interpolate-size之间平滑过渡。不过,目前只有 Chrome 支持此功能。height: 0height: auto
  2. 可见性转换:该transition-behavior属性确保可见性变化看起来无缝。

演示:将所有内容整合在一起

以下是完整的实现:

浏览器支持

  • interpolate-size目前仅支持 Chrome。
  • transition-behavior:大多数现代浏览器都支持。

对于不支持的浏览器,动画会优雅地回退,并且手风琴仍然能够正常使用,即使没有平滑的过渡。

结论

<details>元素<summary>与现代 CSS 相结合,为创建交互式手风琴面板提供了一种轻量级且易于访问的解决方案。这些新的增强功能使其对现代 Web 项目更具吸引力。试用演示版,让您的手风琴面板焕然一新,更显精致!

非常感谢你的阅读。如果你想在 Dev 之外联系我,可以关注我的TwitterBsky​​LinkedIn,来打个招呼吧😊

鏂囩珷鏉ユ簮锛�https://dev.to/link2twenty/native-html-accordion-revisited-6ai
PREV
使用 Unicode 星号进行星级评定
NEXT
原生 HTML:手风琴