You have your explicit rows defined with percentages:
grid-template-rows: 6.5% 7.5% 79% 7%
This works, to an extent, because you have a fixed height specified on the container:
height: 100vh
Each row renders at its defined height because percentage height values normally need a point of reference from a "parent's" height
value to work (more details).
But once you remove that height declaration, all percentage values on the children fail – they fallback to auto
, which means content height. But since there is no content, the rows collapse to 0. Hence, the entire layout collapses.
.wrapper {
min-height: 100vh;
display: grid;
grid-auto-rows: auto;
grid-template-columns: 15% 70% 15%;
grid-template-rows: 6.5% 7.5% 79% 7%;
grid-template-areas: "header header header"
"navigation navigation navigation"
"column-left column-center column-right"
"footer footer footer";
}
.item-header {
grid-area: header;
background-color: aqua;
}
.item-nav {
grid-area: navigation;
background-color: lightgrey;
}
.item-leftcol {
grid-area: column-left;
background-color: lightgreen;
}
.item-centercol {
grid-area: column-center;
}
.item-rightcol {
grid-area: column-right;
background-color: yellow;
}
.item-footer {
grid-area: footer;
background-color: gray;
}
* {
margin: 0;
padding: 0;
}
nothing to see here
<div class="wrapper">
<div class="item-header"></div>
<div class="item-nav"></div>
<div class="item-leftcol"></div>
<div class="item-centercol"></div>
<div class="item-rightcol"></div>
<div class="item-footer"></div>
</div>
If you want to access overflowing content in a container with a fixed height, then use the overflow
property:
.item-centercol {
overflow: auto;
}
.wrapper {
height: 100vh;
display: grid;
grid-auto-rows: auto;
grid-template-columns: 15% 70% 15%;
grid-template-rows: 6.5% 7.5% 79% 7%;
grid-template-areas: "header header header"
"navigation navigation navigation"
"column-left column-center column-right"
"footer footer footer";
}
.item-header {
grid-area: header;
background-color: aqua;
}
.item-nav {
grid-area: navigation;
background-color: lightgrey;
}
.item-leftcol {
grid-area: column-left;
background-color: lightgreen;
}
.item-centercol {
overflow: auto; /* NEW */
grid-area: column-center;
}
.item-rightcol {
grid-area: column-right;
background-color: yellow;
}
.item-footer {
grid-area: footer;
background-color: gray;
}
* {
margin: 0;
padding: 0;
}
<div class="wrapper">
<div class="item-header">header</div>
<div class="item-nav">navigation</div>
<div class="item-leftcol">left col</div>
<div class="item-centercol">test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
</div>
<div class="item-rightcol">right col</div>
<div class="item-footer">footer</div>
</div>
If you want the entire layout to expand with content, then use min-height
and switch from percentage to fr
units on the rows:
.wrapper {
min-height: 100vh;
display: grid;
grid-auto-rows: auto;
grid-template-columns: 15% 70% 15%;
grid-template-rows: 6.5fr 7.5fr 79fr 7fr;
grid-template-areas: "header header header"
"navigation navigation navigation"
"column-left column-center column-right"
"footer footer footer";
}
.item-header {
grid-area: header;
background-color: aqua;
}
.item-nav {
grid-area: navigation;
background-color: lightgrey;
}
.item-leftcol {
grid-area: column-left;
background-color: lightgreen;
}
.item-centercol {
grid-area: column-center;
}
.item-rightcol {
grid-area: column-right;
background-color: yellow;
}
.item-footer {
grid-area: footer;
background-color: gray;
}
* {
margin: 0;
padding: 0;
}
<div class="wrapper">
<div class="item-header">header</div>
<div class="item-nav">navigation</div>
<div class="item-leftcol">left col</div>
<div class="item-centercol">test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test
</div>
<div class="item-rightcol">right col</div>
<div class="item-footer">footer</div>
</div>
More info: