Mobil düzende Bootstrap 3 sütun sırasını nasıl değiştirebilirim?


293

Üst sabit bir navbar ile duyarlı bir düzen yapıyorum. Altında, biri kenar çubuğu (3) ve diğeri içerik (9) için olmak üzere iki sütun var. Masaüstünde hangisi böyle görünüyor

gezinti çubuğu
[3] [9]

Ben resizemobil için navbarsıkıştırılmış ve gizli olduğunda, kenar çubuğu içeriğin üstüne yığılmış, şöyle:

gezinti çubuğu
[3]
[9]

En üstteki ana içeriği istiyorum, bu yüzden mobil siparişini buna değiştirmeliyim:

gezinti çubuğu
[9]
[3]

Aynı noktaları kapsayan bu makaleyi buldum , ancak kabul edilen cevap, çözümün Bootstrap'ın geçerli sürümü için geçerli olmadığını söylemek için düzenlendi.

Bu sütunları mobil cihazda nasıl yeniden sıralayabilirim? Veya alternatif olarak, kenar çubuğu liste grubunu genişleyen gezinme çubuğuma nasıl alabilirim?

İşte benim 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-->

Yanıtlar:


475

Daha küçük ekranlarda sütunların sırasını değiştiremezsiniz, ancak bunu büyük ekranlarda yapabilirsiniz.

Bu yüzden sütunlarınızın sırasını değiştirin.

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

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

Varsayılan olarak ilk önce ana içerik görüntülenir.

Yani mobilde önce ana içerik görüntülenir.

By kullanarak col-lg-pushve col-lg-pullbiz sağda sola ve ana içeriği büyük ekranlar ve ekran kenar çubuğunda sütunları yeniden sıralayabilirsiniz.

Çalışma Burada keman .


8
Ben de tam olarak bunu istedim ve cevabınız mükemmel bir anlam ifade etti, teşekkürler!
user3000310

2
@ emre, bunu neden tam olarak belirtiyorsunuz? resmi örnekte ortada da çalışıyor gibi görünüyor. getbootstrap.com/css/#grid
Luchux

3
İtme ve çekme sınıflarının ne için iyi olduğunu merak ediyorum - şimdi biliyorum. Teşekkürler.
cdonner

28
3.0 itme / çekme resmi sürümünden kısa bir süre sonra, herhangi bir ekran boyutunda (xs, sm, md, lg) sütunların sırasını değiştirmek için kullanılabilir bootply.com/ft1tOI71cZ
Zim

Bunun için teşekkürler. Bu positioning cols absolutelyve benzeri!
Radyasyon

89

Güncelleme 2018

İçin orijinal dayalı soru Bootstrap 3 , çözüm oldu itme-çekme kullanın .

Gelen Bootstrap 4 artık var mümkün , sırasını değiştirmek için sütun tam genişlikli istiflendiği zaman bile özyükleme 4 FlexBox sayesinde, dikey. OFC, itme çekme yöntemi yine de çalışır, ancak şimdi Bootstrap 4'te sütun sırasını değiştirmenin başka yolları da vardır, bu da tam genişlikli sütunları yeniden sıralamayı mümkün kılar.

Yöntem 1 - Ekranlar flex-column-reverseiçin kullanın 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>

Yöntem 2 - Ekranlar order-firstiçin kullanın xs:

<div class="row">
    <div class="col-md-3">
        sidebar
    </div>
    <div class="col-md-9 order-first order-md-last">
        main
    </div>
</div>

Bootstrap 4 (alfa 6): http://www.codeply.com/go/bBMOsvtJhD
Bootstrap 4.1: https://www.codeply.com/go/e0v77yGtcr


Orijinal 3.x Yanıtı

İçin orijinal dayanan, tartışılan Bootstrap 3 , çözelti olduğu itme-çekme kullanımı daha büyük genişlikler için ve daha sonra gösterir sütun daha küçük (xs) genişliğine doğal sırasıdır. (AB BA'ya ters).

<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, " Sütunların sırasını daha küçük ekranlarda değiştiremezsiniz, ancak bunu büyük ekranlarda yapabilirsiniz " ifadesini kullandı . Ancak, şu şekilde açıklanmalıdır: Bootstrap 3'te " Tam genişlikte " yığınlanmış "sütunların sırasını değiştiremezsiniz ."


29

Buradaki cevaplar sadece 2 hücre için işe yarıyor, ancak bu sütunlar daha fazla içeri girer girmez biraz daha karmaşıklığa yol açabilir. Birden fazla sütundaki herhangi bir sayıda hücre için genelleştirilmiş bir çözüm bulduğumu düşünüyorum.

#Goals Tasarımın tablet / masaüstünde istediği sırayla düzenlenmesi için mobil cihazlarda dikey bir etiket dizisi edinin. Bu somut örnekte, bir etiket normalde olduğundan daha erken, diğeri de normalde olduğundan daha sonra akış girmelidir.

## Mobil

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

## Tablet +

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

Bu yüzden başlığın tablet + üzerinde sağa doğru karıştırılması gerekiyor ve teknik olarak da aynı şekilde, mobil cihazdan önce gelen altyazı etiketinin üstünde yer alıyor. Bir anda 4 başlığın da belada olduğunu göreceksiniz.

Her hücrenin yüksekliği değişebileceğini ve bir sonraki hücresiyle (tablo gibi zayıf hileleri dışarıda bırakarak) yukarıdan aşağıya doğru olması gerektiğini varsayalım.

Tüm Bootstrap Grid problemlerinde olduğu gibi 1. adım, HTML'nin sayfada mobil sırada, 1 2 3 4 5 olması gerektiğini anlamaktır. Daha sonra, bir tabletin / masaüstünün bu şekilde yeniden sıralanması için nasıl ideal olacağını belirleyin - ideal olarak Javascript olmadan.

Solüsyon almak 1 headlineve 3 qtysağa oturmak değil, sol basitçe ikisini ayarlamaktır pull-right. Bu float: right, CSS için geçerlidir , yani doğru sığacakları ilk açık alanı bulurlar. Tarayıcının CSS işlemcisinin aşağıdaki sırada çalıştığını düşünebilirsiniz: 1 sağ üst köşeye sığar. 2 sonraki ve normaldir ( float: left), bu yüzden sol üst köşeye gider. Sonra 3, bu float: rightyüzden 1'in altına atlar.

Ancak bu çözüm yeterli değildi 4 captions; çünkü sağdaki 2 hücre 2 imagesolda çok kısadır ve her ikisinin birleşiminden daha uzun olma eğilimindedir. Önyükleme Izgara abartılmış bir şamandıra kesmek anlamı 4 caption olduğunu float: left. İle 2 imagessolda çok oda işgal, 4 captiongirişimleri sonraki kullanılabilir alana sığması için - genellikle doğru sütun değil biz bunu istedik sol.

Buradaki çözüm (ve daha genel olarak bunun gibi herhangi bir sorun için), tablet + 'da altyazıları dışarı itmek için mevcut olan ve daha sonra negatif bir marjla kapsanan bir mobil hack etiketi eklemekti.

[2 image  ][1 headline]
[         ][3 qty     ]
[         ][4 hack    ]
[5 captions][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; }
}

