मैं मोबाइल लेआउट पर बूटस्ट्रैप 3 कॉलम ऑर्डर कैसे बदल सकता हूं?


293

मैं एक शीर्ष निश्चित नावबार के साथ एक उत्तरदायी लेआउट बना रहा हूं। नीचे मेरे पास दो कॉलम हैं, एक साइडबार के लिए (3), और एक कंटेंट (9) के लिए। जो डेस्कटॉप पर इस तरह दिखता है

नावबार
[३] [९]

जब मैं resizeमोबाइल navbarको संपीड़ित और छिपाया जाता है, तो सामग्री के शीर्ष पर साइडबार ढेर हो जाता है, जैसे:

नावबार
[३]
[९]

मुझे शीर्ष पर मुख्य सामग्री चाहिए, इसलिए मुझे मोबाइल पर ऑर्डर बदलने की आवश्यकता है:

नावबार
[९]
[३]

मुझे यह लेख मिला जो समान बिंदुओं को शामिल करता है, लेकिन स्वीकृत उत्तर को यह कहने के लिए संपादित किया गया है कि समाधान बूटस्ट्रैप के वर्तमान संस्करण पर लागू नहीं होता है।

मैं मोबाइल पर इन कॉलमों को कैसे पुनः व्यवस्थित कर सकता हूं? या वैकल्पिक रूप से, मैं अपने विस्तार वाले नावबार में साइडबार सूची-समूह कैसे प्राप्त कर सकता हूं?

यहाँ मेरा कोड है:

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

जवाबों:


474

आप छोटी स्क्रीन में कॉलम का क्रम नहीं बदल सकते, लेकिन आप बड़ी स्क्रीन में ऐसा कर सकते हैं।

इसलिए अपने कॉलम का क्रम बदलें।

<!--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हम बड़ी स्क्रीन में कॉलम को फिर से चालू कर सकते हैं और बाईं ओर साइडबार और दाईं ओर मुख्य सामग्री प्रदर्शित कर सकते हैं।

यहाँ काम कर रहे बेला


7
ठीक यही मैं चाहता था और आपके जवाब ने सही अर्थ लगाया, धन्यवाद!
user3000310

2
@emre, आप इसे बड़े पैमाने पर क्यों निर्दिष्ट करते हैं? आधिकारिक उदाहरण में मध्य के लिए भी काम कर रहा है। getbootstrap.com/css/#grid
लुचक्स

2
मैं सोच रहा था कि पुश और पुल कक्षाएं किसके लिए अच्छी हैं - अब मुझे पता है। धन्यवाद।
cdonner

27
3.0 पुश / पुल की आधिकारिक रिलीज़ के कुछ समय बाद किसी भी स्क्रीन साइज (xs, sm, md, lg) पर कॉलम के क्रम को बदलने के लिए इस्तेमाल किया जा सकता है। bootply.com/ft1tOI71cZ
Zim

इसके लिए धन्यवाद। यह धड़कता है positioning cols absolutelyऔर ऐसे!
18

89

अपडेटेड 2018

बूटस्ट्रैप 3 पर आधारित मूल प्रश्न के लिए , समाधान पुश-पुल का उपयोग करना था

में बूटस्ट्रैप 4 यह अब संभव क्रम बदलने के लिए, यहाँ तक कि जब कॉलम पूर्ण-चौड़ाई खड़ी कर रहे हैं , बूटस्ट्रैप 4 flexbox करने के लिए धन्यवाद खड़ी। ओएफसी, पुश पुल विधि अभी भी काम करेगी, लेकिन अब बूटस्ट्रैप 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 - स्क्रीन के order-firstलिए उपयोग करें xs:

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

बूटस्ट्रैप 4 (अल्फा 6): http://www.codeply.com/go/bBMOsvtJhD
बूटस्ट्रैप 4.1: https://www.codeply.com/go/e0v77yGtcr


मूल 3.x उत्तर

बूटस्ट्रैप 3 पर आधारित मूल प्रश्न के लिए , समाधान बड़ी चौड़ाई के लिए पुश-पुल का उपयोग करना था , और फिर कॉलम दिखाएगा कि छोटे (xs) चौड़ाई पर उनका प्राकृतिक क्रम है। (एबी बीए से रिवर्स)।

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

बूटस्ट्रैप 3: http://www.codeply.com/go/wgzJXs3gel

