2017
24
Фев

Создаём колонки одинаковой высоты на css

grigoriev
17572
колонки одинаковой высоты на css

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

И так для начала создадим наш тестовый макет сайта. Для начала он будет состоять из блока wrapper(это обёртка для всех остальных блоков), верхнего блока под названием header и двух колонок leftcol, rightcol. Для колонок с помощью css зададим обтекание float: left. Это нужно для того, что бы блок-контейнер, в котором находятся блоки с контентом был зависим от этих блоков. Тоесть менял свою высоту в зависимости от высоты контента.

<div class="wrapper">
    <div class="header"></div>
    <div class="leftcol"></div>
    <div class="rightcol"></div>
</div>          
html, body {
    margin: 0;
    padding: 0;
    height: 100%;
}
.wrapper {
    height: auto !important;
    height: 100%;
    min-height: 100%;
    margin: auto;
    width: 980px;
    border-left: 1px solid #000000;
    border-right: 1px solid #000000;
    background-color:#FFFFFF;
 }
.header {
    width: 100%;
    height: 150px;
    background-color:#333333;
}
.leftcol {
    width: 200px;
    float: left;/*-обтекание-*/
}
.rightcol {
    float: left;/*-обтекание-*/
    width: 780px;
}
колонки одинаковой высоты css

Для каждой колонки создаём обёртку wrap, сколько колонок столько и обёрток. Так же задаём им свойство float и ширину 100%. Передаём обёрткам бэкграунды колонок, теперь за цвет колонок отвечают обёртки. Назначаем всем колонкам и блокам относительное позиционирование position:relative.

<div class="wrapper">
    <div class="header"></div>
    <div class="wraprightcol">
      <div class="wrapleftcol">
        <div class="leftcol"></div>
        <div class="rightcol"></div>
      </div><!--wrapleftcol-->
    </div><!--wraprightcol-->
</div><!--wrapper-->
html, body {
    margin: 0;
    padding: 0;
    height: 100%;
}
.wrapper {
    height: auto !important;
    height: 100%;
    min-height: 100%;
    margin: auto;
    width: 980px;
    border-left: 1px solid #000000;
    border-right: 1px solid #000000;
    background-color:#FFFFFF;
}
.header {
    width: 100%;
    height: 150px;
    background-color:#333333;
}
.leftcol {
    width: 200px;
    float: left;
    position:relative;/*-относит поз-*/
}
.rightcol {
    float: left;
    width: 780px;
    position:relative;/*-относит поз-*/
}
.wraprightcol {
    float: left;
    width: 100%;/*-ширина 100%-*/
    background-color:#CCCCCC;/*-цвет колонок-*/
    position: relative;/*-относит поз-*/
}
.wrapleftcol {
    float: left;
    width: 100%;
    background: #9DA99C;/*-цвет колонок-*/
    position:relative;/*-относит поз-*/
}
колонки одинаковой высоты css

Смещаем слой wrapleftcol влево на 780 пикселей right: 780px;. 780 пикселей ширина правой колонки. После сдвига слоя мы увидим слой wraprightcol.

.wrapleftcol {
    float: left;
    width: 100%;
    background: #9DA99C;
    right: 780px;/*--смещаем влево на 780px--*/
    position:relative;
}
колонки одинаковой высоты css

Сдвигаем назад блоки с нашими колонками ( они сдвинулись вместе с слоем wrapleftcol) left: 780px.

.leftcol {
    width: 200px;
    float: left;
    position:relative;
    left: 780px;/*-сдвигаем колонки назад-*/
}
.rightcol {
    float: left;
    width: 780px;
    position:relative;
    left: 780px;/*-сдвигаем колонки назад-*/
}
колонки одинаковой высоты css

Обрезаем всё что вышло за рамки слоя wraprightcol overflow:hidden

.wraprightcol {
    float: left;
    width: 100%;
    background-color:#CCCCCC;
    position: relative;
    overflow:hidden;/*-обрезаем-*/
} 
колонки одинаковой высоты css

У Internet Explorer есть баг с подсчетом ширины колонок, так что свойство padding здесь не кроссбраузерно. Зададим поля за счёт уменьшения ширины колонок и увеличения смещения. Верхние и нижние поля можно задать с помощью padding. Что бы избежать проблем с высотой плавающий блоков добавляем после обёрток див clear. Полный код выглядит так.

<div class="wrapper">
    <div class="header"></div>
    <div class="wraprightcol">
      <div class="wrapleftcol">
        <div class="leftcol"></div>
        <div class="rightcol"></div>
      </div><!--wrapleftcol-->
    </div><!--wraprightcol-->
    <div class="clear"></div>
</div><!--wrapper-->
html, body {
    margin: 0;
    padding: 0;
    height: 100%;
}
.wrapper {
    height: auto !important;
    height: 100%;
    min-height: 100%;
    margin: auto;
    width: 980px;
    border-left: 1px solid #000000;
    border-right: 1px solid #000000;
    background-color:#FFFFFF;
}
.header {
    width: 100%;
    height: 150px;
    background-color:#333333;
}
.leftcol {
    padding: 10px 0 10px 0;
    width: 160px;
    float: left;
    position:relative;
    left: 800px;
}
.rightcol {
    padding: 10px 0 10px 0;/*левый и правый*/
  /*падинг не указываем из за ИЕ*/
    float: left;
    width: 740px;
    position:relative;
    left: 840px;
}
.wraprightcol {
    float: left;
    width: 100%;
    background-color:#CCCCCC;
    position: relative;
    overflow:hidden;
}
.wrapleftcol {
    float: left;
    width: 100%;
    background: #9DA99C;
    right: 780px;
    position:relative;
}
.clear {
    clear:both;
    font-size:0;
    overflow:hidden; /* для IE */
}

Вот таким вот не хитрым способом я сделал колонки одинаковой высоты на css для сайта.

Поделиться:

You have no rights to post comments

Используя данный сайт, вы даете согласие на использование файлов cookie, помогающих мне сделать его удобнее для вас. Уведомление о cookie