pembatas vertikal antara dua kolom di bootstrap


Jawaban:


99

Jika kode Anda terlihat seperti ini:

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

Lalu saya akan berasumsi Anda menggunakan DIVS tambahan dalam DIV "span6" untuk menyimpan / menata konten Anda? Begitu...

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

Jadi, Anda cukup menambahkan beberapa CSS ke kelas "mycontent-left" untuk membuat pembagi.

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

1
masalah di atas adalah bahwa perbatasan menempel pada konten saya pada rentang pertama. Pada rentang pertama saya memiliki formulir, dan perbatasan memeluk isinya. Bagaimana cara memisahkannya?
murtaza52

Sederhana - tambahkan beberapa padding ke konten-kiri dan konten-kanan DIVS.
Billy Moat

10
Masalahnya akan terjadi jika konten yang kanan <span>lebih tinggi dari yang kiri. Dalam hal ini, garis vertikal akan jelek.
lvarayut

Jika kolom memiliki ketinggian yang berbeda, Anda dapat membuat garis dijalankan sepenuhnya dengan menyetel min-height: 100%; height: 100%;di CSS untuk penampung divdan divs yang berisi setiap kolom.
raul

@raul Saya yakin itu hanya berfungsi jika Anda menggunakan flexbox. Jika Anda menggunakan float pada col-*div, ini tidak akan berhasil.
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
Gunakan pemilih '+' dan Anda tidak memerlukan kelas anak pertama dan terakhir:.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
Solusi ini adalah yang terbaik
Wai Yan Hein

22

Di Bootstrap 4 ada kelas utilitas border-rightyang dapat Anda gunakan.

Jadi misalnya Anda bisa melakukan:

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

15

Nah, inilah opsi lain yang telah saya gunakan selama beberapa waktu sekarang. Ini bekerja sangat baik untuk saya karena saya sangat membutuhkannya untuk memisahkan 2 cols secara visual. Dan itu juga responsif. Artinya, jika saya memiliki kolom di samping satu sama lain dalam ukuran layar sedang dan besar, maka saya akan menggunakan kelas col-md-border, yang akan menyembunyikan pemisah pada ukuran layar yang lebih kecil.

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

Dalam scss Anda dapat menghasilkan semua kelas yang dibutuhkan mungkin dari ini:

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>  

Bagaimana itu bekerja:

Kolom harus berada di dalam elemen di mana tidak ada kolom lain, jika tidak, penyeleksi mungkin tidak bekerja seperti yang diharapkan.

.col-md-border:not(:last-child)cocok dengan semua kecuali elemen terakhir sebelum .row close dan menambahkan batas kanan padanya.

.col-md-border + .col-md-bordermencocokkan div kedua dengan kelas yang sama jika keduanya bersebelahan dan menambahkan batas kiri dan margin negatif -1px. Margin negatif adalah mengapa tidak masalah lagi kolom mana yang memiliki tinggi lebih besar dan pemisahnya adalah 1px sama tingginya dengan kolom tertinggi.

Itu juga memiliki beberapa masalah ...

  1. Saat Anda mencoba untuk menjadi pintar / malas dan menggunakan col-XX-Xkelas bersama dengan hidden-XX/ visible-XXkelas di dalam elemen baris yang sama.
  2. Ketika Anda memiliki banyak kolom dan membutuhkan piksel yang sempurna. Karena itu memindahkan n-1 kolom 1px ke kiri.

... Tapi di sisi lain itu responsif, bekerja sangat baik untuk html sederhana dan mudah untuk membuat kelas-kelas ini untuk semua ukuran layar bootstrap.


8

Untuk memperbaiki tampilan pembatas yang jelek karena terlalu pendek saat konten satu kolom lebih tinggi, tambahkan batas ke semua kolom. Beri setiap kolom lain margin negatif untuk mengimbangi perbedaan posisi.

Misalnya, tiga kelas kolom saya:

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

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

Pastikan Anda menggunakan #ddd jika Anda ingin warna yang sama dengan pembagi horizontal Bootstrap.


