Jak zmienić kolejność kolumn Bootstrap 3 w układzie mobilnym?

Robię responsywny układ z górnym stałym paskiem nawigacyjnym. Poniżej mam dwie kolumny, jedną dla paska bocznego (3) i jedną dla treści (9). Który na pulpicie wygląda tak

Navbar
[3][9]

Kiedy i resize do mobile navbar jest skompresowany i ukryty, to pasek boczny jest ułożony na wierzchu zawartości, tak:

Navbar
[3]
[9]

Chciałbym, aby główna treść była na górze, więc muszę zmienić kolejność na mobile to this:

Navbar
[9]
[3]

Znalazłem ten artykuł, który obejmuje te same punkty, ale zaakceptowana odpowiedź została edytowana, aby powiedzieć, że rozwiązanie no odnosi się do bieżącej wersji Bootstrap.

Jak mogę zmienić kolejność tych kolumn na telefonie komórkowym? Lub alternatywnie, jak Mogę umieścić listę-grupę sidbarów w moim rozwijającym się pasku nawigacyjnym?

Oto Mój kod:

<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-->
Author: Community, 2013-11-24

7 answers

Nie można zmienić kolejności kolumn na mniejszych ekranach, ale można to zrobić na dużych ekranach.

Więc zmień kolejność kolumn.

<!--Main Content-->
<div class="col-lg-9 col-lg-push-3">
</div>

<!--Sidebar-->
<div class="col-lg-3 col-lg-pull-9">
</div>

Domyślnie wyświetla najpierw główną zawartość.

Tak więc w mobile główna Zawartość jest wyświetlana jako pierwsza.

Za pomocą col-lg-push i col-lg-pull możemy zmienić kolejność kolumn na dużych ekranach i wyświetlić pasek boczny po lewej stronie i główną zawartość po prawej stronie.

Praca

 425
Author: emre nevayeshirazi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-24 05:35:20

Odpowiedzi tutaj działają tylko dla 2 komórek, ale jak tylko te kolumny mają więcej w sobie, może to prowadzić do nieco większej złożoności. Myślę, że znalazłem uogólnione rozwiązanie dla dowolnej liczby komórek w wielu kolumnach.

Bramki

Uzyskaj pionową sekwencję znaczników na telefonie komórkowym, aby uporządkować się w dowolnej kolejności na tablecie/komputerze. W tym konkretnym przykładzie jeden znacznik musi wejść do przepływu wcześniej niż normalnie, a inny później niż zwykle would.

Mobile

[1 headline]
[2 image]
[3 qty]
[4 caption]
[5 desc]

Tablet+

[2 image  ][1 headline]
[         ][3 qty     ]
[         ][5 desc    ]
[4 caption][          ]
[         ][          ]

Więc nagłówek musi przetasować prawo na tablecie+, i technicznie, tak samo desc-znajduje się nad znacznikiem podpisu, który poprzedza go na telefonie komórkowym. Zobaczysz za chwilę 4 podpis też ma kłopoty.

Załóżmy, że każda komórka może różnić się wysokością i musi być wyrównana od góry do dołu z następną komórką(wykluczając słabe sztuczki, takie jak tabela).

Podobnie jak w przypadku wszystkich problemów z siatką Bootstrap Krok 1 to realizacja HTML musi być w komórce-kolejność, 1 2 3 4 5, na stronie. Następnie określ, jak sprawić, aby tablet / komputer zmienił kolejność w ten sposób - najlepiej bez Javascript.

Rozwiązaniem, aby 1 headline i 3 qty usiąść w prawo, a nie w lewo, jest po prostu ustawić je obie pull-right. Dotyczy to CSS float: right, co oznacza, że znajdują pierwszą otwartą przestrzeń, która zmieści się po prawej stronie. Możesz myśleć o procesorze CSS przeglądarki działającym w następującej kolejności: 1 pasuje do prawego górnego rogu. 2 jest następny i jest regularny (float: left), więc idzie do lewego górnego rogu. Następnie 3, czyli float: right, więc przeskakuje Pod 1.

Ale To rozwiązanie nie wystarczyło dla 4 caption; ponieważ prawa 2 komórki są tak krótkie 2 image po lewej wydają się być dłuższe niż obie razem wzięte. Bootstrap Grid jest tzw. float hack, czyli 4 caption jest float: left. Ponieważ 2 image zajmuje tyle miejsca po lewej stronie, 4 caption próbuje zmieścić się w następnej dostępnej przestrzeni-często w prawej kolumnie, a nie w lewej, gdzie chcieliśmy to.

Rozwiązaniem tutaj (i bardziej ogólnie dla każdego problemu jak ten) było dodanie znacznika hack, ukrytego na telefonie komórkowym, który istnieje na tablecie+, aby wypchnąć podpis, który następnie zostaje zakryty przez ujemny margines-jak to:

[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; }
}

Więc uogólnionym rozwiązaniem jest dodanie tagów hack, które mogą zniknąć na telefonie komórkowym. Na tablecie+ tagi hack pozwalają wyświetlane tagi do pojawiają się wcześniej lub później w przepływie, a następnie zostać wyciągnięty w górę lub w dół, aby ukryć te tagi hack.

