Создание колонок равной высоты, используя элементы div, связано с некоторыми проблемами. Обычно такой эффект реализуется с помощью фоновых изображений. Однако, данный метод лишь создаёт иллюзию равной высоты у колонок и имеет определённые минусы. В качестве альтернативы этому методу можно использовать javascript и популярный фреймворк jQuery.

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

<div class="column news"></div>
<div class="column articles"></div>
<div class="column contacts"></div>

Предварительно сделаем их «плавающими», а ширину каждой колонки сделаем равной 1/3 ширины окна.

.column{
    float:left;
    width:33%
}
.news{
    background:#4B2185
}
.articles{
    background:#DC85DE
}
.contacts{
    background:#C43959;
    width:34%
}

Добавим файл библиотеки и небольшой код:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function equalHeight(group) {
    tallest = 0;
    group.each(function() {
        thisHeight = $(this).height();
        if(thisHeight > tallest) {
        tallest = thisHeight;
        }
    });
    group.height(tallest);
}
$(document).ready(function() {
    equalHeight($(".column"));
});
</script>

Параметром функции equalHeight является класс элементов, которым необходимо сделать одинаковую высоту.

Конечно это не панацея и данный метод также имеет свои минусы, но как ещё один вариант решения проблемы, вполне имеет право на жизнь.

Оригинал: Equal Height Columns with jQuery

22 комментария к статье «jQuery: Колонки с одинаковой высотой»:

  1. ctapbiu:

    при уменьшении высоты браузера текст среднего блока выходит за рамки блока (в FireFox 2)

  2. Alex:

    Да, к сожалению это минус данного примера. Если после загрузки начать изменять ширину окна или увеличивать текст, перерасчёта высоты не происходит.

  3. А вы за «Спартак» болеете или текст попался под руку случайно?

  4. Alex:

    Просто люблю футбол. Видимо новость была про спартак.

  5. Не вижу смысла в такой конструкции. Все это гораздо легче реализуется всего лишь одной таблицей, причем без глюков (и без скриптов).

    Единственный минус таблиц — отображение на экранах мобильных устройств, когда желательно такого рода колонки показать одну под другой. Но и это легко лечится: достаточно в соответствующем css прописать что-нибудь вроде td{display:inline}.

    Зачем использовать технологию там, где без нее легко обойтись? Только потому, что модно?

  6. Оформил, как плагин, и кое что переделал:


    (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()
    {
    $(".column").equalHeight();
    }
    );

  7. * забыл на комменты подписаться, сорри…

  8. Использовать jQuery только для регулирования высоты колонок… Ну не знаю :)

  9. asse:

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

  10. Походу случайно , у меня за рамки выходит как поправить

  11. Alex:

    ASSE, согласен с вами, в приведенном примере можно было бы конечно и таблицами обойтись. Но представьте что вам надо расположить несколько объектов одинаковой высоты, следующих друг за другом, количество которых на одной линии не известно. Как вы такое с помощью таблиц сделаете?

  12. Опять же, не вижу проблем внести в <tr> нужное количество <td> — хоть на стороне сервера, хоть на стороне клиента. Равно как не вижу острой необходимости делать блоки одинаковой высоты в разных строках, если в одну они не помещаются, — за очень, может быть, экзотическими исключениями.

    Так что пример, конечно, представляет некоторый теоретический интерес, но скорее из области «Посмотрите, как я умею», а не с точки зрения практического использования.

  13. Alex:

    Быть может кому-то как раз в эти экзотические случаи это поможет.

  14. Что ж, Алекс, ваша правда. ;-)
    В любом случае, с удовольствием читаю ваши заметки и искренне желаю успехов.

  15. Alex:

    Спасибо, приятно слышать.

  16. Anna:

    Did you forget to mention the link to the original author? – http://www.cssnewbie.com/equal-height-columns-with-jquery/

  17. У меня тоже за рамки выходит последняя колонка.

  18. UdarEC:

    Не пойму, что все заладили со своими таблицами?
    Многие люди верстают без таблиц принципиально, и им такой метод очень даже подходит. Таблицы для табличных данных созданы. Никто же не забыл, я надеюсь?

    Автор, спс, за перевод статьи.

  19. RPG:

    Интересно, подключается целая библиотека для того, чтобы воспользоваться одним-единственным селектором? Есть же библиотека поскромнее, чисто для css селекторов, называется sizzle. И именно на основе sizzle построены селекторы jQuery. А вообще getElementsBy… в таких случаях и быстрее и уместнее.

  20. А если на body прописать перерасчет высоты при onresize, браузер будет сильно тормозить?

  21. alex:

    Господа, которые все пишут о табличной верстке – Вы правда все еще делаете табличные Layout-ы ?

    Большой Вам удачи, господа :-) Как познакомитесь с реальными advanced проектами – пишите.

Оставь комментарий: