CSS Grid

Un paso más allá del flexbox es utilizar el CSS Grid, que nos permite utilizar una cuadrícula en la página, y que los elementos se posicionen en las coordenadas que queramos:

https://www.w3schools.com/css/css_grid.asp

Aquí tenemos una guía completa de cómo usar CSS grid:

https://css-tricks.com/snippets/css/complete-guide-grid/

Otra guía, en castellano y bien explicada:

https://www.ionos.es/digitalguide/paginas-web/creacion-de-paginas-web/css-grid-layout/

Y otra más también muy bien explicada:

https://medium.com/@alexcamachogz/dominando-css-grid-ff916434f85a

Interactiva:

https://www.joshwcomeau.com/css/interactive-guide-to-grid/

Buenas prácticas:

https://www.smashingmagazine.com/2018/04/best-practices-grid-layout/

Un juego para practicar grid:

https://cssgridgarden.com/#es

Usar flexbox o grid?

https://blog.logrocket.com/flexbox-vs-css-grid/

https://programacion.net/articulo/css_grid_vs_flexbox_cual_es_mas_practico_1771

Ejemplo Grid

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/grid.css"/>
</head>
<body>
    <div id="contenedor">
        <div id="primero" class="elemento">1</div>
        <div id="side" class="elemento">2</div>
        <div id="content" class="elemento">3</div>
        <div id="footer" class="elemento">4</div>
        <!--
        <div class="elemento">5</div>
        <div class="elemento">6</div>
        <div class="elemento">7</div>
        <div class="elemento">8</div>
        <div class="elemento">9</div>
        <div class="elemento">10</div>
        -->
    </div>
</body>
</html>
.elemento{
    border: solid 2px gray;
    padding: 1em;
    background-color: aquamarine;
}
#contenedor{
    display: grid;
     grid-template-columns: 150px 2fr 1fr; /* unidades relativas al espacio libre */
     grid-template-rows: 1fr repeat(2,2fr);
     grid-template-areas:  'header header header header'
                           'side content content content'
                           'side content content content'
                           'side content content content'
                           'footer footer footer footer'
                           
                           ;
}
#primero{
    grid-area: header;
}
#side{
    grid-area: side;
}
#content{
    grid-area: content;
}
#footer{
    grid-area: footer;
}