Grid

Mobile

.box {
   display: grid;
}
<div class="box">
	<header>Header</header>
	<nav>Nav</nav>
	<div>Main</div>
	<footer>Footer</footer>
</div>

The default grid is like block flow, because it has only one column:

Header
Nav
Main
Footer

Desktop

@media (min-width: 40em) {
	.box {
	   display: grid;
	   grid-gap: 1em;
	   grid-template-columns: auto 1fr;
	}
	header {
	   grid-column: span 2;
	}

	nav {
	   grid-row: span 2;
	}
}

grid-template-columns defines two columns.

Header
Main
Footer

Empty rows collapse.