Как сделать сетку, чтобы блоки заполняли пробелы?
То, что вы хотите, флексы не умеют. У флексов ряд будет всегда по высоте самого высокого блока, блоки из следующего ряда туда не попадут.
Смотрите в сторону плагинов masonry, isotope
есть вариант поменять flex-direction на column. Но как это будет точно работать, не проверял