css设置height 由0到auto的动画效果

transition动画是将属性从初始值过度到结束值!
当你设置height 显示由 0 到 auto(由内容决定), 隐藏由 auto(由内容决定) 到 0
实际上是没有结束值的因为css只能赋值,不能获取值auto, 内容的多少产生的高度是在css执行之后产生的,而不是css所赋值的所以transition获取不到最终的高度,所以没有效果,当然可以通过js实现,在这里就不做讨论,一下讨论的是纯css实现或者说较好实现。

css3 transition动画的一些限制,比如说一个高度为auto的div,你是不能够使用transition: height来生成平滑的伸展效果的,按照css3的说法,大概是只有固定值之间,可以,而设置auto自然是不可以的。

下面是解决替代方案重点内容

*用js获得高度(暂不考虑)
用transform实现;
用max-height实现;*

用transform实现是个很精巧的主意,我们知道transform中有scale的属性,可以变换一个元素的尺寸,所以将scale变换应用到transition中,
// transform: scale(1,0);
transform-origin: center top;
但对应的要设置中心点,而且有个问题是难以避免的,transform和relative的布局是一样的,不管你怎么变,你原来占据的空间是一直在那儿的。

此外,使用max-height吧。你会惊喜的发现max-height同样可以在transition中使用,配合overflow:hidden,给一个足够大的max-height,就能比较完美的模拟出height变化的效果了。当然,既然是“模拟”,总有些与正版的差距。稍微考虑下就能想到,如果我们真实的高度比max-height小,那max-height动画展示的时候,直到max-height与真实高度一致为止,你是看不到动画效果的。隐藏的时候便会有卡顿的效果。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值