и одному из дочерних элементов, я установил значение grid-column-end больше 2, он генерирует пустые столбцы с их собственным интервалом сетки.
Чтобы быть более точным, это больше 3, а не 2. При наличии 2 столбцов у вас будет 3 строки (1,2,3), поэтому вы можете разместить элемент в обоих столбцах, установив grid-column: 1 / 3
https://www.w3.org/TR/css-grid-1/#placement
Затем, как указано в комментарии, вам необходимо понять концепцию явной и неявной сетки. Чтобы упростить задачу, вы определяете явную сетку, а неявная автоматически
Три свойства grid-template-rows
, grid-template-columns
и grid-template-areas
вместе определяют явную сетку контейнера сетки . Окончательная сетка может оказаться больше из-за того, что элементы сетки размещены за пределами явной сетки ; в этом случае будут созданы неявные дорожки, размер этих неявных дорожек будет определяться свойствами grid-auto-rows
и grid-auto-columns
. ref
Также
Если элемент сетки расположен в строке или столбце, размер которого явно не равен grid-template-rows
или grid-template-columns
, создаются неявные дорожки сетки для его удержания. Это может произойти либо путем явного позиционирования в строке или столбце , выходящего за пределы диапазона , либо с помощью алгоритма автоматического размещения, создающего дополнительные строки или столбцы. Свойства grid-auto-columns
и grid-auto-rows
определяют размер таких неявно созданных дорожек. ref
Если вашего определения сетки недостаточно, чтобы содержать все элементы, для этой цели создаются дополнительные строки / столбцы, а окончательный сетка называется неявной сеткой. Это логично, поскольку не имеет смысла иметь элементы сетки, которые не принадлежат сетке.
В вашем случае использование grid-column:1/13
создаст в общей сложности 12 столбцов, где 2 явно определены и оставшееся будет auto
и, конечно же, 11 пробелов.
Вы также можете построить целую сетку без какого-либо явного определения и только с использованием неявного.
Пример:
.box {
display:grid;
grid-gap:10px;
}
.box > * {
height:50px;
background:red;
}
/* the below will make the grid having 3 columns */
.box > *:nth-child(3) {
grid-column:3;
background:green;
}
<div class="box">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
имеют ли неявные правила сетки более высокий приоритет, чем явные? Мне это кажется нелогичным.
Дело не в приоритете, но вы можете видеть неявную сетку как необходимое расширение явной, чтобы содержать все элементы.