当一个元素不设置height时,它的默认值是 auto,浏览器会计算出实际的高度。宽度类似。
但如果想给一个 height:auto 的块级元素的高度添加 CSS3 动画时,该怎么办呢?
从
MDN
的描述可以查到 CSS 支持动画的属性中的 height 属性如下:
height
:
yes, as a
length
,
percentage
or calc(); // 意思是当 height 的值是 length,百分比或 calc() 时支持 CSS3 过渡。
所以当元素 height : auto 时,是不支持 CSS3 动画的。
那么如何处理 auto 的过渡动画呢?解决方案有2个:
1、第一种:通过 JS 获取精确的 height 值的方法 —— 不推荐,特别是在VUE这种框架下不推荐使用。
2、第二种:其实我们可以使用 max-height 代替 height。
只要我们设置一个肯定比元素自增长大的高度值就可以了。
当然,因为是根据 max-height 值进行过渡效果,所以最好不要大得离谱,否则动画效果不理想。
.s-tag-more{
transform rotate(270deg)
transition:transform 0.6s;
.s-tag-box{
max-height 30px
overflow: hidden;
transition:max-height 1s;
// 动画效果如下:
.tag-container{
&:hover .s-tag-box{
max-height 200px
&:hover .s-tag-more{
transform rotate(90deg)
这样即可实现一个确定高度到自动高度的过渡动画效果。