Свойства сетки не применяются к вашим элементам содержимого, так как эти элементы находятся вне области действия.
Форматирование сетки ограничено отношениями родитель-потомок.Это означает, что контейнер сетки всегда является родительским, а элемент сетки всегда дочерним.Потомки контейнера сетки за пределами дочерних элементов не являются частью макета сетки и не будут принимать свойства сетки.
Поскольку ваши элементы содержимого находятся на два уровня ниже контейнера сетки (#table
), что делает их внуками, а не детьми.они не являются элементами сетки и не будут принимать свойства сетки.
Подробнее: Свойства сетки не работают с элементами внутри контейнера сетки
Существуют исключения изправило выше, но у них нет особой поддержки браузера.
display: contents
рассмотрен в другом ответе на этот пост .Это позволяет родительскому элементу игнорировать элемент как содержащий блок, поэтому родитель распознает своих внуков как нормальных детей.Но на данный момент этот метод практически бесполезен для производственных целей, так как он имеет слабую поддержку браузера .
Более подходящее решение в этом случае будет display: subgrid
, что позволяет потомкамконтейнер сетки за пределами дочерних элементов (т. е. дочерних элементов элементов сетки) для соблюдения линий контейнера.Но эта функция не поддерживает браузер.
Подробнее: Позиционирование содержимого элементов сетки в основном контейнере (функция подсетки)
Если вы хотите чистый CSSРешение, может быть, сочетание сетки и flex может помочь.
Вот общая концепция.Без изменений в HTML.
#table {
display: grid;
grid-template-columns: 1fr;
}
#table > div {
display: flex;
}
#table > div > div {
flex: 1;
}
<div id="table">
<div>
<div>
this is something long on the first row
</div>
<div>
short 1st row
</div>
</div>
<div>
<div>
wazaa 2nd row
</div>
<div>
wazii 2nd row
</div>
</div>
</div>