具有动态高度的元素上的CSS高度动画

时间:2017-05-21 14:52:29

标签: css css3 css-animations

我有一个动态高度的div,我想在高度增长时使用动画。问题是我无法设置div的高度(它必须是动态的),所以没有什么可以动画的。

.text {
  transition: all .3s ease-in-out;
  min-height: 20px;
  max-height: 200px;
  overflow: auto;
}

.max {
  transition: all .3s ease-in-out;
  height: 200px;
  min-height: 200px;
}

https://jsfiddle.net/abk7yu34/5/

请注意,收缩动画有效,因为div具有最小高度。

有没有办法在纯CSS中解决这个问题?

2 个答案:

答案 0 :(得分:2)

删除height: 200px;,因此您同时拥有展开和折叠动画。

另外,使用以下命令在新行上添加动画:

@keyframes lineInserted {
  from {
    height: 0;
  }
  to {
    height: 20px; /* your line height here */
  }
}
div[contenteditable] > div {
  animation-duration: 0.3s;
  animation-name: lineInserted;
  transition: height 0.3s;
}

document.querySelector('#button').addEventListener('click', function() {
  document.querySelector('.text').classList.toggle('max');
});
.text {
  background: green;
  color: #fff;
  transition: all .3s ease-in-out;
  min-height: 20px;
  max-height: 200px;
  overflow: auto;
}

.max {
  transition: all .3s ease-in-out;
  min-height: 200px;
}

@keyframes lineInserted {
  from {
    height: 0;
  }
  to {
    height: 20px; /* your line height here */
  }
}
div[contenteditable] > div {
  animation-duration: 0.3s;
  animation-name: lineInserted;
  transition: height 0.3s;
}
<div class="text" contentEditable="true"></div>
<button id="button">Click</button>

答案 1 :(得分:2)

尝试删除文本类的max-height属性并转换为新的(动态)最小高度

.text {
    background: green;
    color: #fff;
    transition: min-height .3s ease-in-out;
    min-height: 20px;
    overflow: auto;
}

.max {
    transition: min-height .3s ease-in-out;
    min-height: 200px;
}

https://jsfiddle.net/Alessi42/abk7yu34/8/

这会产生预期的效果吗?