Хорошо, если я правильно понимаю проблему, я думаю, что вижу проблему.
Вот мое решение:
.grid {
display: grid;
grid-template-columns: repeat(11, 1fr);
grid-gap: 20px;
align-items: start;
background: pink;
}
.grid>.left {
grid-column: 1 / span 3;
grid-row: 1;
background: green;
}
.grid>.recent {
grid-column: 1 / span 3;
grid-row: 2 / span 2;
background: red;
}
.grid>.middle {
grid-column: 4 / span 5;
grid-row: 1 / span 4;
background: gray;
}
.grid>.right {
grid-column: 9 / span 3;
grid-row: 1 / span 3;
background: brown;
}
<div class="grid">
<div class="left">
Left
</div>
<div class="recent">
Recent
<br> Testing
<br>
</div>
<div class="middle">
Middle
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
<br>text<br>
</div>
<div class="right">
Right
</div>
</div>
То, что вы делали в своем ответе, было:
.left
.занимает строку 1, .recent
занимает строки 2 и 3, это создает третий ряд внизу, включая разрыв в 20 пикселей. .middle
занимает строки 1 и 2, но действительно большой, поэтому он выталкивает строку 2 и делает ее массивной.
То, что я сделал, сделано .middle
пролет 4, поэтому он занимает строки 1,2,3,4.Это позволяет .recent
иметь собственные строки небольшого размера, а .middle
четвертая строка (по умолчанию все строки имеют автоматический размер) занимает столько места, сколько требуется для роста.