【发布时间】:2022-01-11 20:12:16
【问题描述】:
我想利用 CSS Grid 来均匀地调整属于同一 CSS Grid 轴的那些元素:
[class*=' container-grid-'], [class^='container-grid-'] {
/* give margin-bottom to all kinds of "container-grid-", see https://stackoverflow.com/a/13352103/923560 */
margin-bottom: 2rem;
}
[class*=' container-grid-'] > .col, [class^='container-grid-'] > .col {
display: contents;
}
.container-grid-2by2 {
display: grid;
grid-auto-flow: column;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, auto);
row-gap: 0;
column-gap: 1rem;
}
.container-grid-3by3 {
display: grid;
grid-auto-flow: column;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, auto);
row-gap: 0;
column-gap: 1rem;
}
.red {
background-color: red;
}
.green {
background-color: green;
}
.blue {
background-color: skyblue;
}
.limit-width {
max-width: 20rem;
background-color: silver;
}
<div class="limit-width">
<h1><code>.container-grid-2by2</code></h1>
<div class="container-grid-2by2">
<div class="col">
<div class="red">
Foo1
</div>
<div class="green">
Bar1
</div>
</div>
<div class="col">
<div class="red">
Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2
</div>
<div class="green">
Bar2 Bar2 Bar2 Bar2 Bar2 Bar2 Bar2
</div>
</div>
</div>
</div>
<div class="limit-width">
<h1><code>.container-grid-3by3</code></h1>
<div class="container-grid-3by3">
<div class="col">
<div class="red">
Foo1
</div>
<div class="green">
Bar1
</div>
<div class="blue">
Baz1
</div>
</div>
<div class="col">
<div class="red">
Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2 Foo2
</div>
<div class="green">
Bar2 Bar2 Bar2 Bar2 Bar2 Bar2 Bar2
</div>
<div class="blue">
Baz3
</div>
</div>
<div class="col">
<div class="red">
Foo3 Foo3 Foo3 Foo3 Foo3 Foo3 Foo3 Foo3
</div>
<div class="green">
Bar3 Bar3 Bar3 Bar3 Bar3 Bar3 Bar3 Bar3
</div>
<div class="blue">
Baz3
</div>
</div>
</div>
</div>
如您所见,同一 CSS 网格行轴 上的元素具有相同的高度,例如文本内容很少 (Foo1) 的单元格会拉伸以匹配具有大多数文本内容的单元格的高度 (Foo2 Foo2 Foo2 ...)。太棒了,这正是我想要的!
HTML 遵循以下结构:<div class="container-grid-*"> 元素充当 CSS 网格容器;里面有几个<div class="col">作为列;然后在这些列中的实际内容 HTML 元素。 .col 元素使用display: contents; 将CSS grid cell 确定“委托”到实际内容的HTML 元素。
但现在,我的 CSS 需要为每一列和每一行计数明确的规则:.container-grid-2by2、.container-grid-3by3、.container-grid-2by3、.container-grid-3by2 等。
应该有办法重构这个,不是吗?
是否有任何 CSS 技巧可以自动导出 CSS 网格列数和行数?
在我的情况下,总是可以假设在一个容器中,每一列都有相同数量的实际 HTML 内容元素;例如在一个容器中,所有的列都会有 x 个元素。
【问题讨论】:
标签: css-grid