【css】transition对height:auto无效的解决办法

CSS3的transition可以作用于大部分属性值为数值之类的属性,包括width、height、font-size、color、opacity等。但是将transition应用于height:auto;时,浏览器会识别height值为0,因此无法直接从height: 0;过渡到height: auto;。

方法一(简单)、将过渡应用于max-height属性,通过设置一个大于元素所可能达到的最大高度值。代码如下:

.wrap{
    max-height: 0;
    overflow: hidden;
    -webkit-transition: all .3s ease-in;
    transition: all .3s ease-in;
}
.div1 {
    max-height: 800px; /* 假设元素的最大可能高度为800px */
}

缺陷是,在元素最大可能高度与实际高度相差比较大时,由于过渡总是从最大可能高度过渡到0,因此会看到过渡效果有明显延迟

方法二、通过JS修正height:auto;不能过渡的问题,从而也避免了第一种方法的缺陷。思路是:

先不设置最大可能高度,先在隐藏状态下获取该元素的实际高度,通过设置el.style.visibility = ‘hidden’;隐藏该元素;
要显示元素时,通过DOM2 Style的insertRule()方法将所获取的高度插入到样式表中,再添加一个class,触发过渡效果;
待要隐藏元素时,再通过deleteRule()把刚才添加的CSS规则移除,并去掉添加的class; 由于改变样式表,所以导致了全局重绘,性能不如第一种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值