Tôi đang sử dụng twitter bootstrap và có một hàng có hai cột (span6). Làm cách nào để tạo một dải phân cách dọc giữa cả hai nhịp.
Cảm ơn, Murtaza
Tôi đang sử dụng twitter bootstrap và có một hàng có hai cột (span6). Làm cách nào để tạo một dải phân cách dọc giữa cả hai nhịp.
Cảm ơn, Murtaza
Câu trả lời:
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;
}
<span>
cao hơn bên trái. Trong trường hợp đó, đường thẳng đứng sẽ xấu xí.
min-height: 100%; height: 100%;
trong CSS cho vùng chứa div
và các div
cột chứa mỗi cột.
col-*
div, thì điều này sẽ không hoạt động.
.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>
.row.vertical-divider div[class^="col-"] + div[class^="col-"] { text-align: center; padding-bottom: 100px; margin-bottom: -100px; border-left: 3px solid #0396D1; }
Đâ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-border
khớ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 đề ...
col-XX-X
lớp cùng với hidden-XX
/ visible-XX
các lớp bên trong cùng một phần tử hàng.... 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.
Để 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.
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.
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
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>
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>
Đã 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ù.
.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>
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%;
}
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