Как сделать без пустых дивов?

сейчас выглядит довольно странно

http://codepen.io/Olya097/pen/xxjrvRb

.row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.block {
  width: calc(20% - 10px);
  height: 100px;
  background-color: #faf;
}

* {
  box-sizing: border-box;
}
<div class="row">
  
  <div class="block">content</div>
  <div class="block"></div>
    <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>
  
    <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>
    <div class="block"></div>
  <div class="block">content</div>
  
      <div class="block">content</div>
  <div class="block">content</div>
  <div class="block"></div>
    <div class="block">content</div>
  <div class="block"></div>
</div>


Ответы (2 шт):

Автор решения: DronDron

В css есть псевдокласс :empty. Просто используйте его!

.row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.block {
  width: calc(20% - 10px);
  height: 100px;
  background-color: #faf;
}

.block:empty {
  display: none;
}

* {
  box-sizing: border-box;
}
<div class="row">
  
  <div class="block">content</div>
  <div class="block"></div>
    <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>
  
    <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>
    <div class="block"></div>
  <div class="block">content</div>
  
      <div class="block">content</div>
  <div class="block">content</div>
  <div class="block"></div>
    <div class="block">content</div>
  <div class="block"></div>
</div>

→ Ссылка
Автор решения: UModeL

Если нужно исключить отображение полностью пустых блоков, то используйте псевдокласс :empty :

* { box-sizing: border-box; }

.row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.block {
  width: calc(20% - 10px);
  height: 100px;
  background-color: #faf;
}
.block:empty { display: none; }
<div class="row">
  <div class="block">content</div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>

  <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>
  <div class="block"></div>
  <div class="block">content</div>

  <div class="block">content</div>
  <div class="block">content</div>
  <div class="block"></div>
  <div class="block">content</div>
  <div class="block"></div>
</div>

Если же нужно блоки скрыть, не удаляя из разметки и не ломая поток, то можно использовать visibility: hidden вместо display: none :

* { box-sizing: border-box; }

.row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.block {
  width: calc(20% - 10px);
  height: 100px;
  background-color: #faf;
}
.block:empty { visibility: hidden; }
<div class="row">
  <div class="block">content</div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>

  <div class="block"></div>
  <div class="block">content</div>
  <div class="block">content</div>
  <div class="block"></div>
  <div class="block">content</div>

  <div class="block">content</div>
  <div class="block">content</div>
  <div class="block"></div>
  <div class="block">content</div>
  <div class="block"></div>
</div>

В перспективе ожидается поддержка псевдокласса :blank, который считает пустыми даже те блоки, где только пробельные символы.

→ Ссылка