Cal*_*Alt 21 css css3 css-grid
我有两个嵌套在网格中的网格.不幸的是,右侧嵌套网格.grid-3设置了行的高度,因此左右网格都是相同的高度,额外的空间在具有类的div之间共享.right.如何设置右嵌套网格的行以调整内容的大小,因此它们与左嵌套行的高度相同?
div {
border: 1px dotted black;
}
.grid-2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-auto-rows auto;
}
.grid-3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-rows auto;
}
.left {
background-color: red;
}
.right {
background-color: green;
}Run Code Online (Sandbox Code Playgroud)
<div class="grid-2">
<div class="grid-2">
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
</div>
<div class="grid-3">
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
Tem*_*fif 20
你可以尝试minmax(min-content, max-content) 参考
div {
border: 1px dotted black;
}
.grid-2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-auto-rows: minmax(min-content, max-content);
}
.grid-3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-rows: minmax(min-content, max-content);
}
.left {
background-color: red;
}
.right {
background-color: green;
}Run Code Online (Sandbox Code Playgroud)
<div class="grid-2">
<div class="grid-2">
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
</div>
<div class="grid-3">
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
Vad*_*kov 17
默认情况下,网格项会延伸到所有网格单元区域.如果您希望网格的高度适合内容,那么您可以在此处选择此选项:
使用align-items网格容器设置所有项目的对齐方式(默认值为align-items: stretch).因此,只要设置align-items: start了grid-2.演示:
div {
border: 1px dotted black;
}
.grid-2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
align-items: start;
}
.grid-3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
.left {
background-color: red;
}
.right {
background-color: green;
}Run Code Online (Sandbox Code Playgroud)
<div class="grid-2">
<div class="grid-2">
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
</div>
<div class="grid-3">
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
使用align-self(默认值为align-self: stretch)单独设置网格项的对齐方式.因此,只要设置align-self: start了grid-3.演示:
div {
border: 1px dotted black;
}
.grid-2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
.grid-3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
align-self: start;
}
.left {
background-color: red;
}
.right {
background-color: green;
}Run Code Online (Sandbox Code Playgroud)
<div class="grid-2">
<div class="grid-2">
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
</div>
<div class="grid-3">
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
使用margin具有auto值的属性单独设置网格项的对齐方式.网格单元的自动边距占用任何方向的所有可用空间.因此,只要设置margin-bottom: auto了grid-3.演示:
div {
border: 1px dotted black;
}
.grid-2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
.grid-3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
margin-bottom: auto;
}
.left {
background-color: red;
}
.right {
background-color: green;
}Run Code Online (Sandbox Code Playgroud)
<div class="grid-2">
<div class="grid-2">
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
<div class="left">L</div>
</div>
<div class="grid-3">
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
<div class="right">R</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
如果您希望右网格占用所有父级垂直空间但使其单元格适合内容,请使用此答案.
小智 8
你也可以试试grid-auto-rows: fit-content(1em);。当然,使用任何对您有意义的尺寸。我还尝试了 Temani ( minmax(min-content, max-content))描述的方法,并且在呈现我的 HTML 时结果是相同的。
根据Elad Schechter - Medium 的说法,
fit-content 函数接受一个参数,即最大值。... fit-content() 函数类似于使用 minmax() 函数,最小值为 0。一个关键区别:minmax() 更可能占用允许的最大空间,而 fit-content不会占用多余的空间。
您的需求将决定是否fit-content比使用更合适minmax,反之亦然。