Вы устанавливаете высоту элементов сетки напрямую, а не определяете какие-либо строки в контейнере сетки. Следовательно, алгоритм сетки должен создавать строки для размещения областей сетки. Нужно всего лишь создать две строки для завершения макета. Вот почему под полями 2 и 3 имеется большой зазор. В поле 1, которое является самым высоким, задается высота верхнего ряда.
Требуемый макет требует не менее трех рядов.
Попробуйте это подход: установите строки (и высоту) на уровне контейнера, затем установите области сетки.
.container {
display: grid;
grid-template-columns: 1fr 2fr 2fr;
grid-template-rows: repeat(3, 150px);
grid-gap: 10px;
}
.box-1 {
grid-column: 1;
grid-row: 1 / span 2;
background-color: lightgreen;
}
.box-2 {
grid-column: 2;
grid-row: 1;
background-color: lightsalmon;
}
.box-3 {
grid-column: 3;
grid-row: 1;
background-color: lightsalmon;
}
.box-4 {
grid-column: 2 / -1;
grid-row: 2 / 4;
background-color: lightskyblue;
}
.box-5 {
grid-column: 1;
grid-row: 3;
background-color: lightseagreen;
}
<div class="container">
<div class="box-1">1</div>
<div class="box-2">2</div>
<div class="box-3">3</div>
<div class="box-4">4</div>
<div class="box-5">5</div>
</div>
Если вы хотите больше опций для определения размеров областей сетки , увеличьте количество строк / столбцов.
Для Например, вместо этого:
grid-template-rows: repeat(3, 150px)
... вы можете сделать это:
grid-template-rows: repeat(9, 50px)
... затем распределить области сетки по строкам по мере необходимости.