Строим сетку [27/32] - 100%

HTML

<!DOCTYPE html>
<html lang="ru">
    <head>
        <title>Испытание: строим сетку</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div class="header">
            <div class="positioner">
                <div class="text-block">
                    <p>Header</p>
                </div>
            </div>
        </div>
        <div class="menu">
            <div class="positioner">
                <div class="text-block">
                    <p>Menu</p>
                </div>
            </div>
        </div>
        <div class="promo">
            <div class="positioner">
                <div class="columns">
                    <p>Promo 1</p>
                </div>
                <div class="columns">
                    <p>Promo 2</p>
                </div>
            </div>
        </div>
        <div class="content">
            <div class="positioner">
                <div class="columns">
                    <p>Left</p>
                </div>
                <div class="columns main">
                    <p>Main</p>
                </div>
                <div class="columns">
                    <p>Right</p>
                </div>
            </div>
        </div>
        <div class="footer">
            <div class="positioner">
                <p>Footer</p>
            </div>
        </div>
    </body>
</html>

CSS

html,
body {
    margin: 0;
    padding: 0;
}

body {
    width: 450px;
    height: 335px;
    font-family: "Arial", sans-serif;
    font-size: 10px;
    color: white;
}

.positioner {
    width: 350px;
    margin: 0 auto;
}

.positioner::after {
    content: "";
    display: table;
    clear: both;
}

.header {
    background: #34495e;
    padding: 10px;
}

.header .text-block {
    background: #c0392b;
    min-height: 35px;
}

p {
    padding: 5px;
    margin: 0;
}

.menu {
    background: #3498db;
}

.menu .text-block {
    min-height: 35px;
}

.promo {
    background: #34495e;
    padding: 10px;
}

.promo .columns {
    background: #c0392b;
    min-height: 60px;
    width: 170px;
    float: left;
    margin-right: 10px;
}

.promo .columns:last-child {
    margin-right: 0;
}

.content {
    padding: 10px;
}

.content .columns {
    float: left;
    margin-right: 10px;
    background: #3498DB;
    min-height: 110px;
    width: 70px;
}

.content .main {
    width: 190px;
}

.content .columns:last-child {
    margin-right: 0;
}

.footer {
    background: #34495e;
    min-height: 35px;
}

/*
    Используемые цвета:
    #34495e – мокрый асфальт
    #c0392b – красный
    #3498DB – синий
*/

вот такие конструкции излишне, перебор по “оберткам” - здесь нужно что-то одно или div или p

Не закрыли параграф меню.
А .hidden для чего?

спасибо за параграф!
хидден был на всякий случай для облегчения построения, но не пригодился. можно удалить.

согласен, что избыточно. делал универсально, блоки пустыми заготовками копи-пастил. лишнее не удалил.