transform
プロパティを持つCSSトランジションを使用して、要素を追加したり削除したりするときに縮小します。CSSトランスフォームを他の要素のフローに影響を与える方法
ただし、このプロパティは他の要素のフローに影響を与えないため、削除される要素が縮小してから、残りの要素が突然ジャンプするように見えます。
トランスフォームを使用する代わりにheightプロパティをアニメーション化すると、実際の使用では可変高さの要素が使用されるため、アニメーション化できる高さはわかりません。
編集:人々は(上述のように動作しません)height
財産、またはmax-height
プロパティをアニメーション示唆しています。 max-height
プロパティはある程度は機能しますが、トランジションが移行時間の最後まで要素の実際の高さを超えてプロパティを調整し続けるので、タイミングを完全に調整することはできません。
これらのアプローチのもう1つの問題は、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>
downvotingしませんでしたが、あなたの答えをテストしましたか?それは最高でジャンキーです。 –
@RyanWhealeこれは、500px〜800pxのような既知の高さ範囲を持つ要素で実際に問題なく動作しますが、アニメーションの時間は適用される最大高さに依存するという問題があります。この可能性を指摘したかっただけです:) – sabithpocker
Ok、私は解決策を示すためにいくつかの変更を加えました!しかし、これは再び特定のシナリオでのみ機能します:) – sabithpocker