Dolayısıyla, buradaki genel çözüm, mobil cihazlarda kaybolabilecek saldırı etiketleri eklemektir. Tablet + saldırıda, etiketler görüntülenen etiketlerin akışta daha erken veya daha sonra görünmesine izin verir, ardından bu saldırı etiketlerini örtmek için yukarı veya aşağı çekilir.

Not: Bağlantılı jsfiddle'daki basit örnek uğruna sabit yükseklikler kullandım, ancak üzerinde çalıştığım gerçek site içeriği 5 etiketin hepsinin yüksekliğine göre değişiyor. Etiket yüksekliklerinde, özellikle görüntü ve açıklamalarda nispeten büyük bir varyansla düzgün bir şekilde oluşturulur.

Not 2: Düzeninize bağlı olarak, tablet + (veya daha büyük çözünürlükler) üzerinde, margin-bottombunun yerine kullanarak kesmek etiketlerinin kullanılmasını önleyebileceğiniz tutarlı bir sütun düzenine sahip olabilirsiniz :

Not 3: Bu, Bootstrap 3'ü kullanır. Bootstrap 4 farklı bir ızgara seti kullanır ve bu örneklerle çalışmaz.

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


1
Bu harika açıklama için çok teşekkür ederim. 3 gün boyunca işte benzer bir şey üzerinde çalışıyorum ve nereye gideceğimi bilmeden bırakmaya devam ettim. Teşekkür ederim!
kdweber89

Best ... Thank you ❤️
mghhgm

7

Ekim 2017

Başka bir Bootstrap 4 çözümü eklemek istiyorum. Benim için çalışan biri.

Medya sorgusuyla birlikte CSS "Sipariş" özelliği, daha küçük ekranlarda yığınlandıklarında sütunları yeniden sıralamak için kullanılabilir.

Bunun gibi bir şey:

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

CodePen Bağlantısı: https://codepen.io/preston206/pen/EwrXqm

Ekran boyutunu ayarlayın, sütunların farklı bir sırada istiflendiğini göreceksiniz.

Bunu asıl posterin sorusuyla bağlayacağım. CSS ile gezinme çubuğu, kenar çubuğu ve içerik hedeflenebilir ve ardından bir medya sorgusunda uygulanan özellikleri sıralayabilir.


5

In Bootstrap 4 , böyle bir şey yapmak istiyorsanız:

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

B'nin sırasını tersine çevirmeniz, sonra C'yi sonra B'ye başvurmanız order-{breakpoint}-firstgerekir . Ve iki farklı ayar uygulayın, bunlardan biri aynı sütunları paylaşmalarını sağlayacak ve diğeri 12 sütunun tam genişliğini almasını sağlayacak:

  • Daha küçük ekranlar: 12 koli B'ye ve 12 koli C'ye

  • Daha büyük ekranlar: Bunların toplamı arasında 12 sütun ( B + C = 12)

Bunun gibi

<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


1

Bu, insertAfter () veya insertBefore () kullanan jQuery ile oldukça kolaydır.

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

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

Bu kadar basit

mobil cihazlar için koşul ayarlamak istiyorsanız, bunu şu şekilde yapabilirsiniz

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

örnek https://jsfiddle.net/w9n27k23/


11
HTML kullanan birisini gördüğünüzde HTML / CSS mimarisi ile karşılaşmak gerçekten kötü bir duygu. Sorunu düzeltmiyorsunuz, sadece saklıyorsunuz.
Zarko Jovic

@ZarkoJovic ne olmuş yani? Bazen JS çözümleri çok daha uygun olabilir. Bootstrap saf CSS'den yapılmaz, JS kullanır.
Nanoripper

1

İlk olarak mobil versiyondan başlayarak, istediğinizi, çoğu zaman elde edebilirsiniz.

Buradaki örnekler:

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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.