Одной из возможностей является использование гибких столбцов и сортировка элементов в зависимости от их положения по модулю 3. Кроме того, вставьте псевдоэлементы для принудительного переноса
.parent {
display: flex;
flex-flow: column;
flex-wrap: wrap;
height: 500px;
width: 300px;
}
.child {
margin: 5px;
width: 100px;
background-color: lightgreen;
transition: padding 1s;
}
.child:hover {
padding: 30px 0px;
}
.child:nth-child(3n + 1) {
order: 1;
}
.child:nth-child(3n + 2) {
order: 10;
}
.child:nth-child(3n) {
order: 20;
}
.parent:before,
.parent:after {
content: "";
width: 0px;
height: 999px;
}
.parent:before {
order: 5;
}
.parent:after {
order: 15;
}
<div class="parent">
<div class="child" style="height:100px">1</div>
<div class="child" style="height:120px">2</div>
<div class="child" style="height:200px">3</div>
<div class="child" style="height:100px">4</div>
<div class="child" style="height:50px">5</div>
<div class="child" style="height:100px">6</div>
<div class="child" style="height:100px">7</div>
<div class="child" style="height:100px">8</div>
<div class="child" style="height:100px">9</div>
</div>