Подтвердить что ты не робот

Проблемы с компоновкой бутстрапа 3?

Я использую Bootstrap 3 для компоновки моего сайта с флюидной сеткой, но ящики в сетке не выстраиваются подряд подряд.

Вы можете видеть: enter image description here

Когда поле выше другого, сетка не выравнивается по левому краю.

Как я могу исправить это с помощью какого-нибудь взлома? Спасибо за помощь!

Примечание: высота окна - это содержимое автоматической упаковки.

Мой html-код

    <div class="row">
     <?php foreach($contens as $content){?>
      <div class="col-xs-12 col-sm-6 col-md-3 col-lg-3">
       <div class="contents-block">
        <div class="image"><img href="<?php echo $content['image'];?>" />
        </div>
            ................ some code .............
       </div>
      </div>
    <?php } ?>
   </div>
4b9b3361

Ответ 1

Я не уверен точно, что вы пытаетесь выполнить, но проблема вызвана тем, что содержимое столбцов изменяется по высоте. Существует 3 общих подхода к устранению проблем выравнивания/высоты сетки.

1.. Только CSS-подход (с использованием ширины столбца CSS3).

http://bootply.com/85737

2. Такой подход "clearfix" (требует итерации каждые x столбцов). Это подход рекомендованный Bootstrap, известный как "отзывчивый сброс" .

http://bootply.com/89910 (есть также только для CSS вариация этого подхода)

3. Наконец, вы можете использовать плагин Isotope/Masonry. Вот рабочий пример, который использует Isotope + Bootstrap..

http://bootply.com/61482


Обновление 2017

Другой вариант - сделать столбцы одинаковой высоты (используя flexbox):

Поскольку проблема вызвана разницей в высоте, вы можете сделать столбцы равной высотой по каждой строке. Flexbox - лучший способ сделать это и поддерживается в Bootstrap 4.

.row.display-flex {
  display: flex;
  flex-wrap: wrap;
}
.row.display-flex > [class*='col-'] {
  display: flex;
  flex-direction: column;
}

Flexbox равная высота Демо


Подробнее о столбцах переменной высоты загрузки

Ответ 2

У меня была аналогичная проблема. Я исправил этот script довольно быстро и безболезненно:

<script>
  $.getScript('//cdn.jsdelivr.net/isotope/1.5.25/jquery.isotope.min.js',function(){
    $('#container').isotope({
      itemSelector : '.items',
      layoutMode : 'fitRows'
    });
  });
</script>

в вашем случае вам нужно будет добавить идентификатор контейнера, например. '#container' и добавьте класс к каждому элементу, например. '.item'

Ответ 3

Обеспечьте высоту для каждого столбца <div>.

Я бы дал вашим столбцам имя класса:

<div class="col-xs-12 col-sm-6 col-md-3 col-lg-3 outer">
    ...
</div>

И затем сделайте что-то вроде этого:

.outer {
    height: 200px /* Or whatever the height really is */
}

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

Лучшая часть - это не требует добавления случайного <div>, который не имеет никакого отношения к контенту.

EDIT:

Вы также можете установить высоту только при использовании контрольных точек "см" и выше.

Это гарантирует, что все строки будут использоваться при использовании столбцов и что между ними не будет больших промежутков, когда они будут иметь полную ширину (то есть col-xs-12).

@media (min-width: 768px) {
    .outer {
        height: 200px /* Or whatever */
    }
}

Ответ 4

Здесь супер простое решение jQuery для выравнивания всех элементов.

Я решил эту проблему, получив столбец с наивысшей высотой и установив эту высоту для всех остальных столбцов. Попробуйте снимок ниже.

setTimeout(function(){
  var maxHeight = 0;
  $('.item').each(function() {if ($(this).height() > maxHeight){maxHeight = $(this).height()}});
  $('.item').each(function() {$(this).height(maxHeight)});
}, 1000);
.item {
  border: 1px solid black;
}
.big {
  height:50px;
  background-color:fuchsia;
}
.normal {
  height:40px;
  background-color:aqua;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row">
	<div class="col-xs-4 item big">I am big</div>
	<div class="col-xs-4 item normal">I am normal</div>
	<div class="col-xs-4 item normal">I am normal</div>
	<div class="col-xs-4 item normal">I am normal</div>
	<div class="col-xs-4 item normal">I am normal</div>	
	<div class="col-xs-4 item normal">I am normal</div>
</div>

Ответ 5

Я думаю, вам нужно использовать clearfix. просто поместите класс clearfix в свой родительский элемент (в вашем случае, строка, я думаю) и поместим это в ваш css:

.clearfix:after {
 visibility: hidden;
 display: block;
 font-size: 0;
 content: " ";
 clear: both;
 height: 0;
 }
.clearfix { display: inline-block; }
/* start commented backslash hack \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* close commented backslash hack */

Ответ 6

Я согласен с Skelly в том, что плагин для масонства, вероятно, подходит, но для быстрого легкого исправления вы можете просто создать новую строку каждый раз, когда вы хотите, чтобы что-то оставалось выровненным - это быстрый и грязный хак и может иметь некоторые проблемы с меньшими видовыми экранами.

Ответ 7

Мое решение: Я работал с видимыми классами бутстрапа 3

<div class="row">
<?php 
    $indexLg = 1;
    $indexSm = 1;
    foreach($contens as $content) {?>
    <div class="col-xs-12 col-sm-6 col-md-3 col-lg-3">
        <div class="contents-block">
            <div class="image"><img href="<?php echo $content['image'];?>" />
            </div>
        </div>
    </div>
<?php
    if($indexLg%4 == 0) {
        $indexLg = 1;
        ?>
            <div class="clearfix visible-lg visible-md"></div>
        <?php
    } 
    if($indexSm%2 == 0) {
        $indexSm = 1;
        ?>
            <div class="clearfix visible-sm"></div>
        <?php
    }
    ?>
        <div class="clearfix visible-xs"></div>
    <?php
    }
} ?>