Uwaga: użyłem stałych wysokości dla prostego przykładu w linkowanym jsfiddle, ale rzeczywista zawartość strony, nad którą pracowałem, różni się wysokością we wszystkich tagach 5. Renderuje poprawnie ze stosunkowo dużą wariancją wysokości znaczników, zwłaszcza obrazu i desc.

Uwaga 2: W zależności od układu możesz mieć wystarczająco spójną kolejność kolumn na tablecie+ (lub większe rozdzielczości), że można uniknąć używania tagów hakerskich, używając zamiast tego margin-bottom, Jak tak:

Uwaga 3: To używa Bootstrap 3. Bootstrap 4 używa innego zestawu siatek i nie będzie działać z tymi przykładami.

Http://jsfiddle.net/b9chris/52VtD/16632/

 25
Author: Chris Moschini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-21 11:32:22

Aktualizacja 2018

Dla oryginalnego pytania opartego na Bootstrap 3, rozwiązaniem było użycie push-pull dla większych szerokości, a następnie kolumny pokażą ich naturalny porządek na mniejszych (XS) szerokościach. (A-B odwróć do 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 stwierdził, " nie można zmienić kolejności kolumn na mniejszych ekranach, ale można to zrobić w dużych ekrany "

Należy jednak wyjaśnić, aby stwierdzić: "nie można zmienić kolejności pełna szerokość " ułożone " kolumny .."w Bootstrap 3.


Jednak w Bootstrap 4 jest teraz możliwe, Aby zmienić kolejność, nawet jeśli kolumny są ułożone na całej szerokości pionowo, dzięki Bootstrap 4 flexbox. OFC, metoda push pull nadal będzie działać, ale teraz są inne sposoby zmiany kolejności kolumn w Bootstrap 4, dzięki czemu możliwość ponownego zamówienia kolumn o pełnej szerokości.

Metoda 1-Użyj flex-column-reverse dla xs ekranów:

<div class="row flex-column-reverse flex-md-row">
    <div class="col-md-3">
        sidebar
    </div>
    <div class="col-md-9">
        main
    </div>
</div>

Metoda 2-Użyj flex-first do xs ekranów (lub order-* w 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 (Alfa 6): http://www.codeply.com/go/bBMOsvtJhD
Bootstrap 4.0.0: https://www.codeply.com/go/e0v77yGtcr

 24
Author: Zim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 10:06:47

Październik 2017

Chciałbym dodać kolejne rozwiązanie Bootstrap 4. Taki, który zadziałał na mnie.

Właściwość CSS "Order", w połączeniu z zapytaniem o media, może być używana do ponownego porządkowania kolumn, gdy zostaną ułożone w stos na mniejszych ekranach.

Coś takiego:

@media only screen and (max-width: 768px) {
    #first {
        order: 2;
    }
    #second {
        order: 4;
    }
    #third {
        order: 1;
    }
    #fourth {
        order: 3;
    }
}

CodePen Link: https://codepen.io/preston206/pen/EwrXqm

Dostosuj rozmiar ekranu, a kolumny zostaną ułożone w innej kolejności.

I ' ll tie to jest pytanie z oryginalnego plakatu. Za pomocą CSS można kierować na pasek nawigacyjny, pasek boczny i zawartość, a następnie zastosować właściwości order w zapytaniu o media.

 5
Author: bprdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-19 18:52:20

Zaczynając od wersji mobilnej, możesz osiągnąć to, czego chcesz, przez większość czasu.

Przykłady tutaj:

Http://jsbin.com/wulexiq/edit?html, css, output

<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>
 1
Author: user2866893,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 12:48:12

W Bootstrap 4 , jeśli chcesz zrobić coś takiego:

    Mobile  |   Desktop
-----------------------------
    A       |       A
    C       |   B       C
    B       |       D
    D       |

Należy odwrócić kolejność B Następnie C następnie zastosować order-{breakpoint}-first do B . I Zastosuj dwa różne ustawienia, jedno, które sprawi, że będą miały te same kolory, a drugie, które sprawi, że będą miały pełną szerokość 12 kolorów: {]}

  • Mniejsze ekrany: 12 kolorów do B i 12 kolorów do C

  • Większe ekrany: 12 KOLs między ich sumą (B + C = 12)

Like this

<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>

Demo: https://codepen.io/anon/pen/wXLGKa

 0
Author: ajax333221,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-05 22:12:37

Jest to dość proste z jQuery używając insertAfter () lub insertBefore ().

<div class="left">content</div> <div class="right">sidebar</div>

<script>
$('.right').insertBefore('left');
</script>

That simple

Jeśli chcesz ustawić warunek o dla urządzeń mobilnych możesz zrobić to tak

<script>
  var $iW = $(window).innerWidth();
  if ($iW < 992){
     $('.right').insertBefore('.left');
  }else{
     $('.right').insertAfter('.left');
  }
</script>

Przykład https://jsfiddle.net/w9n27k23/

 -2
Author: Nicola Mihaita,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-30 10:03:49