I have a header that is 70px high, the main content which I want to fill the rest of the screen and then a 70px footer. I am trying to find the most simple approach of hiding a footer. This works with the footer in view - see jsfiddle and snippet below:
* {
  margin: 0;
  padding: 0;
}
*,
*::before,
*::after {
  box-sizing: border-box;
}
body {
  display: grid;
  margin: 0px;
  grid-gap: 10px;
  height: 100vh;
  grid-template-columns: [side__nav] 250px [main] 1fr;
  grid-template-rows: [header] 70px auto [footer] 70px;
}
.header {
  grid-column: main;
  grid-row: 1;
  background: pink;
}
.side__nav {
  grid-column: side__nav;
  grid-row: 1/span 3;
  background: red;
}
.content {
  grid-column: main;
  grid-row: 2;
  background: green;
}
.footer {
  grid-column: main;
  grid-row: 3;
  background: purple;
  opacity: 0.5;
}
.a {
  grid-column: col/span 2;
  grid-row: row;
}
.b {
  grid-column: col 3/span 2;
  grid-row: row;
}
.c {
  grid-column: col/span 2;
  grid-row: row 2;
}
.d {
  grid-column: col 3/span 2;
  grid-row: row 2;
  display: grid;
  grid-gap: 10px;
  grid-template-columns: 1fr 1fr;
}
.e {
  grid-column: 1/3;
  grid-row: 1;
}
.f {
  grid-column: 1;
  grid-row: 2;
}
.g {
  grid-column: 2;
  grid-row: 2;
}<header class="header">header</header>
<nav class="side__nav">side__nav</nav>
<content class="content">content</content>
<footer class="footer">footer</footer>But I want to push it off screen so I can use a button to show when needed. I have tried using grid-template-rows: [header] 70px calc(100vh - 70px) [footer] 70px
which does give me the effect I want see jsfiddle and snippet below:
* {
  margin: 0;
  padding: 0;
}
*, *::before, *::after {
  box-sizing: border-box;
}
body {
  display: grid;
  margin: 0px;
  grid-gap: 10px;
  height: 100vh;
  grid-template-columns: [side__nav] 250px [main] 1fr;
  grid-template-rows: [header] 70px calc(100vh - 70px) [footer] 70px;
}
.header {
  grid-column: main;
  grid-row: 1;
  background: pink;
}
.side__nav {
  grid-column: side__nav;
  grid-row: 1/span 3;
  background: red;
}
.content {
  grid-column: main;
  grid-row: 2;
  background: green;
}
.footer {
  grid-column: main;
  grid-row: 3;
  background: purple;
  opacity: 0.5;
}
.a {
  grid-column: col/span 2;
  grid-row: row;
}
.b {
  grid-column: col 3/span 2;
  grid-row: row;
}
.c {
  grid-column: col/span 2;
  grid-row: row 2;
}
.d {
  grid-column: col 3/span 2;
  grid-row: row 2;
  display: grid;
  grid-gap: 10px;
  grid-template-columns: 1fr 1fr;
}
.e {
  grid-column: 1/3;
  grid-row: 1;
}
.f {
  grid-column: 1;
  grid-row: 2;
}
.g {
  grid-column: 2;
  grid-row: 2;
}<header class="header">header</header>
<nav class="side__nav">side__nav</nav>
<content class="content">content</content>
<footer class="footer">footer</footer>But the problem with that is, If I use
grid-gap: 10pxI have to calculate that ingrid-template-rowswhich then gets messy if I add more sections.
For instance, 3 sections will have 2 gaps, if I set the gap as 10px, the total will be 20px, plus the 70px for the footer meaning a total of 90px. If someone takes over the code they need to know that they need to add this manually to the grid-template-row line which I know will get missed. Anyone have a simple idea that I am missing?
 
    