khoảng cách giữa các div - hiển thị bảng-ô


96

Tôi có ở đây hai div:

<div style="display:table-cell" id="div1">
    content
</div>

<div style="display:table-cell" id="div2">
    content
</div>

Có cách nào để tạo khoảng trống giữa hai div này (có display:table-cell) không?

Câu trả lời:


192

Bạn có thể sử dụng thuộc border-spacingtính:

HTML:

<div class="table">
    <div class="row">
        <div class="cell">Cell 1</div>
        <div class="cell">Cell 2</div>
    </div>
</div>

CSS:

.table {
  display: table;
  border-collapse: separate;
  border-spacing: 10px;
}

.row { display:table-row; }

.cell {
  display:table-cell;
  padding:5px;
  background-color: gold;
}

JSBin Demo

Có lựa chọn nào khác không?

Chà , không hẳn.

Tại sao?

  • marginthuộc tính không áp dụng cho display: table-cellcác phần tử.
  • padding thuộc tính không tạo khoảng trống giữa các cạnh của ô.
  • floatthuộc tính phá hủy hành vi mong đợi của table-cellcác phần tử có thể cao bằng phần tử mẹ của chúng.

Có lựa chọn nào khác không? Chắc chắn rồi position: relative,.
Jongosi

@Jongosi Theo đặc tả : Hiệu quả của việc position: relativetrên table-*-group, table-row, table-column, table-cell, và table-captioncác yếu tố được xác định.
Hashem Qolami

3
Bạn cũng có thể tạo đường viền một bên cùng màu với nền. border-right: 10px solid #FFF. Điều này hoạt động hiệu quả đối với tôi khi thiết kế menu thả xuống CSS khi tôi muốn có một khoảng trống giữa table-cellcác phần tử.
armadadrive

1
Bạn cũng có thể thêm các ô hoàn toàn cho khoảng cách. Không lý tưởng, nhưng ít nhất bạn tránh được việc đau đầu khi cố gắng tắt khoảng cách đường viền trên ô ngoài cùng bên phải.
Daniel

Tôi cũng muốn "padding" chỉ nằm trên 1 cạnh của "ô", vì vậy tôi phải sử dụng giải pháp của armadadrive ngoại trừ việc tôi sử dụng màu đường viền là rgba (0,0,0,0) cho đường viền trong suốt nên tôi không phải lo lắng về màu nền / hình ảnh. border-right: 10px solid rgba (0,0,0,0);
JAX

19

Sử dụng đường viền trong suốt nếu có thể.

JSFiddle Demo

https://jsfiddle.net/74q3na62/

HTML

<div class="table">
    <div class="row">
        <div class="cell">Cell 1</div>
        <div class="cell">Cell 2</div>
        <div class="cell">Cell 3</div>
    </div>
</div>

CSS

.table {
  display: table;
  border: 1px solid black;
}

.row { display:table-row; }

.cell {
  display: table-cell;
  background-clip: padding-box;
  background-color: gold;
  border-right: 10px solid transparent;
}

.cell:last-child {
  border-right: 0 none;
}

Giải trình

Bạn có thể sử dụng thuộc border-spacingtính, như câu trả lời được chấp nhận gợi ý, nhưng điều này không chỉ tạo ra khoảng trống giữa các ô trong bảng mà còn giữa các ô trong bảng và vùng chứa bảng. Điều này có thể không mong muốn.

Do đó, nếu bạn không cần các đường viền hiển thị trên các ô trong bảng của mình, bạn nên sử dụng các transparentđường viền để tạo lề cho ô. Các đường viền trong suốt yêu cầu thiết lập background-clip: padding-box;vì nếu không, màu nền của các ô trong bảng được hiển thị trên đường viền.

Đường viền trong suốt và clip nền được hỗ trợ trong IE9 trở lên (và tất cả các trình duyệt hiện đại khác). Nếu bạn cần khả năng tương thích với IE8 hoặc không cần không gian trong suốt thực tế, bạn có thể chỉ cần đặt màu đường viền trắng và bỏ background-clipđi.


Cài đặt 'viền bên phải' thực sự đủ để cung cấp khoảng cách giữa, không cần khai báo "bảng".
forsberg

0
<div style="display:table;width:100%"  >
<div style="display:table-cell;width:49%" id="div1">
content
</div>

<!-- space between divs - display table-cell -->
<div style="display:table-cell;width:1%" id="separated"></div>
<!-- //space between divs - display table-cell -->

<div style="display:table-cell;width:50%" id="div2">
content
</div>
</div>

0

Chà, cách trên hoạt động, đây là giải pháp của tôi yêu cầu ít đánh dấu hơn một chút và linh hoạt hơn.

.cells {
  display: inline-block;
  float: left;
  padding: 1px;
}
.cells>.content {
  background: #EEE;
  display: table-cell;
  float: left;
  padding: 3px;
  vertical-align: middle;
}
<div id="div1" class="cells"><div class="content">My Cell 1</div></div>
<div id="div2" class="cells"><div class="content">My Cell 2</div></div>


-6

Tạo một div mới với bất kỳ tên nào (tôi sẽ chỉ sử dụng table-split) và cung cấp cho nó chiều rộng, không thêm nội dung vào nó, trong khi đặt nó giữa các div cần thiết cần được phân tách.

Bạn có thể thêm bất kỳ chiều rộng nào bạn thấy cần thiết. Tôi chỉ sử dụng 0,6% vì đó là thứ tôi cần khi phải làm việc này.

.table-split {
  display: table-cell;
  width: 0.6%
}
<div class="table-split"></div>


10
Đây là một giải pháp khủng khiếp.

1
Đây là một chiến lược phổ biến khi các phần tử bảng thực tế được sử dụng cho mục đích bố trí và một phần lý do khiến phương pháp luận hiện nay đã lỗi thời.
rakitin

Vì nó có thể được thực hiện với css chỉ, việc sử dụng html nên tránh
Toni Michel Caubet
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.