Проблема с точным процентным значением grid-gap: 2%;
.
Согласно spe c
процентное соотношение разрешается против нуля для определения внутреннего c размер вкладов, но разрешается по отношению к блоку содержимого коробки при размещении содержимого блока.
Это означает, что проценты будут ждать, пока содержимое не будет выложено, получить ширину / высоту родительского элемента, вычислить затем добавьте пробел между элементами сетки, что приведет к переполнению.
Demo
body * {
padding: 10px;
border: 1px solid;
}
.the_grid {
background: red;
/* inline for side-by-side comparison */
display: inline-grid;
grid-template-rows: auto;
grid-template-columns: 1fr 1fr;
}
/* same for grid-columns-gap, for the sake of this demo i only used row */
.gap {
grid-row-gap: 10%;
}
<div class="the_grid">
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
</div>
<div class="the_grid gap">
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
</div>
Решение
Не используйте процентные значения.
body * {
padding: 10px;
border: 1px solid;
}
.the_grid {
border: 1px solid;
display: grid;
grid-template-rows: auto;
grid-template-columns: 1fr 1fr;
grid-gap: 2px;
}
<div class="the_grid">
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
<div>Some</div>
</div>
Вам просто следует избегать использования процентов в сетке, поскольку они непредсказуемы, Good Read