Вы должны установить явную высоту для контейнера сетки , а затем удалить calc
из grid-template-rows
и сделать его 1fr
для второй строки.
Таким образом, вы можете установить height: 100%
для page
(чтобы он наследовал высоту container
) и использовать grid-template-rows: 55px 1fr
(второй ряд теперь расширяет , чтобы соответствоватьоставшаяся высота).Смотри демо ниже:
body {
margin: 0;
}
.container {
width: 70%;
height: 300px; /* How can I set the height? */
}
.page {
width: 100%;
height: 100%; /* added */
display: grid;
grid-template-rows: 55px 1fr; /* changed */
grid-template-columns: 200px auto;
grid-template-areas:
"nav header"
"nav content";
}
.nav {
grid-area: nav;
background-color: aqua;
}
.header {
grid-area: header;
background-color: grey;
}
.content {
grid-area: content;
background-color: red;
overflow-y: auto; /* overflow condition on parent */
}
article {
height: 1000px; /* height set on child; triggers scroll */
}
<div class="container">
<div class="page">
<div class="nav">Side nav</div>
<div class="header">Header</div>
<div class="content">
<article>
<!-- new section for content -->
<h1>title</h1>
<p>A lot of content, simulated by .article height: 1000px</p>
</article>
</div>
</div>