У меня есть список элементов подряд. Я хочу, чтобы каждый элемент занимал минимальную ширину. Когда пользователь изменяет размер экрана, я хочу, чтобы элементы перетекали на следующую строку.
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
align-items: center;
}
div {
text-align: center;
}
<div class = "container">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
<div>Six</div>
<div>Seven</div>
<div>Eight</div>
<div>Nine</div>
<div>Ten</div>
</div>
Я хочу, чтобы последняя строка всегда занимала 100% ширины. Возможно ли это с помощью CSS Grid?
Пример: Если Nine и Ten переполнены, я хочу, чтобы элементы располагались от начала до конца и были центрированы.
One Two Three Four Five Six Seven Eight
Nine Ten
или в более тесном пространстве
One Two Three Four
Five Six Seven Eight
Nine Ten
Почему сетка? Это классический флексбокс, применяемый display: flex
к контейнеру и flex: 1
к дочерним элементам.
CSS grid
(прочитайте свойство вслух) не является подходящим инструментом для автоматизации роста детей.
CSS flex
и flex-grow
(в дочерних элементах) — при использовании CSS-обертки
.container {
display: flex; /* Don't use "grid" when "flex" is what you need */
flex-wrap: wrap; /* Or: flex-flow: row wrap; // children to new line if they overflow */
& div {
flex: 1; /* shorthand for: flex-grow:1; flex-shrink:1; flex-basis:0; */
outline: 1px solid red;
text-align: center;
padding: 1em 2em;
}
}
<div class = "container">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
<div>Six</div>
<div>Seven</div>
<div>Eight</div>
<div>Nine</div>
<div>Ten</div>
</div>
Невозможно AFAIK с CSS-Grid. CSS не может обнаружить переполнение, поэтому элементы не могут быть выбраны, поскольку они переполнены.