dải phân cách dọc giữa hai cột trong bootstrap


Câu trả lời:


97

Nếu mã của bạn trông như thế này:

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

Sau đó, tôi giả sử bạn đang sử dụng DIVS bổ sung trong DIVS "span6" để giữ / tạo kiểu nội dung của bạn? Vì thế...

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

Vì vậy, bạn có thể chỉ cần thêm một số CSS vào lớp "mycontent-left" để tạo dải phân cách của bạn.

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

1
vấn đề với phần trên là đường viền dính vào nội dung của tôi trong khoảng đầu tiên. Trong khoảng đầu tiên, tôi có một biểu mẫu và đường viền đang ôm lấy nội dung của nó. Làm thế nào tôi có thể tách nó ra?
murtaza52

Đơn giản - thêm một số đệm vào nội dung DIVS bên trái và bên phải nội dung.
Billy Moat,

10
Vấn đề sẽ xảy ra nếu nội dung của bên phải <span>cao hơn bên trái. Trong trường hợp đó, đường thẳng đứng sẽ xấu xí.
lvarayut

Nếu các cột có độ cao khác nhau, bạn có thể làm cho dòng chạy xuống dưới bằng cách thiết lập min-height: 100%; height: 100%;trong CSS cho vùng chứa divvà các divcột chứa mỗi cột.
raul

@raul Tôi tin rằng điều đó chỉ hoạt động nếu bạn đang sử dụng flexbox. Nếu bạn đang sử dụng float trên col-*div, thì điều này sẽ không hoạt động.
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
Sử dụng '+' chọn và bạn không cần phải đầu tiên và con cuối cùng lớp:.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
Giải pháp này là tốt nhất
Wai Yan Hein

21

Trong Bootstrap 4 có lớp tiện ích border-rightmà bạn có thể sử dụng.

Vì vậy, ví dụ bạn có thể làm:

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

14

Đây là một tùy chọn khác mà tôi đã sử dụng một thời gian. Nó hoạt động tuyệt vời đối với tôi vì tôi chủ yếu cần nó để tách 2 cols một cách trực quan. Và nó cũng đáp ứng. Điều đó có nghĩa là nếu tôi có các cột cạnh nhau ở kích thước màn hình vừa và lớn, thì tôi sẽ sử dụng lớp col-md-border, lớp này sẽ ẩn dấu phân cách trên các kích thước màn hình nhỏ hơn.

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

Trong scss, bạn có thể tạo tất cả các lớp cần thiết có thể từ cái này:

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>  

Làm thế nào nó hoạt động:

Cols phải nằm bên trong một phần tử mà không có cols khác, nếu không các bộ chọn có thể không hoạt động như mong đợi.

.col-md-border:not(:last-child)khớp với tất cả trừ phần tử cuối cùng trước .row close và thêm đường viền bên phải vào nó.

.col-md-border + .col-md-borderkhớp với div thứ hai có cùng lớp nếu hai div này ở cạnh nhau và thêm đường viền bên trái và lề âm -1px. Lề âm là lý do tại sao không còn quan trọng nữa cột nào có chiều cao lớn hơn và dấu phân tách sẽ có cùng chiều cao với cột cao nhất là 1px.

Nó cũng có một số vấn đề ...

  1. Khi bạn cố tỏ ra thông minh / lười biếng và sử dụng col-XX-Xlớp cùng với hidden-XX/ visible-XXcác lớp bên trong cùng một phần tử hàng.
  2. Khi bạn có nhiều cột và cần một thứ hoàn hảo pixel. Vì nó di chuyển n-1 cột 1px sang trái.

... Nhưng mặt khác, nó đáp ứng, hoạt động tốt với html đơn giản và thật dễ dàng để tạo các lớp này cho tất cả các kích thước màn hình bootstrap.


8

Để khắc phục vẻ xấu xí của một dải phân cách quá ngắn khi nội dung của một cột cao hơn, hãy thêm đường viền cho tất cả các cột. Đặt cho mọi cột khác một biên âm để bù đắp cho chênh lệch vị trí.

Ví dụ, ba lớp cột của tôi:

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

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

Đảm bảo bạn sử dụng #ddd nếu bạn muốn có cùng màu với các vạch chia ngang của Bootstrap.


Tôi thích giải pháp này nhưng nó chỉ được thiết kế cho ba cột trở lên. Nếu bạn chỉ muốn hai cái? Bạn sẽ không ở đó div ".borders" để điều chỉnh lề.
Matthew Zackschewski

