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

Привет всем, прошёл испытание на 100%, но терзают сомнения о качестве кода, нужно ревью.

HTML

    <!DOCTYPE html>
    <html lang="ru">
        <head>
            <title>Испытание: строим сетку</title>
            <meta charset="utf-8">
        </head>
        <body>
            <div class="header-container">
                <div class="header">Header</div>
                <div class="menu-container">
                    <div class="menu">Menu</div>
                </div>
                <div class="layout-positioner">
                    <div class="promo">Promo 1</div>
                    <div class="promo">Promo 2</div>
                </div>
            </div>
                <div class="layout-positioner">
                    <div class="column-left">Left</div>
                    <div class="column-center">Main</div>
                    <div class="column-right">Right</div>
                </div>
                <div class="footer-container">
                    <div class="footer">Footer</div>
                </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;
}

.header-container {
    width: 100%;
    background: #34495e;
    padding: 10px 0px 10px 0px;
}

.header-container::after {
    content: "";
    display: table;
    clear: both;
}

.layout-positioner {
    width: 350px;
    margin: auto;
}

.header {
    background: #c0392b;
    width: 340px;
    min-height: 25px;
    padding: 5px;
    margin: auto;
}
   
.menu-container {
    background: #3498DB;
    width: 100%;
    margin: auto;
} 

.menu {
    background: #3498DB;
    width: 340px;
    min-height: 25px;
    padding: 5px;
    margin: 10px auto 0px;
}

.promo{
    background: #c0392b;
    width: 160px;
    min-height: 50px;
    padding: 5px;
    margin-top: 10px;
    float: left;
}

.promo:last-child {
    margin-left: 10px;
}

/* Колонки */

.column-left,
.column-center,
.column-right {
    margin: 10px 0px 10px 0px;
    padding: 5px;
    background: #3498DB; 
    min-height: 100px;
    float: left;
}

.column-left,
.column-right {
    width: 60px;
}
.column-right {
    margin-left: 10px;
}

.column-center {
    margin-left: 10px;
    width: 180px;
}

/* Футер */

.footer-container {
    clear: both;
    width: 100%;
    background: #34495e;
}

.footer {
    width: 340px;
    min-height: 25px;
    padding: 5px;
    margin: 10px auto 0px;
}
1 лайк

Есть пара замечаний, но в целом работа очень хорошая.
Распорку применили только для header, будет лучше если ее вы добавите как псевдоэлемент к layout-positioner, тогда она автоматически применится ко всем блокам, внутри которых есть блоки с float. И проверьте еще все записи margin: auto;, возможно некоторые можно убрать.
В качестве усложнения задания, если хотите, можете попробовать обернуть текст внутри блоков в тег <р>.

1 лайк

Дабы не плодить темы, оставлю вопросы здесь. Похожие решения на форуме пока не нашла, наверняка перемудрила. Столкнулась с несколькими непонятными проблемами, решение которых понесло меня в степь: box-sizing, inline-block и пр.

    <div class="main-menu">    
        <div class="layout-positioner">
            <div class="header">Header</div>
            <div class="menu">Menu</div>
            <div class="promo">Promo 1</div>
            <div class="promo">Promo 2</div>
        </div>
    </div>
    <div class="columns-container">
        <div class="layout-positioner">
            <div class="layout-column left">Left</div>
            <div class="layout-column main">Main</div>
            <div class="layout-column right">Right</div>
        </div>
    </div>
    <div class="footer">Footer</div>
</body>
.layout-positioner {
    width: 350px;
    margin: 0 auto;
}

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

.main-menu {
    background: #34495e;
}

.header {
    display: inline-block;
    box-sizing: border-box;
    width: 350px;
    margin: 10px 0;
    padding: 5px;
    background: #c0392b;
    min-height: 35px;
}

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

.promo {
    display: inline-block;
    box-sizing: border-box;
    background: #c0392b;
    width: 170px;
    height: 60px;
    margin: 0 7px 10px 0;
    padding: 5px;
}

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

.layout-column {
    box-sizing: border-box;
    float: left;
    width: 70px;
    background: #3498DB;
    height: 110px;
    margin: 10px 10px 10px 0;
    padding: 5px;
}