@emre ने कहा, " आप छोटी स्क्रीन में कॉलम का क्रम नहीं बदल सकते हैं लेकिन आप बड़ी स्क्रीन में ऐसा कर सकते हैं "। हालाँकि, यह स्पष्ट किया जाना चाहिए: "आप बूटस्ट्रैप 3 में पूर्ण-चौड़ाई " स्टैक्ड "कॉलम .." के क्रम को नहीं बदल सकते ।


29

यहां उत्तर केवल 2 कोशिकाओं के लिए काम करते हैं, लेकिन जैसे ही उन कॉलमों में अधिक होते हैं, यह थोड़ा अधिक जटिलता पैदा कर सकता है। मुझे लगता है कि मैंने कई कॉलमों में किसी भी संख्या में कोशिकाओं के लिए एक सामान्यीकृत समाधान पाया है।

लक्ष्य

टेबलेट / डेस्कटॉप पर डिज़ाइन कॉल के लिए जो कुछ भी ऑर्डर करना है, उसमें खुद को व्यवस्थित करने के लिए मोबाइल पर टैग का एक ऊर्ध्वाधर अनुक्रम प्राप्त करें। इस ठोस उदाहरण में, एक टैग को सामान्य रूप से पहले प्रवाह में प्रवेश करना होगा, और दूसरा बाद में सामान्य रूप से।

मोबाइल

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

गोली +

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

इसलिए हेडलाइन को टैबलेट + और तकनीकी रूप से सही फेरबदल करने की आवश्यकता है, इसलिए यह डीईसी - यह कैप्शन टैग के ऊपर बैठता है जो इसे मोबाइल पर प्रीयर करता है। आप देखेंगे एक पल में 4 कैप्शन मुसीबत में है।

मान लें कि प्रत्येक कोशिका ऊंचाई में भिन्न हो सकती है, और इसके अगले सेल (तालिका की तरह कमजोर चाल से बाहर) के साथ ऊपर से नीचे की ओर फ्लश करने की आवश्यकता है।

जैसा कि सभी बूटस्ट्रैप ग्रिड समस्याओं के साथ है, चरण 1 का एहसास है कि HTML को पृष्ठ पर मोबाइल-ऑर्डर, 1 2 3 4 5 में होना है। फिर, निर्धारित करें कि टैबलेट / डेस्कटॉप को इस तरह से स्वयं को कैसे पुन: व्यवस्थित करना है - आदर्श रूप से जावास्क्रिप्ट के बिना।

पाने के लिए 1 headlineऔर 3 qtyदाईं ओर नहीं बैठने के लिए समाधान बस उन दोनों को सेट करना है pull-right। यह सीएसएस लागू होता है float: right, जिसका अर्थ है कि वे पहली खुली जगह पाते हैं जो वे दाईं ओर फिट करेंगे। आप निम्न क्रम में काम कर रहे ब्राउज़र के सीएसएस प्रोसेसर के बारे में सोच सकते हैं: 1 दाएं शीर्ष कोने में फिट बैठता है। 2 अगला है और नियमित है ( float: left), इसलिए यह शीर्ष-बाएं कोने में जाता है। फिर 3, जो float: rightऐसा है वह 1 के नीचे से छलांग लगाता है।

लेकिन यह समाधान पर्याप्त नहीं था 4 caption; क्योंकि दाईं ओर 2 कोशिकाएं बाईं ओर छोटी होती हैं, इसलिए 2 imageदोनों संयुक्त की तुलना में अधिक लंबी होती हैं। बूटस्ट्रैप ग्रिड एक शानदार फ्लोट हैक है, जिसका अर्थ 4 caption है float: left। साथ 2 imageबाईं तरफ इतना कक्ष पर कब्जा है, 4 captionप्रयास अगले उपलब्ध अंतरिक्ष में फिट करने के लिए - अक्सर अधिकार स्तम्भ, नहीं छोड़ दिया, जहां हम यह चाहते थे।

यहाँ समाधान (और आम तौर पर इस तरह के किसी भी मुद्दे के लिए) एक हैक टैग जोड़ने के लिए था, मोबाइल पर छिपा हुआ है, जो टैबलेट + पर मौजूद है कैप्शन को बाहर धकेलने के लिए, और फिर एक नकारात्मक मार्जिन द्वारा कवर किया जाता है - जैसे:

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

सीएसएस:

#hack { height: 50px; }

@media (min-width: @screen-sm) {
    #desc { margin-top: -50px; }
}

