Можно ли распределять блоки таким образом используя только CSS?
Можно. Изучайте Flex
тут без js не разобраться - колонки разной высоты
советую masonry
https://masonry.desandro.com/
но возможно посмотреть в сторону этого
w3bits.com/labs/css-masonry