.main {
    width: 190px;
}

.layout-column:last-child {
    margin-right: 0;
}

.footer {
    clear: both;
    padding: 5px 55px 0;
    background: #34495e;
    min-height: 35px;
}

Хотелось бы понять суть этих проблем, например почему не удавалось задать отступ сверху Header пока не помог inline-block или что “мешало” Menu слева и не давало ему занять все 450px (догадываюсь, что отрицательный margin это так себе решение)?
box-sizing удобная штука, надеюсь хотя бы его использование было оправдано.

1 лайк

По поводу отступа у header: https://htmlacademy.ru/courses/44/run/10.
Проблема с меню из-за обертки .layout-positioner.
А в использовании box-sizing не вижу ничего плохого.

1 лайк

Спасибо, за такой быстрый ответ.
Вот в чем было дело. Не зря чувствовала, что нужно было повторить блочную модель.
Да и header с menu могли обойтись без обертки, ясно.

Помогите, прошел испытания на 100% , но есть сомнения в использованных мною методах и правильности оформления кода. Еще использовал отрицательный маргин, сильно ли это плохо,не эстетично? Или же это годный способ ?

HTML

<html lang="ru">
    <head>
        <title>Испытание: строим сетку</title>
        <meta charset="utf-8">
    </head>
    <body>
        <div class="wrapper">
            
        <div class="header ">
        Header
   
         </div>
         <div class="menu">
        Menu
        
        </div>
        <div class="promo">
        <div class="promo1">
        Promo 1
        </div>
        <div class="promo2">
        Promo 2
        </div>
        </div>
         </div>
         <div class="column">
       <div class="left"> Left</div>
        <div class="main"> Main</div>
         <div class="right">Right</div>
        </div>
        
        <div class="footer">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;
}

.wrapper
{
    padding:10px;
    height:150px;
    background-color:#34495e;
    }
.header 
{
    padding:5px 5px;
   
    margin-left:40px;
    width:340px;
    min-height:25px;
    background-color:#c0392b;
    }
    .menu
    {
       margin-left:-10px;
        width:340px;
        margin-top: 10px;
        padding:5px 55px;
        height:25px;
        background-color:    #3498DB;
        
        }
        .promo {
    width: 350px;
    margin: auto;
}
   .promo1{
    background: #c0392b;
    width: 160px;
    min-height: 50px;
    padding: 5px;
    margin-top: 10px;
    float: left;
}
.promo2{
    background: #c0392b;
    width: 160px;
    min-height: 50px;
    padding: 5px;
    margin-top: 10px;
    margin-left:10px;
    float: left;
}
.column
{
   
    margin-top:10px;
    height:120px;
    
    }
 .left
 {
     padding:5px;
      margin-left:50px;
     float:left;
     height:100px;
     width:60px;
     background-color:#3498DB;
     }
      .main
 {
     padding:5px;
      margin-left:10px;
     float:left;
     height:100px;
     width:180px;
     background-color:#3498DB;
     }
      .right
 {
     padding:5px;
     margin-left:10px;
     float:left;
     height:100px;
     width:60px;
     background-color:#3498DB;
     }
.footer
{
    height:30px;
    padding:5px 55px;
    background-color:#34495e;
    }

Отрицательный отступ - это мелочь по сравнению с остальными недочетами. Видно, что писали сами, но на этом плюсы заканчиваются. Самая главная ошибка - фиксированная высота у блоков. Это плохо. Фактически получается, что это сбило вас, ведь распорки не понадобились. Помните о том, что это сетка страницы, предполагается, что блоки будут не пустыми, а заполнены контентом.
И конечно же отсутствие центровщика .layout-positioner.
Посмотрите примеры кода в этой же теме чуть выше.
Хотелось бы увидеть ваш исправленный вариант.

Вообщем вот что получилось , через несколько часов труда, переделал, надеюсь выглядит лучше. В чем тут могут быть недостатки? Интересует еще одна особенность, пока я не добавил " .layout-positioner::after " , у меня блоки promo1, promo2 были на белом фоне, будто блок firstblock их даже не затрагивал , а когда добавил все стало на свои места , почему?