Saya suka solusi ini tetapi dirancang hanya untuk tiga kolom atau lebih. Bagaimana jika Anda hanya menginginkan dua? Anda div ".borders" tengah tidak akan ada di sana untuk menyesuaikan margin.
Matthew Zackschewski

6

Jika Anda masih mencari solusi terbaik pada tahun 2018, saya menemukan cara ini berfungsi dengan sempurna jika Anda memiliki setidaknya satu elemen pseudo gratis (:: after atau :: before).

Anda hanya perlu menambahkan kelas ke baris Anda seperti ini: <div class="row pembagi vertikal ">

Dan tambahkan ini ke CSS Anda:

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

Setiap baris dengan kelas ini sekarang akan memiliki pemisah vertikal antara semua kolom yang dikandungnya ...

Anda dapat melihat cara kerjanya dalam contoh ini.


1
Hilangkan - in [class * = 'col-'] (ke [class * = 'col']) untuk kompatibilitas bootstrap 4 dengan kelas "col"
Trey Dibler

hanya komentar "Properti diabaikan karena tampilan. Dengan 'display: inline', properti lebar, tinggi, margin-top, margin-bottom, dan float tidak berpengaruh.css"
Shuja Ahmed

5

Jika Anda menginginkan pembatas vertikal antara 2 kolom, yang Anda butuhkan hanyalah menambahkan

class="col-6 border-left" 

ke salah satu kolom div-s Anda

TAPI

Dalam dunia desain responsif, terkadang Anda mungkin perlu membuatnya menghilang.

Solusinya menghilang <hr>+ menghilang <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/

diuji pada Bootstrap 4.1


4

Saya sudah mengujinya. Ini bekerja dengan baik.

.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
Bekerja, sempurna seperti yang dibutuhkan, juga seharusnya menjelaskan apa yang Anda lakukan.
Atik M.

Benar-benar sempurna, dan sepenuhnya responsif - bahkan ketika kolom ditumpuk di layar yang lebih kecil, batasnya menghilang, seperti yang Anda inginkan! Solusi mudah yang hebat, terima kasih! :)
rmcsharry

1
tidak berfungsi, pemisah kanan masih ada, lihat di sini: jsfiddle.net/k4uavbtz
Yevgeniy Afanasyev

Bekerja untuk 3+ kolom. Jika hanya menggunakan dua kolom, pembatas mengikuti tinggi kolom kiri. Oleh karena itu, jika kolom kanan lebih panjang, batasnya tidak akan cukup tinggi.
Matthew Zackschewski

4

Dengan Bootstrap 4 Anda dapat menggunakan border , menghindari penulisan CSS lain.

pembatas kiri

Dan jika Anda menginginkan ruang antara konten dan batas Anda dapat menggunakan padding . (dalam contoh ini padding tersisa 4px)

pl-4

Contoh:

    <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

Harus Buka di Halaman Penuh untuk Melihat Perbatasan!

Menambahkan klausa lebar media di CSS sehingga tidak ada batas yang tidak nyaman di sisi ramah seluler. Semoga ini membantu! Ini akan mengubah ukuran menjadi panjang kolom terpanjang. Diuji pada .col-md-4 dan .col-md-6 dan asumsi saya kompatibel dengan yang lain. Tidak ada jaminan sekalipun.

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

Dengan asumsi Anda memiliki ruang kolom, ini adalah opsi. Seimbangkan kembali kolom tergantung pada apa yang Anda butuhkan.

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

0

Yang saya lakukan adalah menghilangkan selokan di antara bentang masing-masing kemudian menggambar batas kiri untuk bentang kiri dan batas kanan untuk bentang kanan sedemikian rupa sehingga perbatasan mereka tumpang tindih hanya untuk memberikan satu garis. Dengan cara ini garis yang terlihat hanya akan menjadi salah satu pembatas.

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>

Coba ini berhasil untuk saya


1
Itu jelek jika 2 div tidak memiliki ketinggian yang sama.
Alain Tiemblo

-2

Gunakan ini, dijamin 100%: -

vr {
  margin-left: 20px;
  margin-right: 20px;
  height: 50px;
  border: 0;
  border-left: 1px solid #cccccc;
  display: inline-block;
  vertical-align: bottom;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.