flex-grow
は grid プロパティ?
グリッドエリアには、受信したコンテンツを収容するが、一部のエリアにはflex-grow
for 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
}
<div class="ctnr">
<header>
<div class="test"></div>
</header>
<nav></nav>
<main></main>
<footer></footer>
</div>
このコードのように動作するには:
.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>
Withoutdiv.panel
および追加のタグなし。
私がこれをしたい理由は正当なものであり、余分なdiv
要素は私を悩ます。
CSSグリッドはfr
ユニットを提供し、flex-grow
と同様に機能します。
flex-grow
はコンテナ内の空き領域をflexアイテムに分配しますが、fr
ユニットは分配します行/列間のコンテナ内の空き領域。
仕様から:
柔軟な長さまたは
<flex>
は、fr
単位を持つディメンションであり、グリッドコンテナの空き領域の一部を表します。
(flex-grow
はflexアイテムに適用されます、fr
の長さはgridコンテナに適用されます。)
したがって、グリッドには3つの行があります。
最初の行はヘッダーです。コンテンツの高さを設定する必要があります。そのため、高さはauto
に設定されます。
最後の行はフッターです。コンテンツの高さを設定する必要があります。そのため、高さはauto
に設定されます。
中央の行には、nav
およびmain
要素が含まれています。この行が残りのすべての垂直スペースを占めるようにします。したがって、その高さは1fr
に設定されます。
.ctnr {
display: grid;
grid-template-rows: auto 1fr auto; /* key rule */
grid-template-columns: 1fr 1fr;
height: 100vh;
grid-template-areas: "header header"
"nav main"
"footer footer";
}
header {
grid-area: header;
background: turquoise;
}
nav {
grid-area: nav;
background: grey;
}
main {
grid-area: main;
background: orange;
}
footer {
grid-area: footer;
background: yellow;
}
body {
margin: 0;
}
<div class="ctnr">
<header>header</header>
<nav>nav</nav>
<main>main</main>
<footer>footer</footer>
</div>