HTML

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

    
    
.header 
{
    padding:5px 5px;
   
    margin:auto;
    width:340px;
    min-height:25px;
    background-color:#c0392b;
    }
    .menu
    {
      
        width:340px;
        margin-top: 10px;
        padding:5px 55px;
        min-height:25px;
        background-color:    #3498DB;
        
        }
    .layout-positioner
{
    
  width: 350px;
    margin: auto;
}
.layout-positioner::after
{
     content: "";
    display: table;
    clear: both;
    }
   .promo1{
    background: #c0392b;
    width: 160px;
    min-height: 50px;
    padding: 5px;
    margin-top: 10px;
    float: left;
}
.promo2{
    background: #c0392b;
    width: 160px;
    min-height: 50px;
    padding: 5px;
    margin-top: 10px;
    margin-left:10px;
    float: left;
}


 .left
 {
     padding:5px;
    margin-top:10px;
     float:left;
     min-height:100px;
     width:60px;
     background-color:#3498DB;
     }
      .main
 {
     padding:5px;
      margin-left:10px;
     float:left;
     min-height:100px;
     width:180px;
     background-color:#3498DB;
      margin-top:10px;
     }
      .right
 {
      margin-top:10px;
     padding:5px;
     margin-left:10px;
     float:left;
     min-height:100px;
     width:60px;
     background-color:#3498DB;
     }
.footer
{
    clear:both;
    width: 340px;
    min-height: 25px;
    padding: 5px 55px;
    margin-top:10px;
    background: #34495e;
    }

Вы не совсем внимательны. О приеме использования распорки в виде псевдоэлемента в этом курсе рассказывали:
https://htmlacademy.ru/courses/65/run/16.
В целом код выглядит неплохо. Только надо еще исправить:

55px быть не должно, у вас есть центровщик.

Ну я знал что это распорка, но сейчас вроде понял уже, как она работает.Спасибо большое , паддинг исправил, еще вопрос по поводу набивания руки, я прохожу курсы, практически уже конец,и как рациональнее поступать, уже после всех основных курсов , начать как то делать уже свои шаблоны, и просто подглядывать сюда , если что призабыл или не понял, или параллельно что выучил то и использовал в шаблоне, или же что то другое. Боюсь забыть все то что прошел , но и руку набивать хочется уже, и что бы учится код писать адекватный, не переучиваться потом.

Если целые шаблоны делать не рискуете, можете начать с мелких заданий, как раз для запоминания уже выученного материала подойдет, я думаю: http://www.itmathrepetitor.ru/zadachi-po-html-i-css/
Или можете выбрать целый шаблон из рассылок Академии.
В любом случае, дополнительно читать придется всё равно. Бесплатные курсы - это только основы.

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

`

Испытание: строим сетку
Header
Menu
Promo 1
Promo 2
Left
Main
Right
Footer
`

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

