Сетки / Испытание: строим сетку[27/32] 100%

Хотелось бы услышать от вас, как можно было бы улучшить этот код, может его можно сделать короче? И я так и не понял как мне могло бы пригодиться центрирование с помощью layout-positioner или для чего тут мог бы подойти clearfix. Я вставил clearfix везде, но этот селектор ни на что не влияет, даже если я его уберу. А ещё в footer у меня стоит margin-top -5px, так как у меня не получалось установить footer выше на 5px, что бы получить 100%, как это можно исправить? И кому не сложно, могли бы вы пояснить вообще про этот layout-positioner? Потому что у меня получилось всё сделать и без него. Тогда зачем он вообще нужен?

<!DOCTYPE html>
<html lang="ru">
    <head>
        <title>Испытание: строим сетку</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div class="header clearfix">
       <div class="top "> Header</div>
       <div class="menu"> Menu</div>
       <div class="promo promo1"> Promo 1</div>
       <div class="promo promo2"> Promo 2</div>
       </div>
       
       <div class="mainmenu clearfix">
      <div class="column left-column">  Left</div>
      <div class=" main-column">  Main</div>
      <div class="column right-column">  Right</div>
      </div>
      
      <div class="footer clearfix">  Footer</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;
}
.header{
 height: 160px;
 background:#34495e;
 padding-top:10px;
}
.top{
   margin:auto;
   background:#c0392b;
   margin:0px 50px;
   height:25px;
   padding:5px;

}
.menu{
  background:#3498DB;
  height:30px;
  margin-top:10px;
  padding-left: 55px;
  padding-top:5px;
  margin-bottom:10px;
}
.clearfix::after {
    content: "";
    display: table;
    clear: both;
}
.promo{
     background:#c0392b;
     width: 160px;
     padding:5px;
     height:50px;
}
.promo1{
    float:left;
    margin-left:50px;
}
.promo2{
    float:left;
    margin-left:10px;
}
.mainmenu{
height:135px;
clear:both;
}
.column{
background:#3498DB;
width:65px;
height:105px;
margin-top:10px;
padding: 5px 0px 0px 5px;
}
.left-column{
    float:left;
   margin-left:50px;
}
.right-column{
    float:right;
    margin-right:50px;
}
.main-column{
    float:left;
    background:    #3498DB;
    width:185px;
    margin: 10px;
    margin: 10px 0px 0px 10px;
    height:105px;
    padding: 5px 0px 0px 5px;
}
.footer{
    background:#34495e;
    height:30px;
    padding: 5px 55px 0px;
    clear:both;
    margin-top:-5px;
}

html-код не видно. Кнопка для корректного отображения </> в редакторе сообщений.

Исправил. Надеюсь теперь видно.

В вашей верстке у всех блоков фиксированные высоты. Поэтому не видно разницы. Напишете min-height вместо height и увидите, в чем роль clearfix.

Вы добились визуального соответствия с оригиналом. Но в названии испытания есть слово “сетка”. Сетка (даже фиксированная) должна оставаться в том же виде, когда ширина body изменяется. Именно для этого и нужен центровщик .layout-positioner. Он концентрирует блоки по центру страницы при любой ширине body.

Хорошо, я завтра обязательно попробую поработать с clearfix и layout-positioner. И если будут еще вопросы, то обязательно спрошу.

Я сделал и даже понял, для чего это всё нужно. Одна только проблема, что при изменении ширины body, слово Footer как-то отстаёт при центровке от другого контента. В чём может быть проблема?

Всё же не совсем верно вы меня поняли…
Задача центровщика состоит в том, чтобы удерживать блоки в центре страницы с помощью автоматических отступов. Но их фактический размер вы с вами можем посчитать для каждой ширины body.
Так вот, посчитайте пожалуйста, сколько px у вас получаются автоматические отступы, если ширина центровщика и body совпадает?

Судя по всему 0px

Вам нужно измерить ширину контентной области - это и будет ширина центровщика. А пустое пространство справа и слева отвести автоматическим отступам.