बूटस्ट्रैप में दो स्तंभों के बीच ऊर्ध्वाधर विभक्त


86

मैं ट्विटर बूटस्ट्रैप का उपयोग कर रहा हूं, और एक पंक्ति है जिसमें दो कॉलम हैं (स्पैन 6)। मैं दोनों स्पैन के बीच एक ऊर्ध्वाधर विभक्त कैसे बनाऊं।

धन्यवाद, मुर्तजा


मैंने एक संस्करण किया जिसमें अतिरिक्त तत्वों की आवश्यकता नहीं है: stackoverflow.com/questions/11815081/…
रॉस एंगस

(स्पैन 6) क्या है?
येवगेनी अफानसेयेव

जवाबों:


97

यदि आपका कोड इस तरह दिखता है:

<div class="row">
  <div class="span6">
  </div>
  <div class="span6">
  </div>
</div>

तब मुझे लगता है कि आप अपनी सामग्री को रखने / स्टाइल करने के लिए "स्पैन 6" के भीतर अतिरिक्त डीआईवीएस का उपयोग कर रहे हैं? इसलिए...

<div class="row">
  <div class="span6">
    <div class="mycontent-left">
    </div>
  </div>
  <div class="span6">
    <div class="mycontent-right">
    </div>
  </div>
</div>

तो आप अपने विभक्त बनाने के लिए बस कुछ सीएसएस को "mycontent-left" वर्ग में जोड़ सकते हैं।

.mycontent-left {
  border-right: 1px dashed #333;
}

1
ऊपर के साथ समस्या यह है कि यह सीमा पहली बार में मेरी सामग्री से चिपक जाती है। पहले समय में मेरे पास एक फॉर्म है, और सीमा अपनी सामग्री को गले लगा रही है। मैं इसे कैसे अलग कर सकता हूं?
मुर्तजा 52

सरल - सामग्री-बाएँ और सामग्री-दाएँ DIVS में कुछ गद्दी जोड़ें।
बिली मूट

10
समस्या यह होगी कि यदि दाईं ओर की सामग्री बाईं ओर से <span>अधिक है। उस स्थिति में, ऊर्ध्वाधर रेखा बदसूरत होगी।
लवरात्रि

कॉलम अलग हाइट्स के हैं, तो आप लाइन से निर्धारित सभी तरह से चलाने के लिए कर सकते हैं min-height: 100%; height: 100%;कंटेनर के लिए सीएसएस में divऔर divरों प्रत्येक स्तंभ हैं।
राउल

@ मेरा मानना ​​है कि केवल तभी काम करता है जब आप फ्लेक्सबॉक्स का उपयोग कर रहे हों। यदि आप col-*divs पर फ्लोट्स का उपयोग कर रहे हैं , तो यह काम नहीं करेगा।
जैकब स्टैम

30

