önyüklemede iki sütun arasındaki dikey bölücü


Yanıtlar:


99

Kodunuz şöyle görünüyorsa:

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

O halde, içeriğinizi tutmak / biçimlendirmek için "span6" DIVS içinde ek DIVS kullandığınızı varsayıyorum. Yani...

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

Bölücünüzü oluşturmak için "mycontent-left" sınıfına CSS ekleyebilirsiniz.

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

1
Yukarıdakilerle ilgili sorun, sınırın içeriğime ilk aralıkta yapışmasıdır. İlk açıklıkta bir formum var ve sınır onun içeriğini kucaklıyor. Nasıl ayırabilirim?
murtaza52

Basit - içerik sol ve içerik sağ DIVS'ye biraz dolgu ekleyin.
Billy Moat

10
Sağdaki içerik <span>soldan daha yüksekse sorun ortaya çıkar . Bu durumda dikey çizgi çirkin olacaktır.
lvarayut

Sütunlar farklı yüksekliklerdeyse, min-height: 100%; height: 100%;kap için CSS'de divve divher bir sütunu içeren ’lerde ayar yaparak satırın sonuna kadar uzanmasını sağlayabilirsiniz .
raul

@raul Sadece flexbox kullanıyorsanız işe yarayacağına inanıyorum. Div'lerde kayan nokta kullanıyorsanız col-*, bu işe yaramaz.
Jacob Stamm

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
'+' Seçiciyi kullanın ve ilk ve son çocuk sınıflarına ihtiyacınız yok:.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
Bu çözüm en iyisidir
Wai Yan Hein

22

Bootstrap 4'te border-rightkullanabileceğiniz yardımcı program sınıfı vardır.

Yani örneğin şunları yapabilirsiniz:

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

15

İşte bir süredir kullandığım başka bir seçenek. Benim için harika çalışıyor çünkü çoğunlukla görsel olarak ayrı 2 kola ihtiyacım var. Ve aynı zamanda duyarlı. Bu, orta ve büyük ekran boyutlarında yan yana sütunlarım varsa, o zaman col-md-borderayırıcıyı daha küçük ekran boyutlarında gizleyen sınıfı kullanacağım anlamına gelir .

css:

@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'de muhtemelen bundan tüm gerekli sınıfları oluşturabilirsiniz:

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>  

Nasıl çalışır:

Sütunlar, başka hiçbir sütun bulunmayan bir öğenin içinde olmalıdır, aksi takdirde seçiciler beklendiği gibi çalışmayabilir.

.col-md-border:not(:last-child).row close öncesindeki son öğe dışındaki tüm öğelerle eşleşir ve buna sağ kenarlık ekler.

.col-md-border + .col-md-borderBu ikisi yan yana ise ikinci div ile aynı sınıfla eşleşir ve sol kenarlık ve -1px negatif kenar boşluğu ekler. Negatif kenar boşluğu, artık hangi sütunun daha yüksek yüksekliğe sahip olduğunun ve ayırıcının 1px en yüksek sütunla aynı yükseklikte olmasının nedenidir.

Bazı sorunları da var ...

  1. Akıllı / tembel olmaya çalıştığınızda ve col-XX-Xsınıfı aynı satır öğesi içinde hidden-XX/ visible-XXsınıfları ile birlikte kullandığınızda .
  2. Çok fazla sütununuz olduğunda ve piksel mükemmel bir şeye ihtiyacınız olduğunda. N-1 sütun 1px sola hareket ettiğinden.

... Ancak diğer yandan duyarlı, basit html için harika çalışıyor ve bu sınıfları tüm önyükleme ekranı boyutları için oluşturmak çok kolay.


8

Bir sütunun içeriği daha uzun olduğunda bölücünün çirkin görünümünün çok kısa olmasını düzeltmek için tüm sütunlara kenarlıklar ekleyin. Konum farklılıklarını telafi etmek için diğer her sütuna negatif bir kenar boşluğu verin.

Örneğin, üç sütun sınıfım:

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

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

Bootstrap'in yatay bölücüleriyle aynı rengi istiyorsanız #ddd kullandığınızdan emin olun.


Bu çözümü beğendim ancak yalnızca üç veya daha fazla sütun için tasarlandı. Ya sadece iki tane istiyorsan? Ortadaki ".borders" div, kenar boşluklarını ayarlamak için orada olmayacak.
Matthew Zackschewski

