Очистить строки при выполнении мульти-отзывчивых столбцов-Bootstrap
что название может быть не очень точным, но вот ситуация:
Как вы можете видеть в HTML, система сетки идет от 4 изображения на xl экранах до 3 на экранах lg до 2 на что-нибудь меньше.
Я пытаюсь заставить его правильно отображать-правильное количество изображений при каждом размере экрана, то есть. Тем не менее, что-то фанки происходит и не может понять это с помощью классов bootstraps.
Мне кажется, что я бы динамическое добавление строк в каждой точке останова.
какие предложения?
-- UPDATE -- Просто понял, что col-xl-* не существует. Однако это совершенно не меняет ситуацию. Пожалуйста, не обращайте внимания на декларацию xl.
обновление-- 2 -- Обновленные изображения.
обновление-- 3 -- Я постараюсь прояснить свою цель. Для этого конкретного изображения, прикрепленного в моем посте, я хотел бы, чтобы в строке появилось 3 поля - не все кавардак.
когда он рушится до 2 коробок в строке (устройство xs), я хочу убедиться, что каждая строка имеет 2 коробки.
11 ответов:
я решил эту проблему путем добавления
clearfix
элементов, где они должны быть. Я хотел 3 колонки наmd
и 2 колонки наsm
и вот как я это сделал:<div class="row"> <div class="col-sm-6 col-md-4"></div> <div class="col-sm-6 col-md-4"></div> <div class="clearfix visible-sm"></div> <div class="col-sm-6 col-md-4"></div> <div class="clearfix visible-md"></div> <div class="col-sm-6 col-md-4"></div> <div class="clearfix visible-sm"></div> <div class="col-sm-6 col-md-4"></div> <div class="col-sm-6 col-md-4"></div> <div class="clearfix visible-md"></div> <div class="clearfix visible-sm"></div> <div class="col-sm-6 col-md-4"></div> </div>
так что я использовал
clearfix visible-sm
после каждого второго div иclearfix visible-md
после каждого третьего div. Я не считаю это решение идеальным, но оно работает довольно хорошо.EDIT: В качестве начальной загрузки В3.2.0 классы.
http://getbootstrap.com/css/#responsive-utilities:
классы .видно-хз .видны-см .видно-МД, И.видно-LG также существуют, но не поддерживаются в версии 3.2.0. Они примерно эквивалентны .видимый - * - блок, за исключением дополнительных специальных случаев для переключения связанных элементов.
EDIT 2: это решение работает до тех пор, пока вы не хотите редактировать CSS, если у вас есть возможность сделать это, я рекомендую вам использовать Джонас как это гораздо проще на мой взгляд.
продлить свой загрузчик.css с этим css:
@media (min-width:1200px){ .auto-clear .col-lg-1:nth-child(12n+1){clear:left;} .auto-clear .col-lg-2:nth-child(6n+1){clear:left;} .auto-clear .col-lg-3:nth-child(4n+1){clear:left;} .auto-clear .col-lg-4:nth-child(3n+1){clear:left;} .auto-clear .col-lg-6:nth-child(odd){clear:left;} } @media (min-width:992px) and (max-width:1199px){ .auto-clear .col-md-1:nth-child(12n+1){clear:left;} .auto-clear .col-md-2:nth-child(6n+1){clear:left;} .auto-clear .col-md-3:nth-child(4n+1){clear:left;} .auto-clear .col-md-4:nth-child(3n+1){clear:left;} .auto-clear .col-md-6:nth-child(odd){clear:left;} } @media (min-width:768px) and (max-width:991px){ .auto-clear .col-sm-1:nth-child(12n+1){clear:left;} .auto-clear .col-sm-2:nth-child(6n+1){clear:left;} .auto-clear .col-sm-3:nth-child(4n+1){clear:left;} .auto-clear .col-sm-4:nth-child(3n+1){clear:left;} .auto-clear .col-sm-6:nth-child(odd){clear:left;} } @media (max-width:767px){ .auto-clear .col-xs-1:nth-child(12n+1){clear:left;} .auto-clear .col-xs-2:nth-child(6n+1){clear:left;} .auto-clear .col-xs-3:nth-child(4n+1){clear:left;} .auto-clear .col-xs-4:nth-child(3n+1){clear:left;} .auto-clear .col-xs-6:nth-child(odd){clear:left;} }
использовать его как:
<div class="row auto-clear"> <div class="col-xs-6 col-sm-4 col-md-4 col-lg-3"> <p>Hey</p> </div> </div>
Примечание: это требует использования всех col-размеров и что все cols имеют одинаковый размер.
An .SCSS исправить с помощью переменных bootstrap, взятых из @jonas и @yog
@mixin row-first-child($col-type) { .col-#{$col-type}- { &1:nth-child(12n+1), &2:nth-child(6n+1), &3:nth-child(4n+1), &4:nth-child(3n+1), &6:nth-child(odd){ clear: left; } } } .auto-clear { @media (min-width: $screen-lg-min){ @include row-first-child(lg); } @media (min-width: $screen-md-min) and (max-width: $screen-md-max){ @include row-first-child(md); } @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max){ @include row-first-child(sm); } @media (max-width: $screen-xs-max){ @include row-first-child(xs); } }
причина, по которой ваш макет ломается, связана с динамической высотой представленных изображений. Исправление просто, хотя, просто ограничьте высоту изображений. Например
HTML
<div class="container"> <div class="row"> <div id="uploaded"> <div class="col-xs-6 col-lg-4"> <div class="file-block"> <div class="file-thumbnail"> <img src="http://placehold.it/200x500" alt=""> </div> <div class="file-row-footer"> <a href="javascript:void(0)"> Delete</a> </div> </div> </div> <div class="col-xs-6 col-lg-4"> <div class="file-block"> <div class="file-thumbnail"> <img src="http://placehold.it/200x500" alt=""> </div> <div class="file-row-footer"> <a href="javascript:void(0)"> Delete</a> </div> </div> </div> </div> </div> </div>
CSS
.file-block { border: 1px solid #ccc; border-radius: 10px; margin: 20px 0px; text-align: center; } .file-thumbnail { display: block; padding: 4px; margin-bottom: 20px; line-height: 1.42857143; height: 180px; font: 0/0 a; /* remove the gap between inline(-block) elements */ } .file-thumbnail:before { content: ' '; display: inline-block; vertical-align: middle; /* vertical alignment of the inline element */ height: 100%; } .file-thumbnail img { display: inline-block; margin: 0 auto; max-width: 150px; max-height: 180px; vertical-align: middle; }
Проверьте CodePen чтобы увидеть его в действии. Надеюсь, это поможет.
вы можете исправить это очень легко с помощью css, если вам не нужно поддерживать IE8.
.file-row-contain.col-lg-4:nth-child(3n+1), .file-row-contain.col-xs-6:nth-child(2n+1) { clear: left; }
посмотреть примеры
добавление к ответу @Jonas и @KFunk:
потенциальная починка для требовать пользы всех col-размеров (col-xs-6 col-sm-4 col-md-4 col-lg-4).
классы создано: автоматическая очистка-хз, автоматическая очистка-см, автоматическая очистка-МД и авто-понятно-ЛГ.
Я отвечу на мобильные.
Примечание: это по-прежнему требует, чтобы столбцы были одинаковыми размер.
HTML
<div class="row auto-clear-xs auto-clear-lg"> <div class="col-xs-6 col-lg-3"> <p>Hey</p> </div> </div>
SCSS
@mixin row-first-child($col-type, $clear-type) { .col-#{$col-type}- { &1:nth-child(12n+1), &2:nth-child(6n+1), &3:nth-child(4n+1), &4:nth-child(3n+1), &6:nth-child(odd){ clear: $clear-type; } } } .auto-clear-xs{ @media (min-width: $screen-xs-min){ @include row-first-child(xs, both); } @media (max-width: $screen-xs-min){ @include row-first-child(xs, both); } } .auto-clear-sm{ @media (min-width: $screen-sm){ @include row-first-child(xs, none); @include row-first-child(sm, both); } } .auto-clear-md{ @media (min-width: $screen-md){ @include row-first-child(xs, none); @include row-first-child(sm, none); @include row-first-child(md, both); } } .auto-clear-lg{ @media (min-width: $screen-lg){ @include row-first-child(xs, none); @include row-first-child(sm, none); @include row-first-child(md, none); @include row-first-child(lg, both); } }
CSS
@media (min-width: 480px) { .auto-clear-xs .col-xs-1:nth-child(12n+1), .auto-clear-xs .col-xs-2:nth-child(6n+1), .auto-clear-xs .col-xs-3:nth-child(4n+1), .auto-clear-xs .col-xs-4:nth-child(3n+1), .auto-clear-xs .col-xs-6:nth-child(odd) { clear: both; } } @media (max-width: 480px) { .auto-clear-xs .col-xs-1:nth-child(12n+1), .auto-clear-xs .col-xs-2:nth-child(6n+1), .auto-clear-xs .col-xs-3:nth-child(4n+1), .auto-clear-xs .col-xs-4:nth-child(3n+1), .auto-clear-xs .col-xs-6:nth-child(odd) { clear: both; } } @media (min-width: 768px) { .auto-clear-sm .col-xs-1:nth-child(12n+1), .auto-clear-sm .col-xs-2:nth-child(6n+1), .auto-clear-sm .col-xs-3:nth-child(4n+1), .auto-clear-sm .col-xs-4:nth-child(3n+1), .auto-clear-sm .col-xs-6:nth-child(odd) { clear: none; } .auto-clear-sm .col-sm-1:nth-child(12n+1), .auto-clear-sm .col-sm-2:nth-child(6n+1), .auto-clear-sm .col-sm-3:nth-child(4n+1), .auto-clear-sm .col-sm-4:nth-child(3n+1), .auto-clear-sm .col-sm-6:nth-child(odd) { clear: both; } } @media (min-width: 992px) { .auto-clear-md .col-xs-1:nth-child(12n+1), .auto-clear-md .col-xs-2:nth-child(6n+1), .auto-clear-md .col-xs-3:nth-child(4n+1), .auto-clear-md .col-xs-4:nth-child(3n+1), .auto-clear-md .col-xs-6:nth-child(odd) { clear: none; } .auto-clear-md .col-sm-1:nth-child(12n+1), .auto-clear-md .col-sm-2:nth-child(6n+1), .auto-clear-md .col-sm-3:nth-child(4n+1), .auto-clear-md .col-sm-4:nth-child(3n+1), .auto-clear-md .col-sm-6:nth-child(odd) { clear: none; } .auto-clear-md .col-md-1:nth-child(12n+1), .auto-clear-md .col-md-2:nth-child(6n+1), .auto-clear-md .col-md-3:nth-child(4n+1), .auto-clear-md .col-md-4:nth-child(3n+1), .auto-clear-md .col-md-6:nth-child(odd) { clear: both; } } @media (min-width: 1200px) { .auto-clear-lg .col-xs-1:nth-child(12n+1), .auto-clear-lg .col-xs-2:nth-child(6n+1), .auto-clear-lg .col-xs-3:nth-child(4n+1), .auto-clear-lg .col-xs-4:nth-child(3n+1), .auto-clear-lg .col-xs-6:nth-child(odd) { clear: none; } .auto-clear-lg .col-sm-1:nth-child(12n+1), .auto-clear-lg .col-sm-2:nth-child(6n+1), .auto-clear-lg .col-sm-3:nth-child(4n+1), .auto-clear-lg .col-sm-4:nth-child(3n+1), .auto-clear-lg .col-sm-6:nth-child(odd) { clear: none; } .auto-clear-lg .col-md-1:nth-child(12n+1), .auto-clear-lg .col-md-2:nth-child(6n+1), .auto-clear-lg .col-md-3:nth-child(4n+1), .auto-clear-lg .col-md-4:nth-child(3n+1), .auto-clear-lg .col-md-6:nth-child(odd) { clear: none; } .auto-clear-lg .col-lg-1:nth-child(12n+1), .auto-clear-lg .col-lg-2:nth-child(6n+1), .auto-clear-lg .col-lg-3:nth-child(4n+1), .auto-clear-lg .col-lg-4:nth-child(3n+1), .auto-clear-lg .col-lg-6:nth-child(odd) { clear: both; } }
Это на самом деле так и должно быть. Сетка Bootstrap состоит из 12 столбцов, вы говорите ему, чтобы размер одного элемента lg был 4/12, что является третьим, а элемент xs-6/12, что составляет половину доступной ширины.
Если вы проверите примененный стиль, вы увидите, что col-xs-6 совпадает с установкой ширины одного элемента на 50% и 33.33% для col-lg-4.
вы можете прочитать больше о системе сетки здесь
EDIT: я думаю, что понимаю теперь вашу проблему, не видя кода я не могу дать вам точное решение. Однако проблема, похоже, заключается в переменной высоте ваших ящиков, Если у вас есть все они на одной высоте, это должно дать вам правильное количество ящиков в строке.
похоже, что единственным решением вашей проблемы является установка минимальной высоты или фиксированной высоты для ваших элементов, чтобы не было несоответствий, которые вызывают ваши проблемы.
добавить это:
.file-row-contain { min-height:250px; }
...установите высоту в соответствии с вашими потребностями
Я тоже искал решение, и поскольку мой HTML отображается через CMS, я не мог использовать решение принятого ответа.
Так что мое решение:
.teaser { // break into new line after last element > div:last-child { clear: right; } } .teaser { // two colums @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { > div:nth-child(2n+1) { clear: left; } } } .teaser { // three colums @media (min-width: @screen-md-min) { > div:nth-child(3n+1) { clear: left; } } }
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/> <div class="row teaser"> <div class="col-sm-6 col-md-4">div1</div> <div class="col-sm-6 col-md-4">div2<br>more content</div> <div class="col-sm-6 col-md-4">div3</div> <div class="col-sm-6 col-md-4">div4</div> <div class="col-sm-6 col-md-4">div5<br>more content content<br>content</div> <div class="col-sm-6 col-md-4">div6</div> <div class="col-sm-6 col-md-4">div7<br>more content</div> <div class="col-sm-6 col-md-4">div8</div> </div>
надеюсь, это поможет кому-то: -)
Bootstrap 4 вводит
hidden-*-up
иhidden-*-down
классы. Очень удобная (и элегантная) утилита для таких ситуаций.доступные классы
- The
.hidden-*-up
классы скрывают элемент, когда видовой экран находится в заданной точке останова или шире. Например,.hidden-md-up
скрывает элемент на средних, больших и очень больших экранах.- The
.hidden-*-down
классы скрывают элемент, когда видовой экран находится на заданная точка останова или меньше. Например,.hidden-md-down
скрывает элемент на сверхмалых, малых и средних видовых экранах.- нет явных"видимых"/" показывающих " адаптивных классов утилит; вы делаете элемент видимым, просто не скрывая его в этой точке останова размер.
- вы можете объединить один
.hidden-*-up
класса с одним.hidden-*-down
класс для отображения элемента только на заданном интервале размеров экрана. Для например,.hidden-sm-down.hidden-xl-up
показывает элемент только на средний и большой область просмотра. Использование нескольких.hidden-*-up
классы или несколько.hidden-*-down
классы избыточны и бессмысленны.- эти классы не пытаются приспособить менее распространенные случаи, когда видимость элемента не может быть выражена как один непрерывный диапазон размеров точек останова видового экрана; вместо этого вам нужно будет использовать пользовательский CSS в таких случаях.
http://v4-alpha.getbootstrap.com/layout/responsive-utilities/
в случае, если количество
col-
полей в строке динамический и разные разрешения, как это в моем случае, чем на основе вашихcol-
классы выполняют оператор модуля. Возьмите пример ниже примера.<div class="row"> <?php $elementCounter = 0; ?> <?php foreach ( $this->programs as $program ): ?> <div class="col-xs-6 col-sm-3"> DATA </div> <?php $elementCounter++; ?> <?php if( $elementCounter % 4 == 0 ): ?> <div class="clearfix hidden-xs"></div> <?php elseif( $elementCounter % 2 == 0 ): ?> <div class="clearfix visible-xs"></div> <?php endif; ?> <?php endforeach; ?> </div>
col-xs-6 означает, что он имеет 2 коробки в ряд для сверхмалых устройств. так что для этого я добавил, что
$elementCounter % 2 == 0
условие, так что это верно для каждого второго элемента ( после ). и добавилclearfix
Сvisible-xs
поэтому он не должен влиять на рабочий стол или другие резолюции.col-sm-3 означает 4 коробки в строке для небольших и выше устройств, так что в этом случае я добавил
$elementCounter % 4 == 0
иhidden-xs
так что clearfix скрыт для устройств xs и будет виден для небольших и выше. Таким образом, вы можете изменить его соответствующим образом.