Làm thế nào để làm cho đường viền thu gọn (trên một div)?


81

Giả sử tôi có đánh dấu như: http://jsfiddle.net/R8eCr/1/

<div class="container">
    <div class="column">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>
    <div class="column">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>
    <div class="column">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>
    ...
</div>

Sau đó CSS

.container {
    display: table;
    border-collapse: collapse;
}
.column {
    float: left;
    overflow: hidden;
    width: 120px;
}
.cell {
    display: table-cell;
    border: 1px solid red;
    width: 120px;
    height: 20px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

Tôi có div bên ngoài với display: table; border-collapse: collapse;và các ô có display: table-celltại sao chúng vẫn không sụp đổ? Tôi còn thiếu gì ở đây?

Nhân tiện, có thể có số lượng ô thay đổi trong một cột vì vậy tôi không thể chỉ có đường viền ở một bên.


Ừm, tại sao bạn không sử dụng <table>và bạn bè cho các bảng?
mu quá ngắn

@muistooshort, cos có lẽ một số biến của các tế bào và tôi không muốn có ô trống trong thiết kế đặc biệt
Jiew Meng

Câu trả lời:


36

đây là một bản demo

trước tiên bạn cần sửa lỗi cú pháp của mình

display: table-cell;

không phải diaplay: table-cell;

   .container {
    display: table;
    border-collapse:collapse
}
.column {
    display:table-row;
}
.cell {
    display: table-cell;
    border: 1px solid red;
    width: 120px;
    height: 20px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

Hmm trong mã thực tế, tôi đã viết đúng chính tả ... hmm ... Tôi đoán nó phải là một cái gì đó khác trong mã thực tế không hoạt động ... Tôi sẽ cố gắng tìm hiểu những gì có thể gây ra điều này
Jiew Meng

i điều chỉnh sai lầm của tôi, tôi thật sự của nó kiểm tra câu trả lời của bạn nhưng tôi loại bỏ float: left và chiều rộng và chiều cao tôi đã biết về biên giới cell
Hushme

1
@Hushme vâng nhiều người biết nhưng đôi khi treo máy với một số vấn đề nhỏ, phải không? Dù sao đi tiếp, tôi không có vấn đề.
Bhojendra Rauniyar

1
hệ thống bỏ phiếu không ảnh hưởng đến tôi nhưng tôi có thể rất vui khi có ai đó giúp đỡ tôi.
Bhojendra Rauniyar

bạn không phải là chỉ có một khả năng với css kiểm tra hồ sơ của tôi có 7 năm kinh nghiệm phát triển như kết thúc trước
Hushme

92

Sử dụng lề âm đơn giản hơn là sử dụng bảng hiển thị.

Cập nhật trong Fiddle JS Fiddle

.container { 
    border-style: solid;
    border-color: red;
    border-width: 1px 0 0 1px;
    display: inline-block;
}
.column { 
    float: left; overflow: hidden; 
}
.cell { 
    border: 1px solid red; width: 120px; height: 20px; 
    margin:-1px 0 0 -1px;
}
.clearfix {
    clear:both;
}

83

Thay vào đó sử borderdụng box-shadow:

  box-shadow: 
    2px 0 0 0 #888, 
    0 2px 0 0 #888, 
    2px 2px 0 0 #888,   /* Just to fix the corner */
    2px 0 0 0 #888 inset, 
    0 2px 0 0 #888 inset;

Demo: http://codepen.io/Hawkun/pen/rsIEp


5
đây thực sự là giải pháp tốt nhất mà tôi đã tìm thấy. Nó sắp xếp vấn đề nếu dữ liệu của bạn được tạo động và nó không đảm bảo hoàn hảo, giả sử 9 mục trong lưới, nhưng thay vào đó là 2 mục nếu bạn có điều đó với các giải pháp khác, bạn sẽ bị thiếu đường viền. Làm tốt !
Không mệt mỏi

3
Mẹo hay cho bố cục đáp ứng, tránh thay đổi thuộc tính hiển thị.
kosmos

3
Điều này hoạt động tốt cho phương tiện màn hình. Nhưng trên phương tiện in, bóng hộp được coi là nền và không được in.
Marcello Nuccio

Điều này hoạt động tốt đối với tôi, nhưng lưu ý rằng ba bóng đổ đầu tiên đó có thể được thực hiện với: 1px 1px 0 1px # 888 Sự dàn trải và bù đắp sẽ chăm sóc các góc.
Matt Schuette

1
box-shadowbị bỏ qua (biến mất) khi sử dụng các chủ đề có độ tương phản cao trong Windows, vì vậy hãy luôn cung cấp một giải pháp thay thế nếu bạn quan tâm đến khả năng truy cập.
tomasz86

5

Bạn cần sử dụng display: table-rowthay vì float: left;cho cột của mình và rõ ràng là @Hushme đã sửa diaplay: table-cellthànhdisplay: table-cell;

 .container {
    display: table;
    border-collapse: collapse;
}
.column {
    display: table-row;
    overflow: hidden;
    width: 120px;
}
.cell {
    display: table-cell;
    border: 1px solid red;
    width: 120px;
    height: 20px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

bản giới thiệu


ở đây kiểm tra liên kết tôi đã được sử dụng đó nhưng tôi quên để loại bỏ float: left jsfiddle.net/R8eCr/2 xem số lượng liên kết
Hushme

Yeah nó được đấy. chỉ cần thật gần.
Bhojendra Rauniyar

4

Bạn cũng có thể sử dụng lợi nhuận âm:

.column {
  float: left;
  overflow: hidden;
  width: 120px;
}
.cell {
  border: 1px solid red;
  width: 120px;
  height: 20px;
  box-sizing: border-box;
}
.cell:not(:first-child) {
  margin-top: -1px;
}
.column:not(:first-child) > .cell {
  margin-left: -1px;
}
<div class="container">
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
</div>


1
Tôi đã sử dụng cùng một phương pháp, chỉ với border-top/left: 0;. Lợi nhuận tạo ra hiệu số.
toster-cx

@ toster-cx Tôi cho rằng điều đó thậm chí còn tốt hơn việc chồng chéo các đường viền. Suy nghĩ tốt :-)
mpen

3

Tại sao không sử dụng dàn ý? nó là những gì bạn muốn phác thảo: 1px rắn màu đỏ;


1
Thêm một số giải thích với câu trả lời về cách thức này trả lời giúp đỡ OP trong sửa chữa vấn đề hiện tại
ρяσѕρєя K

2
Ở đây tôi hiển thị nhiều biến thể của việc thu gọn biên giới. (Sử dụng Bootstrap lưới): codepen.io/leonardo1024/pen/KgbNGr
Muslimbek

0

Ví dụ về việc sử dụng biên giới-thu gọn: tách biệt; như

  • vùng chứa được hiển thị dưới dạng bảng:

    ol[type="I"]>li{
      display: table;
      border-collapse: separate;
      border-spacing: 1rem;
    }
    
  • 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.