Испытание: строим сетку [27/32] (100%) Хотелось бы услышать замечания

<!DOCTYPE html>
<html lang="ru">
<head>
    <title>Испытание: строим сетку</title>
    <meta charset="utf-8">
</head>
<body>
    <div class="header">
        <div class="layout-positioner">
            <div class="header-block">
                <span>Header</span>
            </div>
        </div>
        <div class="menu">
            <span>Menu</span>
        </div>
        <div class="layout-positioner">
            <div class="layout-column-left">
                <div class="promo">
                    <span>Promo 1</span>
                </div>
            </div>
            <div class="layout-column-right">
                <div class="promo">
                    <span>Promo 2</span>
                </div>
            </div>
        </div>
    </div>
    <div class="features">
        <div class="layout-positioner">
            <div class="layout-column-left">
                <div class="feature">
                    <span>Left</span>
                </div>
            </div>
            <div class="layout-column-main">
                <div class="feature">
                    <span>Main</span>
                </div>
            </div>
            <div class="layout-column-right">
                <div class="feature">
                    <span>Right</span>
                </div>
            </div>
        </div>
    </div>
    <div class="footer">
        <div class="footer-block">
            <span>Footer</span>
        </div>
    </div>
</body>
html,
body {
margin: 0;
padding: 0;
}

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

.layout-positioner {
width: 350px;
margin: 0 auto;
/*border: 1px dashed yellow;*/
}

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

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

.header-block {
float: left;
width: 350px;
min-height: 35px;
background-color: #c0392b;
}

.menu {
min-height: 35px;
background-color: #3498DB;
margin: 10px 0;
padding: 5px;
box-sizing: border-box;
}

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

.header .layout-column-right .promo {
margin-right: 0;
}

.features {
padding: 10px 0;
}

.features .layout-column-left {
float: left;
width: 70px;
min-height: 110px;
background-color: #3498DB;
}

.features .layout-column-main {
float: left;
width: 190px;
min-height: 110px;
margin: 0 10px;
background-color: #3498DB;
}

.features .layout-column-right {
float: right;
width: 70px;
min-height: 110px;
background-color: #3498DB;
}

.footer-block {
min-height: 35px;
padding: 5px;
background-color: #34495e;
box-sizing: border-box;
}

span {
display: block;
margin: 5px 0 0 5px;
}

.menu span,
.footer-block span {
margin: 0 0 0 50px;
}

Одну вещь я не до конца понимаю. Если убрать у .header-block флоат, то получается вот что. Для наглядности я добавил рамки .layout-positioner.

это внешний отступ <span> в 5 px вылез.
кто виноват и что делать - смотрим раздел Блочная модель документа / «Выпадание» внешних отступов [10/23]

1 лайк

А как код в целом?

От выпадания span без флоата .header-block я избавился следующим образом:

.header-block {
padding-top: 5px;
box-sizing: border-box;
}

.header-block span {
margin: 0 0 0 5px;
}

Всё хорошо, кроме:

Здесь тоже должен быть центровщик .layout-positioner.

Обернуть в него span’ы .menu и .footer-block?

<div class="menu">
    <div class="layout-positioner">
        <span>Menu</span>
    </div>
</div>

Вот так?

Да, правильно)

Прошла на 100%. Может есть замечания? Заранее спасибо.

CSS

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

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

.header-full {
    background: #34495e;
    padding: 5px 0 0 0;
}

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

.after {
display: table;
content: "";
clear: both;
}
.header, .menu {
    min-height: 25px;
    padding: 5px;
    margin: 5px 0 10px 0;
}
.header {
    background: #c0392b;
}

.menu-full {
    background: #3498DB;
}

.promo1, .promo2 {
    background: #c0392b;
    width: 160px;
    min-height: 50px;
    padding: 5px;
}
.promo1 {
    float: left;
    margin-bottom: 10px;
}
.promo2 {
    float: right;
}

.left, .main, .right {
    background: #3498DB;
    width: 60px;
    min-height: 100px;
    padding: 5px;
    margin: 10px 0;
}

.left {
    float: left;
}

.main {
    float: left;
    width: 180px;
    margin: 10px;
}

.right {
    float: right;
}

.footer-full {
    background: #34495e;
    min-height: 35px;
    padding: 5px 0 0 10px;    
}
<!DOCTYPE html>
<html lang="ru">
<head>
    <title>Испытание: строим сетку</title>
    <meta charset="utf-8">
</head>
<body>
    <div class="header-full">
        <div class="pozision">
                <div class="header">Header</div>
        </div>
    <div class="menu-full">
        <div class="pozision">
                <div class="menu">Menu</div>
        </div>
    </div>
        <div class="pozision after">
                <div class="promo1">Promo 1</div>
                <div class="promo2">Promo 2</div>
        </div>
    </div>
        <div class="pozision after">
            <div class="left">Left</div>
            <div class="main">Main</div>
            <div class="right">Right</div>
        </div>
    <div class="footer-full">
        <div class="pozision">Footer</div>
    </div>
</body>
</html>

Свойство content в правиле говорит о том, что это псевдоэлемент. Псевдоэлемент пишется с двумя двоеточиями в начале.
В вашем случае это должно быть:

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

При этом в html-коде класс after писать не надо. Распорка и так появится в каждом блоке с классом .pozision.

Ineska спасибо