Просто оберните ваши элементы столбцов внутри div и все внутри flexbox или grid-контейнера.
Образец: https://codepen.io/antekai/pen/NOGEYB?editors=1100
HTML
FLEXBOX SOLUTION
<div class="flex-container">
<div>
<div class="item">a1</div>
<div class="item">a2</div>
<div class="item">a3</div>
</div>
<div>
<div class="item">b1</div>
<div class="item">b2</div>
<div class="item">b3</div>
</div>
</div>
CSS GRID SOLUTION
<div class="grid-container">
<div>
<div class="item">a1</div>
<div class="item">a2</div>
<div class="item">a3</div>
</div>
<div>
<div class="item">b1</div>
<div class="item">b2</div>
<div class="item">b3</div>
</div>
</div>
CSS
//flexbox solution
.flex-container{
display:flex;
flex-flow:row wrap;
}
// CSS Grid solution
.grid-container{
display:grid;
grid-template-columns: repeat(auto-fit,minmax(200px,1fr))
}
//helper class
.item{
height:100px;
width:200px;
background-color: black;
color:white;
margin:10px;
}
РЕДАКТИРОВАТЬ
По следующей ссылке вы можете найти расширенное решение для случая неравной высоты предметов.Для решения flexbox - динамическое расширение на основе JS, а для сетки CSS - статическое улучшение на основе CSS.Логика улучшений та же: добавьте пустой элемент с высотой, равной разнице высот между соответствующими элементами (например, пустой элемент после b1 с высотой = a1-b1, когда a1-b1> 0, что приводит к вертикальному выравниванию a2 и b2).Усовершенствованное решение flexbox может быть расширено до решения CSS grid, и наоборот.
Пример: https://codepen.io/antekai/pen/OBMyqv
Примечание: для расширения на основе JS (решение flexbox) при изменении размера области просмотра междуточку останова (в 400px) просто наберите что-нибудь (на панели html, css или js), чтобы кодовая ручка обновила live-reload.