Одним из решений является указание max-width
для дочернего элемента, опирающегося на единицу окна просмотра, поскольку процентные значения относятся к размеру дорожки, определенной minmax()
, и не могут использоваться.Это решение не является универсальным, и вам необходимо настроить значение в зависимости от каждой ситуации.
В вашем случае, например, мы можем использовать 100vw
, поскольку контейнер является единственным элементом в теле и принимаетвся ширина:
.container {
display: grid;
grid-gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
.child {
display: flex;
align-items: center;
justify-content: center;
padding: 5px;
border: 3px solid #a07;
max-width:100vw;
box-sizing:border-box; /* Don't forget this !*/
}
body {
margin:0;
}
<div class="container">
<div class="child">
text
</div>
<div class="child">
text
</div>
<div class="child">
text
</div>
<div class="child">
text
</div>
<div class="child">
text
</div>
</div>
В случае наличия большего количества элемента или некоторого отступа / поля необходимо учитывать их в расчете max-width
:
.container {
display: grid;
grid-gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
.child {
display: flex;
align-items: center;
justify-content: center;
padding: 5px;
border: 3px solid #a07;
max-width:calc(100vw - 40px); /*we remove the body margin*/
box-sizing:border-box;
}
body {
margin:0 20px;
}
<div class="container">
<div class="child">
text
</div>
<div class="child">
text
</div>
<div class="child">
text
</div>
<div class="child">
text
</div>
<div class="child">
text
</div>
</div>
Как будто у нас больше нет 2 ограничений, а 3:
- Минимальный размер ячейки сетки
200px
- Ячейка сетки заполняет оставшееся пространство
- Максимальный размер элемента внутри ячейки сетки определяется размером экрана. (ограничение усадки, которое мы пропустили)