快速提醒:details/summary 是有史以来制作手风琴的最简单方法

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程的每个阶段提供云产品。 立即开始使用 $200 免费积分!

天啊,感谢 <details> 元素。 将一些内容放到里面,你就可以得到一个可访问的展开以获取更多交互,几乎不需要任何工作。

在里面放一个 <summary> 来定制扩展文本的内容。

非常适合常见问题解答。

你真的可以无限地对它们进行样式化。 如果你不喜欢默认的焦点环,你可以删除它,但要确保放回一些样式。

这里 我使用了一个标题元素来表示每个可扩展部分,它有一个焦点状态,模仿了页面上其他交互式元素。

唯一不支持此功能的浏览器是微软的浏览器(以及 Opera Mini,这是有道理的——它实际上并不进行交互)。

此浏览器支持数据来自 Caniuse,它提供了更多详细信息。 数字表示该浏览器从该版本开始支持该功能。

桌面

ChromeFirefoxIEEdgeSafari
1249796

移动设备/平板电脑

Android ChromeAndroid FirefoxAndroidiOS Safari
12712746.0-6.1

但即使如此,它就像所有部分都打开了,所以这不是什么大问题

想要对默认三角形进行样式化? 说来奇怪,标准做法是通过列表样式属性进行操作。 但基于 Blink 的浏览器还没有赶上,因此它们有自己的专有方法。 不过,它们可以结合起来。 以下是用图片替换它的示例

summary {
  list-style-image: url(right-arrow.svg);
}

summary::-webkit-details-marker {
  background: url(right-arrow.svg);
  color: transparent;
}

不幸的是,它们不会旋转,而且也没有办法对默认三角形进行动画处理。 一个想法可能是将目标定位到 :focus 状态并交换背景

但这似乎仅限于 WebKit 和 Blink,即使如此,一旦项目失去焦点,箭头也会返回,即使项目仍然展开。

可访问性