css过渡动画失效怎么办?对高度过渡动画失效分析
Admin 2021-04-26 群英技术资讯 2873 次浏览
添加css过渡动画,能够从一种样式转变为另一种的时候有更自然、顺滑的过渡效果,美化网站页面。但是,有些朋友遇到过渡动画失效的问题,这是什么回事呢?下面我们来分析分析。
伪代码大概是这样:
{
height: unset;
transition: all 0.3s linear;
will-change: height;
&.up {
height: 0;
}
&.down {
height: unset;
}
}
把它还原成一个实际的 Demo,效果大概是这样(本质想的想法是通过给元素切换它的.up,.down类,让它实现展开、合上的动画 ):

嗯哼?很奇怪,明明给height属性设置了transition,为什么过渡动画没有触发,而是直接一步到位展开了呢?
我们期待的效果是这样的:

当上述代码设置成height: unset时,实际等同于设置了height: auto,我们的想法是希望这段代码能够容器支持文本的动态高度。每次展开的时候,过渡展开到容器本身的高度即可。
查看规范,究其原因,在于CSS transtion 不支持元素的高度为 auto 的变化。
如果把上述的height: unset替换成一个具体的高度值,则动画是生效的,譬如:
{
&.up {
height: 0;
}
&.down {
- height: unset;
+ height: 500px;
}
}

但是,我们又希望能够做到动态高度的过渡转换,是不是就没有办法了么?
嘿嘿,这里有一个非常有意思的小技巧。既然不支持height: auto,那我们就另辟蹊径,利用max-height的特性来做到动态高度的伸缩。
我们改造一下上述代码,将height: 0替换为max-height: 0,将height: auto替换成max-height: 1000px,伪代码大概是这个意思:
{
max-height: 0;
transition: max-height 0.3s linear;
&.up {
max-height: 0;
}
&.down {
max-height: 1000px;
}
}
我们估算一下实际容器的最大高度,这里的1000px只需要比最大高度高即可。但是这里不能设置的太高,最高是贴近最大的使用高度即可,后面会聊到为什么。
由于max-height只是限制文本的最大高度,当容器的实际高度没有达到限制的最大高度,将不会继续变高,看看效果:

CodePen Demo -- the height property transition unwork
整体效果还是非常的 Nice 的,当然,可能有两个小缺陷,
max-height需要用到并且有其它作用,那么可能这种方法就无法满足需求了max-height为 1000px,动画时间为 1s,缓动函数为 linear。实际动画从 0 到 200px 的高度过渡时间只有 0.2s,这一点需要非常注意~因为本来展开动画是期望将容器的高度用 1s 的时间拉伸至 1000px,实际在 200px 的时候就停止了,所以动画时间只有 0.2 秒。综上,方法是好方法,但是具体使用的时候要需要具体分析。
以上就是解决css过渡动画失效问题的分析以及解决方法,仅供大家参考,希望对大家有帮助或启发,更多css过渡动画内容大家可以关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了详解CSS中左上朝向三角形(Top-Left Triangle)的几种制作方式,主要介绍了三种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
当我们在使用样式实现多行文字一般超出都会显示省略号的效果,那么你知道这个方法要怎么去实现吗?有不少朋友对此感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
这篇文章我们来了解CSS样式层叠的相关内容,在使用CSS样式层叠时,有一些规则及注意的事项是要留意的,对此本文就给大家来介绍一下,对大家学习和理解CSS样式层叠会有一定的帮助,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
这篇文章主要介绍了html/css中float浮动的用法实例详解,需要的朋友可以参考下
对于开发者来说目前最流行的就是css3,,有很多想不到的效果都可以用CSS3实现,那么今天小编就将为大家分享用CSS3实现的垂直的手风琴折叠菜单。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008