Так как мы не можем разрешить процент вначале, сетка сначала вычисляет высоту, учитывая содержание как это:
console.log(document.querySelector('.grid').offsetHeight)
.grid {
display: grid;
background-color: blue;
}
.grid-1 {
background-color: red;
opacity:0.5;
}
<div class="grid">
<div class="grid-1">
test
</div>
<div class="grid-1">
test
</div>
<div class="grid-1">
test
</div>
</div>
Затем, используя эту высоту, будет вычислен зазор, а затем добавлен в сетку.Это не приведет к повторному вычислению высоты сетки, так как это создаст цикл, таким образом, вы получите переполнение.
console.log(document.querySelector('.grid').offsetHeight)
console.log(document.querySelector('.grid-1:nth-child(2)').offsetTop - document.querySelector('.grid-1:nth-child(1)').offsetTop - document.querySelector('.grid-1:nth-child(1)').offsetHeight)
.grid {
display: grid;
grid-gap:100%;
background-color: blue;
margin-top:50px;
}
.grid-1 {
background-color: red;
opacity:0.5;
transform:translateY(-100%);
}
<div class="grid">
<div class="grid-1">
test
</div>
<div class="grid-1">
test
</div>
<div class="grid-1">
test
</div>
</div>
Как видите, я использовал 100% и добавил немного трансфомации, чтобы увидеть, что зазор равен начальной высоте (Код JS также подтверждает это) .
Тривиальное исправление состоит в том, чтобы избегать процентных значений и использовать пиксельные значения, чтобы браузер включал их в первоначальный расчет.Во всех случаях использование процентного значения не очень хорошо, если вы не знаете, "процент чего?"
.grid {
display: grid;
grid-gap:50px;
background-color: blue;
margin-top:50px;
}
.grid-1 {
background-color: red;
opacity:0.5;
}
<div class="grid">
<div class="grid-1">
test
</div>
<div class="grid-1">
test
</div>
<div class="grid-1">
test
</div>
</div>
Вот еще примеры, где процентные значения оцениваются позже и создают нежелательные результаты:
CSS Grid - ненужное словоперерыв
Почему процентный отступ нарушает мой элемент flex?