我想创建一个展开/折叠动画,它只由类名驱动(JavaScript用于切换类名)。
我给一个类max-height: 4em; overflow: hidden;
另一个max-height: 255em;
(我还尝试了值none
,它根本没有动画)
这是动画:transition: max-height 0.50s ease-in-out;
个
我使用CSS过渡在它们之间切换,但浏览器似乎正在动画所有那些额外的em
的,所以它在折叠效果中创建了延迟。
有没有一种方法可以做到这一点(在同样的精神-与css类名),没有副作用(我可以把一个较低的像素数,但显然有缺点,因为它可能会切断合法的文本-这就是大价值的原因,所以它不会切断合法的长文本,只有荒谬的长文本)
查看jsFiddle -http://jsfiddle.net/wCzHV/1/(单击文本容器)
7条答案
按热度按时间ugmeyewa1#
修复延迟解决方案:
为元素设置三次Bezier(0,1,0,1)过渡函数。
scss
字符串
css
型
hrirmatl2#
这是一个老问题,但我只是想出了一个方法来做,并希望坚持它的地方,所以我知道在哪里找到它,我应该再次需要它:o)
因此,我需要一个 accordion 与可点击的“sectionHeading”div,显示/隐藏相应的“sectionContent”div。部分内容div具有可变高度,这会产生一个问题,因为您无法将高度设置为100%。我看到其他的答案建议动画max-height代替,但这意味着有时你会得到延迟时,max-height你使用的是大于实际高度。
这个想法是在加载时使用jQuery来查找并显式设置“sectionContent”div的高度。然后添加一个css类'noHeight'到每个点击处理程序来切换它:
字符串
为了完整起见,相关的css类:
型
现在,高度过渡工作,没有任何延迟。
ocebsuys3#
如果有人正在阅读这篇文章,我还没有找到一个解决方案,并且使用了仅扩展的效果(这是通过将
transition
样式移动到扩展的类定义来实现的)c8ib6hqw4#
使用display:flex。这将工作:
字符串
zqry0prt5#
解决办法其实很简单。创建一个包含内容的子div。父div将是展开/折叠的div。
在加载时,父div将有一个max-height。切换时,你可以通过写
document.querySelector('.expand-collapse-inner').clientHeight;
来检查子高度,并使用JavaScript设置maxheight。在你的CSS中,你会有这个
字符串
g2ieeal76#
有一个新的纯CSS解决方案,解决了所有的问题,其他CSS解决方案。您可以使用
grid-template-rows: 0fr;
进行折叠,使用1fr;
进行展开。查看代码以了解详细信息:个字符
我在Kevin Powell的视频https://www.youtube.com/watch?v=B_n4YONte5A中发现了它
sdnqo3pr7#
您可以使用jQuery Transit来很好地完成此操作:
字符串
你绝对可以按照你的喜好整理一下,但那应该能做到你想要的。
JS Fiddle Demo