2015-02-11 2 views
0

Мой сайт содержит серию div (представленных зелеными полями), и мне нужно всего лишь 3 строки. Но они не все равны по высоте, поэтому он выталкивает другие divs из выравнивания.Как сделать каждый div одинаковой высоты, чтобы поддерживать работу с 3 div на строку

Смотрите здесь:

Screenshot

и вот мой демонстрационный сайт, показывающий полный вопрос, если вы прокрутите вниз: http://testsite24.netai.net/public/demo.html

Вот пример кода для одного из дивы (зеленый коробки):

<div class="block personal fl"> 

       <!-- CONTENT --> 
       <div class="content"> 
        <p class="price"> 
        <p class="vignette" style="background-image:url()"></p> 
        </p> 

       </div> 

       <ul class="features"> 
    <li class="titlebox">59 Acre Paradise</li> 
    <li>Kings County</li> 
    <li>Offered at $95,000</li> 
        </ul> 

</div> 

Можете ли вы предложить решение для сделать все высоты div одинаковой высоты, чтобы они оставались в расстановке? Решение должно работать для IE8 +. Возможно, сценарий для определения самого длинного div в строке и сделать другие два одинаковой высоты?

Раньше я использовал этот скрипт, но FlexWrap не поддерживается IE8/IE9, поэтому мне пришлось отказаться от него. Есть идеи? Спасибо!!

<script> 

;(function($, window, document, undefined) 
{ 
    'use strict'; 

    var s = document.body || document.documentElement, s = s.style; 
    if(s.webkitFlexWrap == '' || s.msFlexWrap == '' || s.flexWrap == '') return true; 

    var $list  = $('.list'), 
     $items  = $list.find('.list__item__inner'), 
     setHeights = function() 
     { 
      $items.css('height', 'auto'); 

      var perRow = Math.floor($list.width()/$items.width()); 
      if(perRow == null || perRow < 2) return true; 

      for(var i = 0, j = $items.length; i < j; i += perRow) 
      { 
       var maxHeight = 0, 
        $row  = $items.slice(i, i + perRow); 

       $row.each(function() 
       { 
        var itemHeight = parseInt($(this).outerHeight()); 
        if (itemHeight > maxHeight) maxHeight = itemHeight; 
       }); 
       $row.css('height', maxHeight); 
      } 
     }; 

    setHeights(); 
    $(window).on('resize', setHeights); 
    $list.find('img').on('load', setHeights); 

})(jQuery, window, document); 

</script> 
+0

Почему бы не использовать CSS вместо Javascript –

+0

Try: http://www.cssnewbie.com/example/equal-heights/ –

+0

Кто-то задал этот вопрос [до того] [1]. Они получили пару ответов. [1]: http://stackoverflow.com/questions/28119377/bootstrap-3-responsive-columns-of-varying-heights/28119957#28119957 – AskYous

ответ

1

Это кажется супер чрезмерным, когда вы можете просто использовать vertical-align:top; по пунктам ... Дайте им мин-высоту, чтобы сделать его немного сильнее.

+0

Спасибо, Шан, можете быть конкретным относительно того, какой элемент css я прикрепляю к этому? Применяется ли это к div-классу «блокировать личный fl»? Я использовал элемент Inspect Element и изменил его на .block { ширина: 30%; margin: 0 15px; вертикально-выровненный: сверху; margin-bottom: 30px; max-height: 10%; мин-высота: 10%; переполнение: скрыто; Но не вижу изменений. – Nova

+0

Ya, дайте этому блоку vertical-align и 'display: inline-block' он не будет работать с блочными элементами FYI. Как вы кладете эти коробки? Плавающие? исправлено с? Процент? –

+0

Вот скриншот моей страницы, после внесения изменений. Вы можете видеть, что я использую float: left; это выглядит.Изменения, похоже, не работают: http://testsite24.netai.net/public/screenshot3.png – Nova

0

вы можете использовать max-height, чтобы заставить div (который вызывает проблемы) не получить больше, чем конкретное значение. Для примера установите все 3 divs в max-height: 50px. Они не станут больше и останутся выровненными.

+0

Я добавил максимальную высоту 600 пикселей, и все еще есть пробел. Вот скриншот: http://testsite24.netai.net/public/screenshot4.png – Nova

+0

Фактически max-height не устанавливает текущую высоту. Это просто говорит браузеру не превышать этот предел. – YourFriend

+0

Итак, это не решение, которое я ищу? Я просто хочу, чтобы все зеленые ящики были равны по высоте, с гибкой высотой, основанной на содержании div. – Nova

1

использование

display: table 
display: table-cell 

Код пера: http://codepen.io/anon/pen/mypGBV

+0

Кажется не работает, вот скриншот: http://testsite24.netai.net/public/screenshot2.png – Nova

+0

Что не работает? Разделы выравниваются по высоте в соответствии с запросом, и есть 3 столбца. –

+0

Я не вижу никаких зеленых ящиков. Я что-то не понимаю? Я хочу зеленые коробки следующим образом: http://testsite24.netai.net/public/screenshot4.png кроме высоты. В результате ваш пример - просто пробел с текстом. – Nova

0

Вам не нужно JS для этого. Просто оберните каждую строку divs в div обертки с помощью стиля clear: both. Смотрите эту codepen: http://codepen.io/anon/pen/GgyXNp

+0

Возможно, это только я, но divs - это * не * равная высота, когда я просматриваю ваш код – Nova

Смежные вопросы