【发布时间】:2017-01-04 04:47:21
【问题描述】:
我正在使用带有 transform 属性的 CSS 过渡来在添加和删除元素时缩小它们。
但是这样做的一个问题是,这个属性不影响其他元素的流动,所以看起来好像被删除的元素缩小了,然后其余的元素突然跳跃。
如果我要为 height 属性设置动画而不是使用变换,这会很好,但在实际使用中,我使用的是可变高度的元素,所以我不知道我可以在哪些高度之间设置动画。
编辑: 有人建议为 height 属性(如上文所述不起作用)或 max-height 属性设置动画。 max-height 属性在一定程度上会起作用,但是您不能完美地对齐时间,因为过渡会不断调整 max-height 属性超过元素的实际高度,直到过渡时间结束。
这些方法的另一个问题是它没有使用您可以通过transform 属性实现的平滑动画。对象的变换会顺利进行,但是随着浏览器以不同的方式呈现这些变换,以下元素的移动会卡顿。
这是一个 JSFiddle 与我的意思(尝试添加然后删除元素,并查看元素被删除时的跳转):
var button = document.querySelector("button");
var box = document.createElement("div");
box.className = "box";
box.appendChild(document.createTextNode("Click to delete"));
button.addEventListener("click", function(e) {
var new_box = box.cloneNode(true);
new_box.addEventListener("click", function(e) {
this.className = "box deleting";
window.setTimeout(function(e) {
new_box.remove();
}, 1000);
});
this.parentNode.appendChild(new_box);
});
button {
font-size: 20pt;
}
.box {
font-size: 20pt;
margin: 10px;
width: 200px;
padding: 10px;
background: pink;
transform: scale(1, 1);
transform-origin: top left;
}
.deleting {
transform: scale(1, 0);
transition: all 1000ms ease;
}
<button>
Add Box
</button>
【问题讨论】:
标签: javascript css css-transitions css-transforms