Фев
Создаём колонки одинаковой высоты на 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; }
Для каждой колонки создаём обёртку 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;/*-относит поз-*/ }
Смещаем слой wrapleftcol
влево на 780 пикселей right: 780px;
. 780 пикселей ширина правой колонки. После сдвига слоя мы увидим слой
wraprightcol
.
.wrapleftcol { float: left; width: 100%; background: #9DA99C; right: 780px;/*--смещаем влево на 780px--*/ position:relative; }
Сдвигаем назад блоки с нашими колонками ( они сдвинулись вместе с слоем wrapleftcol) left: 780px
.
.leftcol { width: 200px; float: left; position:relative; left: 780px;/*-сдвигаем колонки назад-*/ } .rightcol { float: left; width: 780px; position:relative; left: 780px;/*-сдвигаем колонки назад-*/ }
Обрезаем всё что вышло за рамки слоя wraprightcol
overflow:hidden
.wraprightcol { float: left; width: 100%; background-color:#CCCCCC; position: relative; overflow:hidden;/*-обрезаем-*/ }
У 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 для сайта.