时间:2021-05-08
这个问题源自于掘金上的一个留言,一个朋友问到,为什么我下面这段代码的高度过渡动画失效了?
伪代码大概是这样:
{ 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 的,当然,可能有两个小缺陷,
因为本来展开动画是期望将容器的高度用 1s 的时间拉伸至 1000px,实际在 200px 的时候就停止了,所以动画时间只有 0.2 秒。综上,方法是好方法,但是具体使用的时候要需要具体分析。
到此这篇关于CSS 动态高度过渡动画效果的实现的文章就介绍到这了,更多相关css高度过渡动画内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本篇文章主要介绍了css3动画过渡实现鼠标跟随导航效果,分享给大家,具体如下:鼠标跟随导航效果效果知识点:html/css布局思维,div+css讲解,css3
CSS3动画和JS动画的区别JS实现的是帧动画CSS3实现的是补间动画帧动画:使用定时器,每隔一段时间,更改当前的元素补间动画:过渡(加过渡只要状态发生改变产生
过渡动效提供了transition的封装组件,添加过渡动画,通过添加或删除css类名来实现。过渡的css类名:v-enter 进入过渡的开始状态v-enter
原文地址:https://vien.tech/article/154CSS实现鼠标移动到图片或按钮上缓慢变大,添加过渡动画效果,自定义动画时间。鼠标指向元素,元
html结构XML/HTMLCode复制内容到剪贴板css代码,:before负责颜色,:after是那个白色小圆点,切换时的过渡效果用css3的动画实现。CS