grid属性是否有flex-grow
的类似物?
我想我的网格区域,以容纳他们收到的内容,但有一些地区采取更多的地方比其他人一样flex-grow
为flex
。
实际上,在下面的例子中,我想
turquoise
是不可见的,因为它容纳其内容。footer
也是不可见的,因为它没有内容。- 中间部分占用页面的剩余部分,如
flex-grow
。
实际上,我喜欢这个代码:
.ctnr {
display: grid;
min-height: 100vh;
grid-template-areas:
"header header"
"nav main"
"footer footer";
}
.test {
background: black;
height: 1rem;
}
header {
grid-area: header;
background: turquoise;
}
nav {
grid-area: nav;
background: grey;
}
main {
grid-area: main;
}
footer {
grid-area: footer;
background: yellow
}
个字符
像这样的代码:
.ctnr {
display: flex;
flex-direction: column;
height: 100vh;
}
.panel {
flex-grow: 1;
display: flex;
}
header {
flex-grow: 0;
background: turquoise;
}
nav {
min-width: 10rem;
background: grey
}
footer {
background: yellow
}
<div class="ctnr">
<header>hey</header>
<div class="panel">
<nav></nav>
<main></main>
</div>
<footer></footer>
</div>
的字符串
没有div.panel
,也没有添加任何额外的标记。
我想这样做的原因是合理的,那个额外的div
元素让我很恼火。
2条答案
按热度按时间vltsax251#
CSS Grid提供了
fr
单元,其功能类似于flex-grow
。flex-grow
将容器中的可用空间分配给Flex项,而fr
单元将容器中的可用空间分配给行/列。7.2.3.柔性灯罩:
fr
单元灵活长度或
<flex>
是单位为fr
的维度,它表示网格容器中自由空间的一部分。(Note
flex-grow
应用于 flex items,而fr
长度应用于 grid containers。)所以在你的网格中,你有三行:
1.第一行是标题。您希望内容设置其高度。因此其高度设置为
auto
。1.最后一行是页脚。您希望内容设置其高度。因此其高度设置为
auto
。1.中间一行包含
nav
和main
元素。您希望该行占据所有剩余的垂直空间。因此其高度设置为1fr
。个字符
jsFiddle demo
jfgube3f2#
添加到接受的答案,与我的情况:有时一个
<header>
元素,并始终<main>
和<footer>
元素将出现在页面上,在彼此之下;<main>
应该始终被拉伸(即flex-grow: 1
,但对于网格)我将
grid-template-rows: auto 1fr auto;
添加到父节点。这在所有3个节点都存在时有效,但在<header>
缺失时无效。我通过添加以下内容修复了此问题:修复:
父元素上的
grid-template-rows: auto 1fr auto;
<main>
上的grid-rows-end: span 2
说明:
<main>
将始终占用2行。grid-template-rows
是无限行数的模式,因此第1-3行是auto 1fr auto
,第4-6行是相同的,第7-9行,.当页面上有3个元素时,
<header>
将取第一行,值为auto
,<main>
将取第2行和第3行,值为1fr auto
。<footer>
将从第4行开始,这是包含auto
的模式的新开始。当只有2个元素时(因此没有
<header>
),<main>
将占用第1和第2行,即auto 1fr
,而<footer>
将占用包含auto
的第3行带header:
个字符
无标题:
的字符串