तो, यहाँ सामान्यीकृत समाधान हैक टैग जोड़ने के लिए है जो मोबाइल पर गायब हो सकते हैं। टैबलेट + पर हैक टैग प्रदर्शित टैग को प्रवाह में पहले या बाद में प्रदर्शित करने की अनुमति देते हैं, फिर उन हैक टैग को कवर करने के लिए ऊपर या नीचे खींचा जाता है।

नोट: मैंने लिंक किए गए jsfiddle में सरल उदाहरण के लिए निश्चित ऊंचाइयों का उपयोग किया है, लेकिन मैं जिस वास्तविक साइट सामग्री पर काम कर रहा था, वह सभी 5 टैग में ऊंचाई में भिन्न है। यह टैग हाइट्स, विशेष रूप से छवि और डीएससी में अपेक्षाकृत बड़े विचरण के साथ ठीक से प्रतिपादन करता है।

नोट 2: आपके लेआउट के आधार पर, आपके पास टेबलेट + (या बड़े रिज़ॉल्यूशन) पर लगातार पर्याप्त कॉलम ऑर्डर हो सकता है, जिससे आप हैक टैग के उपयोग से बच सकते हैं margin-bottom, जैसे कि

नोट 3: यह बूटस्ट्रैप 3 का उपयोग करता है। बूटस्ट्रैप 4 एक अलग ग्रिड सेट का उपयोग करता है, और इन उदाहरणों के साथ काम नहीं करेगा।

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


1
इस अद्भुत स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। मैं 3 दिनों के लिए काम पर इसी तरह काम कर रहा हूं और नीचे रख रहा हूं, न जाने कहां जाना है। धन्यवाद!
kdweber89

सर्वश्रेष्ठ ... धन्यवाद ...
mghhgm

7

अक्टूबर 2017

मैं एक और बूटस्ट्रैप 4 समाधान जोड़ना चाहूंगा। एक है कि मेरे लिए काम किया।

सीएसएस "ऑर्डर" संपत्ति, एक मीडिया क्वेरी के साथ मिलकर, स्तंभों को फिर से ऑर्डर करने के लिए उपयोग किया जा सकता है जब वे छोटे स्क्रीन में ढेर हो जाते हैं।

कुछ इस तरह:

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

कोडपैन लिंक: https://codepen.io/preston206/pen/EwrXqm

स्क्रीन का आकार समायोजित करें और आप देखेंगे कि कॉलम एक अलग क्रम में ढेर हो गए हैं।

मैं इसे मूल पोस्टर के सवाल से जोड़ूंगा। सीएसएस के साथ, नावबार, साइडबार, और सामग्री को लक्षित किया जा सकता है और फिर मीडिया क्वेरी के भीतर लागू गुणों को ऑर्डर कर सकते हैं।


5

में बूटस्ट्रैप 4 , तो आप इस तरह कुछ करना चाहते हैं:

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

आपको B के C के क्रम को उलट देना है और फिर Corder-{breakpoint}-first को B पर लागू करना है । और दो अलग-अलग सेटिंग्स लागू करें, एक जो उन्हें एक ही कॉल को साझा करेगा और अन्य जो उन्हें 12 कॉलनों की पूरी चौड़ाई लेने देगा:

  • छोटी स्क्रीन: 12 कॉल बी से और 12 कॉल सी से

  • बड़ी स्क्रीन: उनके योग के बीच 12 कॉल ( 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>

डेमो: https://codepen.io/anon/pen/wXLGKa


1

यह jQuery के साथ InsertAfter () या InsertBefore () का उपयोग करके काफी आसान है।

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

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

यह सरल है

अगर आप मोबाइल डिवाइस के लिए ओ कंडीशन सेट करना चाहते हैं तो आप इसे इस तरह से बना सकते हैं

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

उदाहरण https://jsfiddle.net/w9n27k23/


11
जब आप HTML / CSS आर्किटेक्चर के साथ समस्या को ठीक करने के लिए JS का उपयोग करते हुए देखते हैं तो यह वास्तव में एक बुरा एहसास है। आप समस्या को ठीक नहीं कर रहे हैं, आप इसे छिपा रहे हैं।
झारो जोकोव

@ZarkoJovic तो क्या? कभी-कभी JS समाधान अधिक व्यवहार्य हो सकते हैं। बूटस्ट्रैप शुद्ध CSS से नहीं बना है, यह JS का भी उपयोग करता है।
नैनोरिपर

1

सबसे पहले मोबाइल संस्करण से शुरू करके, आप जो चाहते हैं, उसे प्राप्त कर सकते हैं।

यहाँ उदाहरण:

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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.