Как изменить порядок столбцов Bootstrap 3 на мобильном макете?
Я делаю отзывчивый макет с фиксированной верхней панели навигации. Внизу у меня есть две колонки, одна для боковой панели (3), а другая для контента (9). Который на рабочем столе выглядит так
navbar
[3][9]
Когда Я resize мобильный интернет navbar сжимается и скрывается, затем боковая панель складывается поверх содержимого, например:
navbar
[3]
[9]
Я хотел бы основной содержание в верхней части, поэтому мне нужно изменить порядок на мобильном телефоне на это:
navbar
[9]
[3]
Я нашел эту статью, которая охватывает те же вопросы, но принятый ответ был отредактирован, чтобы сказать, что решение не относится к текущей версии Bootstrap.
как я могу изменить порядок этих столбцов на мобильный? Или, альтернативно, как я могу получить список sidbar-группу в мою расширяющуюся навигационную панель?
вот мой код:
<div class="navbar navbar-inverse navbar-static-top">
<div class="container">
<a href="#" class="navbar-brand">Brand Title</a>
<button class="navbar-toggle" data-toggle="collapse" data-target=".navHeaderCollapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="collapse navbar-collapse navHeaderCollapse">
<ul class="nav navbar-nav navbar-right"><!--original navbar-->
<li class="active"><a href="#">Home</a></li>
<li><a href="#">FAQ</a></li>
</ul>
</div>
</div>
</div><!--End Navbar Div-->
<div class="container">
<div class="row">
<div class="col-lg-3">
<div class="list-group">
<a href="#" class="list-group-item">
<h4 class="list-group-item-heading">Lorem ipsum</h4>
<p class="list-group-item-text">Lorem Ipsum is simply dummy text.</p></a>
</div>
</div><!--end sidebar-->
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-body">
<div class="page-header">
Main Content
</div>
</div>
</div><!--end main content area-->
7 ответов:
вы не можете изменить порядок столбцов на меньших экранах, но вы можете сделать это на больших экранах.
чтобы изменить порядок столбцов.
<!--Main Content--> <div class="col-lg-9 col-lg-push-3"> </div> <!--Sidebar--> <div class="col-lg-3 col-lg-pull-9"> </div>по умолчанию сначала отображается основное содержимое.
Так что в мобильном основной контент отображается в первую очередь.
С помощью
col-lg-pushиcol-lg-pullмы можем изменить порядок столбцов на больших экранах и отображать боковую панель слева и основное содержимое справа.работающего скрипка здесь.
ответы здесь работают только для 2 ячеек, но как только эти столбцы имеют больше в них, это может привести к немного большей сложности. Я думаю, что нашел обобщенное решение для любого количества ячеек в нескольких столбцах.
цели
получить вертикальную последовательность тегов на мобильном телефоне, чтобы организовать себя в любом порядке дизайн требует на планшете / рабочем столе. В этом конкретном примере один тег должен войти в поток раньше, чем обычно, а другой-позже обычно.
мобильный
[1 headline] [2 image] [3 qty] [4 caption] [5 desc]планшет+
[2 image ][1 headline] [ ][3 qty ] [ ][5 desc ] [4 caption][ ] [ ][ ]поэтому заголовок должен перетасовываться прямо на планшете+, и технически, так же как и desc-он сидит над тегом заголовка, который предшествует ему на мобильном телефоне. Вы увидите, что в момент 4 подпись тоже в беде.
предположим, что каждая ячейка может варьироваться по высоте и должна быть заподлицо сверху вниз со следующей ячейкой (исключая слабые трюки, такие как таблица).
как и все Bootstrap Задачи сетки Шаг 1 заключается в том, чтобы реализовать HTML должен быть в мобильном порядке, 1 2 3 4 5, на странице. Затем определите, как заставить планшет/рабочий стол переупорядочить себя таким образом - в идеале без Javascript.
решение, чтобы получить
1 headlineи3 qtyсидеть справа, а не слева-это просто установить их обоихpull-right. Это касается CSSfloat: right, что означает, что они находят первое открытое пространство, которое они поместят справа. Вы можете думать о CSS-процессоре браузера, работающем в следующем порядке: 1 вписывается в правый верхний угол. 2 является следующим и регулярным (float: left), поэтому он идет в верхний левый угол. Тогда 3, что являетсяfloat: rightтак что он перепрыгивает под 1.но этого решения было недостаточно для
4 caption; потому что правые 2 клетки так коротки2 imageслева, как правило, длиннее, чем оба они вместе взятые. Bootstrap Grid-это прославленный float hack, что означает4 captionиfloat: left. С2 imageзанимая столько места слева,4 captionпытается вписаться в следующий доступное пространство-часто правая колонка, а не левая, где мы этого хотели.решение здесь (и в более общем плане для любой такой проблемы) состояло в том, чтобы добавить тег hack, скрытый на мобильном телефоне, который существует на планшете+, чтобы вытащить заголовок, который затем покрывается отрицательным полем - например:
[2 image ][1 headline] [ ][3 qty ] [ ][4 hack ] [5 caption][6 desc ^^^] [ ][ ]http://jsfiddle.net/b9chris/52VtD/16633/
HTML:
<div id=headline class="col-xs-12 col-sm-6 pull-right">Product Headline</div> <div id=image class="col-xs-12 col-sm-6">Product Image</div> <div id=qty class="col-xs-12 col-sm-6 pull-right">Qty, Add to cart</div> <div id=hack class="hidden-xs col-sm-6">Hack</div> <div id=caption class="col-xs-12 col-sm-6">Product image caption</div> <div id=desc class="col-xs-12 col-sm-6 pull-right">Product description</div>CSS:
#hack { height: 50px; } @media (min-width: @screen-sm) { #desc { margin-top: -50px; } }Итак, обобщенный решение здесь, чтобы добавить взломать теги, которые могут исчезнуть на мобильном телефоне. На планшете+ теги взлома позволяют отображаемым тегам появляться раньше или позже в потоке, а затем подтягиваться вверх или вниз, чтобы скрыть эти теги взлома.
Примечание: я использовал фиксированные высоты ради простого примера в связанном jsfiddle, но фактический контент сайта, над которым я работал, варьируется по высоте во всех 5 тегах. Оно представляет правильно с относительно большим отклонением в высотах бирки, специально изображении и описание.
примечание 2: в зависимости от вашего макета, вы можете иметь достаточно последовательный порядок столбцов на планшете+ (или большие разрешения), что вы можете избежать использования тегов hack, используя
margin-bottomвместо этого, вот так:Примечание 3: это использует Bootstrap 3. Bootstrap 4 использует другой набор сеток и не будет работать с этими примерами.
Обновлено 2018
на оригинал вопрос о Bootstrap 3, было принято решение используйте push-pull для больших Ширин, а затем столбцы покажут их естественный порядок на меньших (xs) ширинах. (A-b обратный к B-A).
<div class="container"> <div class="row"> <div class="col-md-9 col-md-push-3"> main </div> <div class="col-md-3 col-md-pull-9"> sidebar </div> </div> </div>Bootstrap 3:http://www.codeply.com/go/wgzJXs3gel
@emre заявил:"вы не можете изменить порядок столбцов в меньшие экраны, но вы можете сделать это на больших экранах".
однако это следует уточнить, чтобы заявить: "Вы не можете изменить порядок шириной "наборный" колонки.."в Bootstrap 3.
однако, в Bootstrap 4 теперь возможно до измените порядок, даже если столбцы сложены по всей ширине вертикально, благодаря Bootstrap 4 flexbox. ОФК, пушпульный метод будет по-прежнему работать, но теперь есть другие способы изменить порядок столбцов в Bootstrap 4, что позволяет переупорядочить столбцы полной ширины.
Метод 1-Использовать
flex-column-reverseнаxsэкраны:<div class="row flex-column-reverse flex-md-row"> <div class="col-md-3"> sidebar </div> <div class="col-md-9"> main </div> </div>Метод 2-Использовать
flex-firstнаxsскрины (илиorder-*в 4.0.0):<div class="row"> <div class="col-md-3"> sidebar </div> <div class="col-md-9 flex-first flex-md-unordered"> main </div> </div>Bootstrap 4 (alpha 6):http://www.codeply.com/go/bBMOsvtJhD
Bootstrap 4.0.0: https://www.codeply.com/go/e0v77yGtcr
октября 2017
Я хотел бы добавить еще одно решение Bootstrap 4. Тот, который работал на меня.
свойство CSS "Order" в сочетании с медиа-запросом может использоваться для изменения порядка столбцов, когда они складываются в меньшие экраны.
что-то вроде этого:
@media only screen and (max-width: 768px) { #first { order: 2; } #second { order: 4; } #third { order: 1; } #fourth { order: 3; } }Ссылка CodePen:https://codepen.io/preston206/pen/EwrXqm
изменить размер экрана и вы увидите столбцы получить сложены в другом порядке.
Я свяжу это с вопросом оригинального плаката. С помощью CSS можно настроить таргетинг на навигационную панель, боковую панель и содержимое, а затем упорядочить свойства, применяемые в запросе мультимедиа.
начиная с мобильной версии во-первых, вы можете достичь того, чего вы хотите, большую часть времени.
вот примеры:
http://jsbin.com/wulexiq/edit?html, css, выход
<div class="container"> <h1>PUSH - PULL Bootstrap demo</h1> <h2>Version 1:</h2> <div class="row"> <div class="col-xs-12 col-sm-5 col-sm-push-3 green"> IN MIDDLE ON SMALL/MEDIUM/LARGE SCREEN <hr> TOP ROW XS-SMALL SCREEN </div> <div class="col-xs-12 col-sm-4 col-sm-push-3 gold"> TO THE RIGHT ON SMALL/MEDIUM/LARGE SCREEN <hr> MIDDLE ROW ON XS-SMALL </div> <div class="col-xs-12 col-sm-3 col-sm-pull-9 red"> TO THE LEFT ON SMALL/MEDIUM/LARGE SCREEN <hr> BOTTOM ROW ON XS-SMALL </div> </div> <h2>Version 2:</h2> <div class="row"> <div class="col-xs-12 col-sm-4 col-sm-push-8 yellow"> TO THE RIGHT ON SMALL/MEDIUM/LARGE SCREEN <hr> TOP ROW ON XS-SMALL </div> <div class="col-xs-12 col-sm-4 col-sm-pull-4 blue"> TO THE LEFT ON SMALL/MEDIUM/LARGE SCREEN <hr> MIDDLE ROW XS-SMALL SCREEN </div> <div class="col-xs-12 col-sm-4 col-sm-pull-4 pink"> IN MIDDLE ON SMALL/MEDIUM/LARGE SCREEN <hr> BOTTOM ROW ON XS-SMALL </div> </div> <h2>Version 3:</h2> <div class="row"> <div class="col-xs-12 col-sm-5 cyan"> TO THE LEFT ON SMALL/MEDIUM/LARGE SCREEN TOP ROW ON XS-SMALL </div> <div class="col-xs-12 col-sm-3 col-sm-push-4 orange"> TO THE RIGHT ON SMALL/MEDIUM/LARGE SCREEN <hr> MIDDLE ROW ON XS-SMALL </div> <div class="col-xs-12 col-sm-4 col-sm-pull-3 brown"> IN THE MIDDLE ON SMALL/MEDIUM/LARGE SCREEN <hr> BOTTOM ROW XS-SMALL SCREEN </div> </div> <h2>Version 4:</h2> <div class="row"> <div class="col-xs-12 col-sm-4 col-sm-push-8 darkblue"> TO THE RIGHT ON SMALL/MEDIUM/LARGE SCREEN <hr> TOP ROW XS-SMALL SCREEN </div> <div class="col-xs-12 col-sm-4 beige"> MIDDLE ON SMALL/MEDIUM/LARGE SCREEN <hr> MIDDLE ROW ON XS-SMALL </div> <div class="col-xs-12 col-sm-4 col-sm-pull-8 silver"> TO THE LEFT ON SMALL/MEDIUM/LARGE SCREEN <hr> BOTTOM ROW ON XS-SMALL </div> </div> </div>
на Bootstrap 4, если вы хотите сделать что-то вроде этого:
Mobile | Desktop ----------------------------- A | A C | B C B | D D |вам нужно изменить порядок B затем C затем применить
order-{breakpoint}-firstдо B. И примените две разные настройки, одна из которых заставит их использовать одни и те же cols, а другая-взять всю ширину 12 cols:
меньшие экраны: 12 cols to B и 12 cols к C
большие экраны: 12 cols между суммой из них (B + C = 12)
такой
<div class='row no-gutters'> <div class='col-12'> A </div> <div class='col-12'> <div class='row no-gutters'> <div class='col-12 col-md-6'> C </div> <div class='col-12 col-md-6 order-md-first'> B </div> </div> </div> <div class='col-12'> D </div> </div>
Это довольно легко с jQuery с помощью insertAfter () или insertBefore ().
<div class="left">content</div> <div class="right">sidebar</div><script> $('.right').insertBefore('left'); </script>Это просто
Если вы хотите установить условие o для мобильных устройств, вы можете сделать это так
<script> var $iW = $(window).innerWidth(); if ($iW < 992){ $('.right').insertBefore('.left'); }else{ $('.right').insertAfter('.left'); } </script>
Comments