给不定高度/宽度元素添加CSS3 transition动画

  当一个元素不设置height时,它的默认值是 auto,浏览器会计算出实际的高度。宽度类似。

  但如果想给一个 height:auto 的块级元素的高度添加 CSS3 动画时,该怎么办呢?

  从 MDN 的描述可以查到 CSS 支持动画的属性中的 height 属性如下:

  height :yes, as a lengthpercentage 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)
  }
}

  这样即可实现一个确定高度到自动高度的过渡动画效果。

posted @ 2021-05-27 10:28  古兰精  阅读(2023)  评论(0编辑  收藏  举报