6

Nếu bạn vẫn đang tìm kiếm giải pháp tốt nhất vào năm 2018, tôi đã tìm thấy cách này hoạt động hoàn hảo nếu bạn có ít nhất một phần tử giả miễn phí (:: sau hoặc :: trước).

Bạn chỉ cần thêm lớp vào hàng của mình như sau: <div class="row vertical-divider ">

Và thêm cái này vào CSS của bạn:

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

Bất kỳ hàng nào có lớp này bây giờ sẽ có dải phân cách dọc giữa tất cả các cột mà nó chứa ...

Bạn có thể thấy cách này hoạt động trong ví dụ này.


1
Bỏ qua - trong [lớp * = 'col-'] (để [lớp * = 'col']) cho bootstrap 4 tương thích với các lớp "col"
Trey Dibler

chỉ là một nhận xét "Thuộc tính bị bỏ qua do hiển thị. Với 'display: inline', các thuộc tính chiều rộng, chiều cao, margin-top, margin-bottom và float không có hiệu lực. css"
Shuja Ahmed

5

Nếu bạn muốn có một dải phân cách dọc giữa 2 cột, tất cả những gì bạn cần là thêm

class="col-6 border-left" 

đến một trong những div-s cột của bạn

NHƯNG

Trong thế giới của thiết kế đáp ứng, đôi khi bạn có thể cần phải làm cho nó biến mất.

Giải pháp đang biến mất <hr>+ biến mất <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/

đã thử nghiệm trên Bootstrap 4.1


4

Tôi đã thử nghiệm nó. Nó hoạt động tốt.

.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
Hoạt động, hoàn hảo như cần thiết, cũng nên giải thích những gì bạn đã làm.
Atik M.

Hoàn toàn hoàn hảo và hoàn toàn đáp ứng - ngay cả khi các cột được xếp chồng lên nhau trên màn hình nhỏ hơn, đường viền sẽ biến mất, như bạn muốn! Một giải pháp dễ dàng tuyệt vời, cảm ơn bạn! :)
rmcsharry

1
không làm việc, tách ngay vẫn còn đó, có một cái nhìn ở đây: jsfiddle.net/k4uavbtz
Yevgeniy Afanasyev

Hoạt động cho 3+ cột. Khi chỉ sử dụng hai cột, dải phân cách theo chiều cao của cột bên trái. Do đó, nếu cột bên phải dài hơn, đường viền sẽ không đủ cao.
Matthew Zackschewski

4

Với Bootstrap 4, bạn có thể sử dụng đường viền , tránh viết CSS khác.

biên giới bên trái

Và nếu bạn muốn có khoảng cách giữa nội dung và đường viền, bạn có thể sử dụng đệm . (trong ví dụ này đệm bên trái 4px)

pl-4

Thí dụ:

    <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

Phải mở toàn trang để xem đường viền!

Đã thêm điều khoản chiều rộng phương tiện trong CSS để không có bất kỳ biên giới khó chịu nào về mặt thân thiện với thiết bị di động. Hi vọng điêu nay co ich! Điều này sẽ thay đổi kích thước thành độ dài của cột dài nhất. Đã thử nghiệm trên .col-md-4 và .col-md-6 và giả định của tôi là nó tương thích với phần còn lại. Không có đảm bảo mặc dù.

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

Giả sử bạn có một không gian cột, đây là một tùy chọn. Cân bằng lại các cột tùy thuộc vào những gì bạn cần.

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

0

Những gì tôi đã làm là loại bỏ rãnh nước giữa các nhịp tương ứng, sau đó vẽ một đường viền bên trái cho nhịp bên trái và một đường viền bên phải cho nhịp bên phải theo cách mà các đường viền của chúng chồng lên nhau chỉ để tạo ra một đường duy nhất. Bằng cách này, đường hiển thị sẽ chỉ là một trong các đường viền.

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>

Hãy thử cái này nó phù hợp với tôi


1
Thật là xấu khi 2 diva không có cùng chiều cao.
Alain Tiemblo

-2

Sử dụng cái này, đảm bảo 100%: -

vr {
  margin-left: 20px;
  margin-right: 20px;
  height: 50px;
  border: 0;
  border-left: 1px solid #cccccc;
  display: inline-block;
  vertical-align: bottom;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.