我有一个动态高度的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中解决这个问题?
答案 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/
这会产生预期的效果吗?