Вам нужна верстка сайта? Выполняем СРОЧНЫЕ ЗАКАЗЫ. Кроссбраузерно, W3C. Наши специалисты верстают макеты качественно и в срок.
Блог  > Html/Css верстка  > Колонки одинаковой высоты {

Колонки одинаковой высоты}

Очень часто перед html кодером стоит задача сверстать макет, когда колонки должны тянуться по вертикали. Проблем не возникает используя табличную верстку. В блочной верстке приходится искать различные решения.

Возможные решения

  • использование фоновой картинки
  • margin + padding + overflow
  • использование обертывающих блоков

Решение 1 — использование фоновой картинки

Данный метод основан на том, что родительский блок будет иметь высоту, равную высоте более высокой колонки. Для реализации данного метода, необходимо "обернуть" плавающие блоки родительским. Для родительского блока, используя CSS, применить свойство background, предварительно подготовив 1px картинку.(на примере чуть больше)

colums_linia

Html

<div class="main_page"> <!-- родительский блок с фоном -->
<div class="left_block">
...текст...
</div>
<div class="content">
...текст...
</div>
<div class="right_block">
...текст...
</div>
</div>

Css

html, body {
height:100%;
}
.main_page {
width: 650px; /* ширина трех блоков */
background: url(images/bg.jpg) repeat-y; /* фоновая картинка. повторяется по вертикали */
overflow:hidden;
zoom:1;/*Для 6-го IE, задаем hasLayout
}
.left_block {
width: 200px;
float: left;
}
.content {
width: 200px;
float: left;
}
.right_block {
width: 250px;
float: left;
}
colums_bg

2 Способ("резиновое" решение)

В своей практике очень часто приходится использовать "резиновые" макеты. Основная идея использованная в этом приёме очень похожа на идею, описанную выше. Разница заключается льшь в том, что приходится подготавливать картинки больших размеров по горизонтали. В этом приеме, необходимо задать background для родительского блока:

CSS

background:url(img/bg_page.jpg) center repeat-y ;

Если перед html кодером стоит задача заполнить все пространство цветом (фоновым изображением), можно поступить так:

CSS

html, body {
height:100%;
}
.page {
min-height:100%;
height:auto !important;
height:100%;
background:url(img/bg_page.jpg) center repeat-y ;
}

Для реализации мы использовали хак с кроссбраузерной высотой. Данный способ описан здесь.

Решение 2 — margin + padding + overflow

Данный метод не использует дополнительных блоков, подходит для резиновой верстки, но как и предыдущий не лишен недостатков.Один из которых, непредсказуемая работа с якорями в разных браузерах. Как видите, весь метод заключается в задавании бОльшего нижнего паддинга и такого же отрицательного нижнего маргина, и оборачивании всего этого в контейнер с overflow:hidden.

html

<div class="main_page">
<div class="col1">
</div>
<div class="col2">
</div>
<div class="col3">
</div>
</div><!--end_main_page-->

css

.main_page {
overflow:hidden;
zoom:1;/*Для 6-го IE, задаем hasLayout
}
.col1, .col2, .col3 {
padding-bottom:30000px;
margin-bottom:-30000px;
}
.col1 {
float:left;
width:25%;
background:#CCC;
}
.col2 {
float:left;
width:49%;
background:#0CF;
}
.col3 {
float:left;
width:25%;
background:#6C3;
}

Одним из недостатков данного метода является невозможным использовать нижний бордер для колонок. Но существует небольщое решение этой проблемы.Для этого надо обернуть .main_page еще раз и внешнему блоку указать нижний border.Все очень просто:)

Решение 3 — использование отрицательного margin и border

Что касается данного способа, то он, как и остальные не лишен недостатков. В данном примере нельзя использовать повторяющееся изображение в background для правого блока, так как цвет мы задаем в border. Но, существует решение с jquery, которое позволяет использовать Border Image (изображение в границе блока).

html

<div id="main_page">
<div id="left_block">
</div>
<div id="right_block">
</div>
</div><!--main_page-->

css

.left_block {
width: 560px;
min-height: 500px;
float:left;
background: #FFFFFF;
border-right: 200px solid #9999FF;
}
.right_block{
width: 200px;
float:left;
color: #FFFFFF;
margin-left: -200px;
}

У left_block мы задали margin-right: 200px цвета, который нам нужен, а у right_block задали отрицательный margin, который в сочетании с float:left, позволит нам спозиционировать блоки так как нам нужно.

Решение 4 - использование фоновой картинки

Данный способ использует библиотеку jquery и небольшой скрипт. Данный спобоб очень интересен при реализации плавающих блоков.

colums_bg

javascript

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
(function($) {
$.fn.equalHeight = function() {
var group = this;
$(window).bind('resize', function(){
var tallest = 0;
$(group).height('auto').each(function() {
tallest = Math.max(tallest, $(this).height());
}).height(tallest);
}).trigger('resize');
}
})(jQuery) $(document).ready (
function()
{
$(".block").equalHeight();
}
);
</script>

Класс "block" присваивается всем блокам, которые необходимо выровнить по высоте.Через скрипт определяется максимальная высота и это значение задается всем блокам.


commentКомментарии:
img_comКристина 05 08 10
Спасибо большое! Статья очень помогла:)
Введите ваше имя:
Пишите свое:

Если вы не можете разобрать код на картинке, кликните по картинке, она обновится.
Введите код с картинки:
 
^ вверх