Вот простой пример в vanillaJS с CSS-переходом
Jsfiddle demo
Обновите свой стиль, добавив переход для.block
элемент
CSS
.block {
width: 200px;
height: 20px;
border: 1px solid black;
margin: 20px 20px 0;
max-height: 500px;
transition: opacity 0s 0s, margin .25s 0s, max-height .25s 0s;
}
.removedBlock {
box-sizing: border-box;
opacity: 0;
margin: 0;
max-height: 0;
}
, чтобы функция могла запускать анимацию max-height
, добавляя removedBlock
класс
<div id="block1" class="block">
This is block 1
</div>
<div id="block2" class="block">
This is block 2
</div>
<div id="block3" class="block">
This is block 3
</div>
<button type="button" onclick="removeBlock('block2');">
Remove block 2
</button>
JS
function removeBlock(id) {
var block = document.getElementById(id);
block.classList.add('removedBlock');
}
При удалении элемент исчезает из-за того, что для opacity
установлено значение 0
, тогда margin
и max-height
сделаютблок рушится.
Обратите внимание, что, поскольку переход не может быть инициирован в / из значения auto
, для этой цели я установил огромный стартовый max-height
.Если вы хотите увидеть более плавный переход, измените это свойство на более низкое значение или просто увеличьте длительность transition
.
Более совершенная версия может вместо этого получить height
элемента перед применением перехода, например
function removeBlock(id) {
var block = document.getElementById(id);
var blockHeight = block.offsetHeight;
block.style.height = blockHeight + 'px';
block.classList.add('removedBlock');
}
, поэтому стиль становится
.block {
width: 200px;
height: 20px;
border: 1px solid black;
margin: 20px 20px 0;
transition: opacity 0s 0s, margin .5s 0s, height .5s 0s;
}
.removedBlock {
box-sizing: border-box;
opacity: 0;
margin: 0;
height: 0 !important;
}
JsFiddle