body {
width: 450px;
height: 335px;
font-family: “Arial”, sans-serif;
font-size: 10px;
color: white;
}
.container {
background-color: #34495e;
min-height: 160px;
padding-top: 10px;

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

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

.header {
background-color: #c0392b;
min-height: 25px;
padding: 5px;

}
.menu {
background-color: #3498DB;
margin: 10px 0;
min-height: 20px;
padding: 5px 55px 10px 55px;

}
.columns1 {
background-color: #c0392b;
}
.promo1 {
float: left;
background-color: #c0392b;
min-height: 55px;
width: 165px;
padding: 5px 0 0 5px;
}
.promo2 {
float: right;
background-color: #c0392b;
min-height: 55px;
width: 165px;
padding: 5px 0 0 5px;
}
.left, .main, .right {
background-color: #3498DB;
padding: 5px;
}
.column-container {
padding-top: 10px;
}
.left {
float: left;
width: 60px;
min-height: 100px;
margin-right:10px;
}
.main {
float: left;
width: 180px;
min-height: 100px;
}
.right {
float: right;
width: 60px;
min-height: 100px;
}
.footer-container {
padding-top:10px;
}
.footer {
background-color: #34495e;
padding: 5px 10px 10px 55px;
min-height: 20px;
}

можете пожалуйста оценить код? а то вроде 100%, но хотелось бы знать как сделать лучше

Все в принципе хорошо, но отступ 55px у футера и меню остался. Надо убрать.

Проблема с меню(
Никак не делается на полную ширину
`

Испытание: строим сетку
Header
Menu
Promo 1
Promo 2
Left
Main
Right
Footer
`

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:auto;
}

.layout-positioner::after {
display: table;
content: “”;
clear: both;
}
.container{
width:450px;
height:170px;
background-color:#34495e;
}
.header{
width:345px;
height:30px;
background-color:#c0392b;
margin-top:10px;
display:inline-block;
padding:5px 0 0 5px;
}
.menu{
width:450px;
height:30px;
background-color:#3498DB;
padding:5px 0 0 5px;
margin-top:10px;
}
.promo{
width:165px;
height:55px;
background-color:#c0392b;
padding:5px 0 0 5px;
margin:10px 10px 10px 0;
}
.promo1{
float:left;
}
.promo2{
float:right;
margin-right:0;
}
.coloum{
width:71px;
height:105px;
background-color:#3498DB;
padding:5px 0 0 5px;
margin:10px 10px 10px 0;
}
.left{
float:left;
}
.right{
float:right;
margin-right:0;
}
.main{
width:176px;
height:105px;
background-color:#3498DB;
float:left;
padding:5px 0 0 5px;
margin:10px 0 10px 0;
}
.footer{
width:450px;
height:30px;
background-color:#34495e;
padding:5px 0 0 5px;
margin:0 0 10px 0;
}`

В layout-positioner оберните отдельно header и promo.

Жаль,что нельзя по другому,но спасибо большое)

Посмотрите, пожалуйста, мой код. Испытание выполнено на 100%, но есть сомнения насчет правильности оформления CSS. Я объединяла селекторы с одинаковыми свойствами, потом для каждого прописывала оставшиеся свойства. Правильный ли это подход? Или лучше для каждого селектора прописывать отдельно все свойства?

HTML

`

Испытание: строим сетку
Header
Menu
Promo 1
Promo 2
Left
Main
Right
Footer
`

CSS

`* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}

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

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

/* установила фон для футера и хедера*/
.header, .footer {
background-color: #34495e;
}

/отступы для хедера/
.header {
margin-bottom: 10px;
padding-top: 2px;
}

/красный фон/
.top, .promo1, .promo2 {
background-color: #c0392b;
padding: 5px;
}

/*синий фон + внутренние отступы */
.menu, .main, .left, .right {
background-color: #3498DB;
padding: 5px;
}

/отцентровка основного содержания/
.layout-positioner {
width: 350px;
margin: 0 auto;
}

.clearfix::after {
content: “”;
display: table;
clear: both;
}

/высота элементов и отступы снизу/
.top, .menu, .footer {
margin-bottom: 10px;
height: 35px;
}

/отфлоатила промо1 и промо2, установила для них отступы и высоту/
.promo1, .promo2 {
float: left;
margin-bottom: 10px;
width: 170px;
height: 60px;
}

/* отступ между блоками промо*/
.promo1 {
margin-right: 10px;
}

.left, .right {
float: left;
width: 70px;
height: 110px;
}

.main {
float: left;
margin-right: 10px;
width: 190px;
height: 110px;
}

.left {
margin-right: 10px;
}

/* класс для футера, чтобы контент не прижимался к верхней границе*/
.padding {
padding: 5px;
}

/* отступ между основным блоком и футером*/
.content {
margin-bottom: 10px;
}

/* отступ слева для фразы Menu*/
.menu > .layout-positioner {
padding-left: 5px;
}

/* отступ сверху*/
.top {
margin-top: 8px;
}`

Хорошо, когда в коде есть комментарии. Сразу понятно, что и для чего сделано.
Остается заменить все height на min-height. А еще разобраться с отступами. У вас есть такие записи: padding-top: 2px; margin-top: 8px; Общий отступ 10px получается. Надо исправить, и лишнее правило в css уберётся.