To problem z CSS. Wszystkie elementy maja ustawiony float: left. I problem pojawia się gdy element w rzędzie wyżej jest nieco wyższy niż pozostałe. Wtedy element w następnym rzędzie ustawia się nie od początku w pierwszej kolumnie tylko od tego najwyższego. De facto nie ma tam rzędów tylko jeden rząd a elementy w nim łamane są biorąc pod uwagę ich ilość jaka może się zmieścić w kontenerze. Maja bowiem stałą szerokość ale dynamiczna wysokość.

Najwidoczniej zostało to zaprojektowane albo nieumiejętnie albo dawno temu i nie wytrzymało próby czasu.

Rozwiązaniem byłoby:

1) ustalenie jednej wysokości dla elementów i np. właściwości CSS columns - słabe
2) wprowadzenie prawdziwej siatki w oparciu o strukturę Bootstrapa albo flex - całkiem niezłe
3) wykorzystanie układu masonry czyli podobnie jak na Pintereście, najprościej byłoby skorzystać ze skryptu Salvattore https://salvattore.js.org/ - IMHO najlepsze rozwiązanie