6

2018'de hala en iyi çözümü arıyorsanız, en az bir ücretsiz sözde öğeniz (:: after veya :: before) varsa bunun mükemmel bir şekilde çalıştığını buldum.

Sıranıza şu şekilde sınıf eklemeniz yeterlidir : <div class="row dikey bölücü ">

Ve bunu CSS'nize ekleyin:

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

Bu sınıfa sahip herhangi bir satır artık içerdiği tüm sütunlar arasında dikey bölücüye sahip olacaktır ...

Bunun nasıl çalıştığını bu örnekte görebilirsiniz.


1
Önyükleme 4'ün "col" sınıfıyla uyumluluğu için - in [class * = 'col-'] ([class * = 'col'] 'ye)
atlayın

sadece bir yorum "Görüntü nedeniyle özellik yok sayıldı. 'display: inline' ile genişlik, yükseklik, margin-top, margin-bottom ve float özelliklerinin hiçbir etkisi yoktur. css"
Shuja Ahmed

5

2 sütun arasında dikey bir ayırıcı istiyorsanız, tek ihtiyacınız olan şey eklemek

class="col-6 border-left" 

sütun div-lerinizden birine

FAKAT

Duyarlı tasarım dünyasında, bazen onu ortadan kaldırmanız gerekebilir.

Çözüm yok oluyor <hr>+ yok ​​oluyor <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/

Bootstrap 4.1'de test edildi


4

Ben test ettim. İyi çalışıyor.

.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
İşler, mükemmel bir şekilde gerektiği gibi, yaptıklarınızı da açıklamalıydı.
Atik M.

Kesinlikle mükemmel ve tamamen duyarlı - sütunlar daha küçük ekranlarda istiflendiğinde bile kenarlık istediğiniz gibi kaybolur! Harika bir kolay çözüm, teşekkürler! :)
rmcsharry

1
çalışmıyor, doğru ayırıcı hala orada, buraya bir göz atın: jsfiddle.net/k4uavbtz
Yevgeniy Afanasyev

3+ sütun için çalışır. Yalnızca iki sütun kullanıldığında, bölücü sol sütunun yüksekliğini takip eder. Bu nedenle, sağ sütun daha uzunsa, kenarlık yeterince uzun olmayacaktır.
Matthew Zackschewski

4

Bootstrap 4 ile diğer CSS yazmaktan kaçınarak kenarlıkları kullanabilirsiniz .

sınır sol

Ve içerik ve kenarlık arasında boşluk istiyorsanız, dolgu kullanabilirsiniz . (bu örnekte sol 4px dolgu)

pl-4

Misal:

    <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

Kenarlıkları Görmek İçin Tam Sayfada Açılmalıdır!

CSS'ye medya genişliği maddeleri eklendi, böylece şeylerin mobil uyumlu tarafında herhangi bir kötü sınır yok. Bu yardımcı olur umarım! Bu, en uzun sütunun uzunluğuna göre yeniden boyutlandırılacaktır. .Col-md-4 ve .col-md-6 üzerinde test edildi ve benim varsayımım, geri kalanıyla uyumlu olduğu yönünde. Yine de garanti yok.

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

Bir sütun alanınız olduğunu varsayarsak, bu bir seçenektir. İhtiyacınız olan şeye bağlı olarak sütunları yeniden dengeleyin.

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

0

Yaptığım şey, ilgili açıklıklar arasındaki oluğu kaldırmak, ardından sol açıklık için bir sol kenarlık ve yalnızca tek bir çizgi vermek için sınırları üst üste gelecek şekilde sağ kenarlık için bir sağ kenarlık çizmekti. Bu şekilde görünen çizgi sadece sınırlardan biri olacaktır.

CSS

.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%;
}

HTML

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

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

Bunu dene, benim için çalışıyor


1
2 divs aynı yüksekliğe sahip olmadığında bu çirkin.
Alain Tiemblo

-2

Bunu kullanın,% 100 garantili: -

vr {
  margin-left: 20px;
  margin-right: 20px;
  height: 50px;
  border: 0;
  border-left: 1px solid #cccccc;
  display: inline-block;
  vertical-align: bottom;
}
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.