真正的 CSS 技巧警报!Nelson Menezes 发现了一种新方法(*目前只在 Firefox 中有效*)非常巧妙。
您可能知道 CSS 无法对 auto
尺寸进行动画,这非常可惜。从零到“所需任何尺寸”的动画在很多情况下都会非常有用。 我们已经记录了可用的技术。 它们归结为
- 将
max-height
动画到超过您需要的某个值,这会使时间缓动不精确且不流畅。 - 使用 JavaScript 测量最终尺寸并进行动画,这意味着……使用 JavaScript。
Nelson 的技术既不是以上两种,也不是某种带有视觉怪异的基于 transform
的方法。这种技术以 CSS Grid 为核心……
.expander {
display: grid;
grid-template-rows: 0fr;
transition: grid-template-rows 1s;
}
.expander.expanded {
grid-template-rows: 1fr;
}
令人难以置信的是,在 Firefox 中,它可以将该区域内的内容在 0 和内容的自然高度之间进行过渡。它还需要做一点额外的事情,比如隐藏溢出和可见性,使其看起来正确,同时保持可访问性
这太棒了。 让我们在这个问题上获得一些星标,也许 Chrome 会采纳它。但当然,如果 auto
高度过渡开始工作,那就更好了。我无法想象这完全不可能实现。
终于!
我在尝试为水平抽屉制作动画时偶然发现了类似的东西。遗憾的是,我认为它不适用于
grid-template-columns
。您认为是否有更深层的原因,还是仅仅在等待供应商实施?太棒了,很棒的技巧。
我创建了另一个版本,其中默认情况下可以预览可配置数量的行,请查看
https://codepen.io/vajkri/full/oNeaBxG
亲爱的 Chris:
非常感谢您提供的信息丰富的网站!
这是我对自动高度过渡的看法
https://stackoverflow.com/a/69871346/478018
我想知道您的想法。
非常有趣!
这是本文中演示的示例的派生版本,但使用了您的技术
有一些有趣的注意事项。比如 flex 项目本身会进行过渡,但如果元素位于 flex 容器之外,则会跳到最终位置。
而且,flex 容器的父级必须是网格(或 flex)才能工作,这非常有趣???
“如果元素位于 flex 容器之外”
如您在我的演示中所见,页面其余内容应位于 flex 容器中,即
body
元素。