.row.vertical-divider {
  overflow: hidden;
}
.row.vertical-divider > div[class^="col-"] {
  text-align: center;
  padding-bottom: 100px;
  margin-bottom: -100px;
  border-left: 3px solid #F2F7F9;
  border-right: 3px solid #F2F7F9;
}
.row.vertical-divider div[class^="col-"]:first-child {
  border-left: none;
}
.row.vertical-divider div[class^="col-"]:last-child {
  border-right: none;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" />
<div class="row vertical-divider" style="margin-top: 30px">
  <div class="col-xs-6">Hi there</div>
  <div class="col-xs-6">Hi world<br/>hi world</div>
</div>


1
'+' चयनकर्ता का उपयोग करें और आपको पहली और अंतिम बाल कक्षाओं की आवश्यकता नहीं है:.row.vertical-divider div[class^="col-"] + div[class^="col-"] { text-align: center; padding-bottom: 100px; margin-bottom: -100px; border-left: 3px solid #0396D1; }
Vasyl

1
यह समाधान सबसे अच्छा है
वाई यान हिन

21

बूटस्ट्रैप 4 में उपयोगिता वर्ग है border-rightजिसे आप उपयोग कर सकते हैं।

तो उदाहरण के लिए आप कर सकते हैं:

<div class="row">
  <div class="col-6 border-right"></div>
  <div class="col-6"></div>
</div>

14

यहाँ एक और विकल्प है जो मैं पिछले कुछ समय से उपयोग कर रहा हूँ। यह मेरे लिए बहुत अच्छा काम करता है क्योंकि मुझे ज्यादातर 2 अलग-अलग कॉलोनों की जरूरत होती है। और यह उत्तरदायी भी है। जिसका अर्थ है कि यदि मेरे पास मध्यम और बड़े स्क्रीन आकारों में एक-दूसरे के बगल में कॉलम हैं, तो मैं कक्षा का उपयोग करूंगा col-md-border, जो छोटे स्क्रीन आकारों पर विभाजक को छिपाएगा।

सीएसएस:

@media (min-width: 992px) {
    .col-md-border:not(:last-child) {
        border-right: 1px solid #d7d7d7;
    }
    .col-md-border + .col-md-border {
        border-left: 1px solid #d7d7d7;
        margin-left: -1px;
    }
}

Scss में आप शायद इससे सभी आवश्यक कक्षाएं उत्पन्न कर सकते हैं:

एससीएसएस:

@media(min-width: $screen-md-min) {
    .col-md-border {
        &:not(:last-child) {
            border-right: 1px solid #d7d7d7;
        }

        & + .col-md-border {
            border-left: 1px solid #d7d7d7;
            margin-left: -1px;
        }
    }
}

HTML:

<div class="row">
    <div class="col-md-6 col-md-border"></div>
    <div class="col-md-6 col-md-border"></div>
</div>  

यह काम किस प्रकार करता है:

कर्नल एक ऐसे तत्व के अंदर होना चाहिए जहां कोई अन्य बछड़े नहीं हैं अन्यथा चयनकर्ता अपेक्षा के अनुरूप काम नहीं कर सकते हैं।

.col-md-border:not(:last-child)मेल खाता है, लेकिन अंतिम तत्व से पहले .row करीब है और इसे सही सीमा जोड़ता है।

.col-md-border + .col-md-borderयदि ये दोनों एक दूसरे के बगल में हों और बाएं बॉर्डर और -1px नेगेटिव मार्जिन जोड़ते हैं तो एक ही क्लास के साथ दूसरी डीवाई से मेल खाता है। नकारात्मक मार्जिन यही है कि इससे कोई फर्क नहीं पड़ता कि किस कॉलम की ऊंचाई अधिक है और विभाजक 1px उच्चतम कॉलम वाला ऊंचाई होगा।

इसमें कुछ समस्याएं भी हैं ...

  1. जब आप चालाक / आलसी होने की कोशिश करते हैं col-XX-Xऔर एक ही पंक्ति तत्व के अंदर hidden-XX/ visible-XXवर्गों के साथ मिलकर कक्षा का उपयोग करते हैं ।
  2. जब आपके पास बहुत सारे कॉलम हों और आपको एक पिक्सेल सही चीज़ की आवश्यकता हो। चूँकि यह n-1 कॉलम 1px को बाईं ओर ले जाता है।

... लेकिन दूसरी ओर यह उत्तरदायी है, सरल HTML के लिए बहुत अच्छा काम करता है और सभी बूटस्ट्रैप स्क्रीन आकारों के लिए इन कक्षाओं को बनाना आसान है।


8

एक कॉलम की सामग्री लम्बे होने पर डिवाइडर के बदसूरत रूप को ठीक करने के लिए, सभी कॉलम में बॉर्डर जोड़ें। हर दूसरे कॉलम को स्थिति के अंतर की भरपाई के लिए एक नकारात्मक मार्जिन दें।

उदाहरण के लिए, मेरे तीन स्तंभ वर्ग:

.border-right {
    border-right: 1px solid #ddd;
}
.borders {
    border-left: 1px solid #ddd;
    border-right: 1px solid #ddd;
    margin: -1px;
}
.border-left {
    border-left: 1px solid #ddd;
}

और HTML:

<div class="col-sm-4 border-right">First</div>
<div class="col-sm-4 borders">Second</div>
<div class="col-sm-4 border-left">Third</div>

यदि आप बूटस्ट्रैप के क्षैतिज डिवाइडर के समान रंग चाहते हैं, तो आप #ddd का उपयोग करना सुनिश्चित करें।


मुझे यह समाधान पसंद है लेकिन इसे केवल तीन या अधिक स्तंभों के लिए डिज़ाइन किया गया है। क्या होगा यदि आप केवल दो चाहते हैं? आप मध्यम हैं। "सीमाएं" div मार्जिन के लिए समायोजित करने के लिए नहीं होगी।
मैथ्यू Zackschewski

6

यदि आप अभी भी 2018 में सर्वश्रेष्ठ समाधान की तलाश कर रहे हैं, तो मैंने पाया कि यह पूरी तरह से काम करता है यदि आपके पास कम से कम एक मुफ्त छद्म तत्व है (:: बाद या पहले ::)।

आपको बस अपनी पंक्ति में इस तरह वर्ग जोड़ना होगा: <div class="row ऊर्ध्वाधर-विभक्त ">

और इसे अपने CSS में जोड़ें:

.row.vertical-divider [class*='col-']:not(:last-child)::after {
  background: #e0e0e0;
  width: 1px;
  content: "";
  display:block;
  position: absolute;
  top:0;
  bottom: 0;
  right: 0;
  min-height: 70px;
}

इस वर्ग के साथ कोई भी पंक्ति अब सभी स्तंभों के बीच लंबवत विभक्त होगी, जिसमें यह शामिल है ...

आप देख सकते हैं कि इस उदाहरण में यह कैसे काम करता है


1
Ost the - में [वर्ग * = 'col-'] ([वर्ग * = 'col' के लिए) बूटस्ट्रैप के लिए वर्ग "col" के साथ 4 संगतता
Trey Dibler

सिर्फ एक टिप्पणी "प्रदर्शन के कारण संपत्ति की उपेक्षा की जाती है। 'प्रदर्शन के साथ: इनलाइन', चौड़ाई, ऊंचाई, मार्जिन-टॉप, मार्जिन-बॉटम, और फ्लोट गुणों का कोई प्रभाव नहीं है।"
शुजा अहमद

5

यदि आप 2 कॉलमों के बीच एक ऊर्ध्वाधर विभक्त चाहते हैं, तो आपको बस जरूरत है ऐड की

class="col-6 border-left" 

आपका एक कॉलम div-s

परंतु

उत्तरदायी डिजाइन की दुनिया में, आपको इसे कभी-कभी गायब करने की आवश्यकता हो सकती है।

समाधान है गायब <hr>+ गायब <div>+margin-left: -1px;

<div class="container">
  <div class="row">
    <div class="col-md-7">
      1 of 2
    </div>
    <div class="border-left d-sm-none d-md-block" style="width: 0px;"></div>
    <div class="col-md-5" style="margin-left: -1px;">
    <hr class="d-sm-block d-md-none">
      2 of 2
    </div>
  </div>
</div>

https://jsfiddle.net/8z1pag7s/

बूटस्ट्रैप 4.1 पर परीक्षण किया गया


4

मैंने इसका परीक्षण किया है। यह बढ़िया काम करता है।

.row.vdivide [class*='col-']:not(:last-child):after {
      background: #e0e0e0;
      width: 1px;
      content: "";
      display:block;
      position: absolute;
      top:0;
      bottom: 0;
      right: 0;
      min-height: 70px;
    }

    <div class="container">
      <div class="row vdivide">
        <div class="col-sm-3 text-center"><h1>One</h1></div>
        <div class="col-sm-3 text-center"><h1>Two</h1></div>
        <div class="col-sm-3 text-center"><h1>Three</h1></div>
        <div class="col-sm-3 text-center"><h1>Four</h1></div>
      </div>
    </div>

1
काम करता है, पूरी तरह से neeeded के रूप में, यह भी समझाया जाना चाहिए कि आपने क्या किया।
अतीक एम।

बिल्कुल सही, और पूरी तरह से संवेदनशील - यहां तक ​​कि जब स्तंभ छोटे स्क्रीन पर ढेर हो जाते हैं तो सीमा गायब हो जाती है, जैसा आप चाहते हैं! एक महान आसान समाधान, धन्यवाद! :)
rmcsharry

1
काम नहीं कर रहा है, सही विभाजक अभी भी है, यहाँ एक नज़र है: jsfiddle.net/k4uavbtz
येवगेनी अफानसेयेव

3+ कॉलम के लिए काम करता है। केवल दो कॉलम का उपयोग करते समय, विभक्त बाएं कॉलम की ऊंचाई का अनुसरण करता है। इसलिए, यदि सही स्तंभ लंबा है, तो सीमा पर्याप्त रूप से लंबी नहीं होगी।
मैथ्यू Zackschewski

4

बूटस्ट्रैप 4 के साथ आप अन्य सीएसएस लिखने से बचते हुए सीमाओं का उपयोग कर सकते हैं ।

बॉर्डर-बायां

और यदि आप सामग्री और सीमा के बीच स्थान चाहते हैं तो आप पैडिंग का उपयोग कर सकते हैं । (इस उदाहरण में पैडिंग 4px शेष है)

pl-4

उदाहरण:

    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>

    <div class="row">
      <div class="offset-6 border-left pl-4">First</div>
      <div class="offset-6 border-left pl-4">Second</div>
    </div>


2

सीमाओं को देखने के लिए पूर्ण पृष्ठ में खोलना चाहिए!

सीएसएस में मीडिया की चौड़ाई को जोड़ा गया है ताकि चीजों के मोबाइल के अनुकूल पक्ष पर कोई बुरा सीमा न हो। उम्मीद है की यह मदद करेगा! यह सबसे लंबे कॉलम की लंबाई के अनुरूप होगा। .Col-md-4 और .col-md-6 पर परीक्षण किया गया है और मेरी धारणा बाकी के साथ संगत है। हालांकि कोई गारंटी नहीं।

JSFiddle

.row {
  overflow: hidden;
}

.cols {
  padding-bottom: 100%;
  margin-bottom: -100%;
  overflow: hidden;
}

@media(min-width: 992px) {
  .col-md-4:not(:first-child), 
  .col-md-6:not(:first-child) {
    border-left: 1px solid black;
  }
  .col-md-4:not(:last-child),
  .col-md-6:not(:last-child) {
    border-right: 1px solid black;
    margin-right: -1px;
  }
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
  <h1>
    .col-md-6
  </h1>
  <hr>
  <div class="row text-center">
    <div class="col-md-6 cols">
      <p>Enter some text here</p>
    </div>
    <div class="col-md-6 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
  </div>
  <hr>
  <h1>
    .col-md-4
  </h1>
  <div class="row text-center">
    <div class="col-md-4 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
    <div class="col-md-4 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
    <div class="cols col-md-4 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
  </div>
</div>


2

मान लें कि आपके पास एक कॉलम स्थान है, तो यह एक विकल्प है। आपको जो भी चाहिए, उसके आधार पर स्तंभों को पुनर्संतुलित करें।

<div class="col-1">
    <div class="col-6 vhr">
    </div>
</div>
.vhr{
  border-right: 1px solid #333;
  height:100%;
}

0

खैर मैंने जो किया वह संबंधित स्पैनों के बीच की नाली को हटा दिया गया और फिर बाएं स्पैन के लिए एक बॉर्डर और दाएं बॉर्डर को इस तरह से खींचा कि उनकी सीमाएं केवल एक लाइन देने के लिए ओवरलैप हो गईं। इस तरह दिखाई देने वाली रेखा सिर्फ सीमाओं में से एक होगी।

सीएसएस

.leftspan
{
padding-right:20px;
border-right: 1px solid #ccc;
}

.row-fluid .rightspan {
margin-left: -0.138297872340425%;
*margin-left: -0.13191489361702%;
padding-left:20px;
border-left: 1px solid #ccc;
}

.row-fluid .rightspan:first-child {
margin-left: -0.11063829787234%;
*margin-left: -0.104255319148938%;
}

एचटीएमएल

  <div class="row-fluid" >
      <div class="span8 leftspan" >
      </div>

      <div class="span4 rightspan"  >
      </div>
 </div>

यह कोशिश करो यह मेरे लिए काम करता है


1
यह बदसूरत है जब 2 divs की ऊंचाई समान नहीं होती है।
एलेन टिम्बेलो

-2

यह प्रयोग करें, 100% गारंटी: -

vr {
  margin-left: 20px;
  margin-right: 20px;
  height: 50px;
  border: 0;
  border-left: 1px solid #cccccc;
  display: inline-block;
  vertical-align: bottom;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.