CSS: làm cách nào để tạo khoảng cách giữa các hàng trong bảng?


94

Có nghĩa là làm cho bảng kết quả trông ít hơn như sau:

[=== ROW ===]
[=== ROW ===]
[=== ROW ===]
[=== ROW ===]

... và hơn thế nữa:

[=== ROW ===]

[=== ROW ===]

[=== ROW ===]

[=== ROW ===]

Tôi đã thử thêm

margin-bottom:1em;

đến cả tdtr nhưng không có gì. Bất kỳ ý tưởng?


2
Tại sao không sử dụng cellspacing và cellpadding?
adatapost

1
Cellspacing cũng sẽ cung cấp khoảng cách giữa các cột.
rahul

4
Cellspacing và cellpadding không hợp lệ (X) HTML. Bạn không nên sử dụng chúng.
freiksenet

8
@freiksenet: Bạn nhầm rồi. Chúng hoàn toàn hợp lệ HTML4 nghiêm ngặt ( w3.org/TR/html401/struct/tables.html#h-11.2.1 ), XHTML1 ( w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ) và thậm chí cả XHTML1 .1 ( w3.org/MarkUp/DTD/xhtml-table-1.mod ).
Mercator

Câu trả lời:


214

Tất cả những gì bạn cần:

table {
    border-collapse: separate;
    border-spacing: 0 1em;
}

Giả sử bạn muốn có khoảng cách dọc 1em và không có khoảng cách ngang. Nếu bạn đang làm điều này, có lẽ bạn cũng nên xem xét việc kiểm soát chiều cao dòng của mình.

Thật kỳ lạ khi một số câu trả lời mà mọi người đưa ra liên quan đến sự sụp đổ biên giới: sự sụp đổ, tác động của nó hoàn toàn ngược lại với những gì câu hỏi đặt ra.


Ồ đúng rồi, tôi đang cố lấy một cột cụ thể để có khoảng cách rộng hơn nên không nghĩ là áp dụng nó cho bảng
Jonathan.

4
Giải pháp này không cho phép bạn áp dụng có chọn lọc khoảng cách cho các hàng nhất định.
Flimm

15
Câu hỏi không yêu cầu điều đó.
John Haugeland

Đây là một ý tưởng hay nhưng để lấp đầy khoảng trống trên cùng của hàng đầu tiên, tôi đã phải đi đến một giải pháp khác mà tôi đoán là không tiêu chuẩn nhưng hiệu quả. Đưa ra thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ

3
tôi có thể nói rằng tôi yêu bạn? Ôi chúa ơi. bạn vừa tiết kiệm được $$ của tôi
NikosKeyz

93
table {
    border-collapse: collapse;
}

td {
    padding-top: .5em;
    padding-bottom: .5em;
}

Các ô sẽ không phản ứng với bất kỳ điều gì trừ khi bạn đặt thu gọn đường viền trước. Bạn cũng có thể thêm đường viền cho các phần tử TR sau khi được đặt (trong số những thứ khác.)

Nếu đây là dành cho bố cục, tôi sẽ chuyển sang sử dụng DIV và các kỹ thuật bố cục cập nhật hơn, nhưng nếu đây là dữ liệu dạng bảng, hãy loại bỏ chính bạn. Tôi vẫn sử dụng nhiều bảng trong các ứng dụng web của mình để lấy dữ liệu.


Bạn đã kiểm tra nó? Có vẻ như td có thể có đệm có hoặc không có sụp đổ. Biên giới hoạt động với tính năng thu gọn, nhưng không hoạt động trên IE.
Kobi

Điều này đã hiệu quả. Khó chịu là lợi nhuận không hoạt động, nhưng nó không quan trọng trong trường hợp này. Cảm ơn.
MGOwen

30
Đây là một cách tiếp cận thực sự tồi tệ. Bạn đang sửa đổi hộp của các ô để định vị các ô, thay vì chỉ định vị các ô, bằng cách hợp nhất các ô với nhau vì bạn muốn chúng xa nhau. Thứ hai, các ô cần hình nền, bạn đã bị rối. Cách tiếp cận đúng là tách biên giới, không phải thu gọn biên giới, sử dụng phân tách biên giới để xác định, bạn biết đấy, phân tách biên giới.
John Haugeland

1
Nó gần như là phần đầu tiên của CSS2 được triển khai, bởi vì các trình duyệt đã có các khoảng trống bảng được triển khai cho phiên bản HTML mà mọi người thường sử dụng để bố trí chính xác pixel. Vâng, tôi chắc chắn. :)
John Haugeland

1
Đó là một trong những góc kỳ lạ của CSS mà không ai trừ những người đã đọc thông số kỹ thuật biết đến. (Có một số lượng lớn đáng ngạc nhiên trong số họ. Tương tự float về cơ bản không bao giờ được sử dụng như cách nó được sử dụng trong thực tế.)
John Haugeland

7

Nếu không có câu trả lời nào khác là thỏa đáng, bạn luôn có thể tạo một hàng trống và tạo kiểu bằng CSS một cách thích hợp để trở nên minh bạch.


Tại sao lại ủng hộ? Các câu trả lời khác có vấn đề: câu trả lời của rpflo yêu cầu bạn sử dụng tính năng thu gọn đường viền và mở rộng phần đệm của các ô, làm cho các ô có vẻ lớn hơn thay vì tạo khoảng cách giữa chúng. Câu trả lời của John Haugeland không cho phép bạn áp dụng khoảng cách có chọn lọc cho các hàng nhất định. Tôi có thể tiếp tục nhưng câu trả lời này là một tùy chọn phù hợp với trường hợp sử dụng của tôi khi không có câu trả lời nào khác làm được.
Flimm

2
Phương pháp chỉ định chiều cao của các hàng riêng lẻ bằng CSS của người dùng ẩn danh ưu việt hơn rất nhiều so với việc thêm nội dung giả vào bảng, nếu bạn cần kiểm soát các hàng riêng lẻ, đây không phải là câu hỏi này.
John Haugeland

Các hàng giả cũng gây nhầm lẫn với các công cụ mong đợi các hàng trong bảng là các hàng trong bảng (như các công cụ trợ năng quan trọng cho người bị vô hiệu hóa và các plugin phổ biến để xuất / sắp xếp / định dạng lại / v.v.). Có nhiều lý do để sử dụng kiểu dáng để kiểm soát kiểu dáng, thay vì nhét đồ giả vào như một nguyên tắc chung. Đọc về Đánh dấu ngữ nghĩa để biết thêm thông tin.
MGOwen

@MGOwen Bạn có thể nêu tên các công cụ hỗ trợ tiếp cận sẽ bị lỗi trong trường hợp này và chúng sẽ thất bại như thế nào? Bây giờ tôi hoài nghi về lời khuyên trợ năng không đề cập đến chi tiết cụ thể, có rất nhiều lời khuyên về khả năng tiếp cận không thực sự giúp ích cho bất kỳ ai (ví dụ: lời khuyên về phác thảo tài liệu cho HTML 5 đều sai , các công cụ trợ năng thì không làm việc theo cách mọi người nói là họ làm việc).
Flimm

4

Nếu bạn không có đường viền hoặc có đường viền và muốn có khoảng cách bên trong các ô, bạn có thể sử dụng paddinghoặc line-height. Theo như tôi biết, lề không ảnh hưởng đến ô và hàng.
Thuộc tính CSS cho khoảng cách giữa các ô làborder-spacing , nhưng nó không hoạt động trên IE6 / 7 (vì vậy bạn có thể sử dụng nó tùy thuộc vào số lượng của bạn).

Nếu vẫn thất bại, bạn có thể sử dụng cellspacingthuộc tính cũ trong đánh dấu của mình - nhưng điều này cũng sẽ cung cấp cho bạn khoảng cách giữa các cột. Một số thiết lập lại CSS đề xuất bạn vẫn nên đặt nó để được hỗ trợ trên nhiều trình duyệt:

/ * bảng vẫn cần cellspacing="0"trong đánh dấu * /


2

Đây là cách (tôi đã nghĩ rằng nó không thể):

Đầu tiên, chỉ cung cấp cho bảng khoảng cách đường viền dọc (ví dụ 5px) và đặt khoảng cách đường viền ngang bằng 0. Sau đó, bạn nên đặt đường viền thích hợp cho mỗi ô hàng. Ví dụ: ô ngoài cùng bên phải trong mỗi hàng phải có đường viền ở trên, dưới và bên phải. Các ô ngoài cùng bên trái phải có đường viền ở trên, dưới và bên trái. Và các ô khác giữa 2 ô này chỉ nên có đường viền trên và dưới. Như ví dụ này:

<table style="border-spacing:0 5px; color:black">
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
</table>

1

Theo tôi, cách dễ nhất để làm là thêm phần đệm vào thẻ của bạn.

td {
 padding: 10px 0
}

Hy vọng điều này sẽ giúp bạn! Vui lên!


Điều này tạo thêm không gian bên trong hàng bàn. Nếu các hàng trong bảng có màu sắc sẽ không đẹp.
Kokodoko

1

Đơn giản là bạn có thể sử dụng padding-toppadding-bottomtrên một tdphần tử.

Đơn vị có thể bất cứ điều gì từ danh sách này:

nhập mô tả hình ảnh ở đây

Mã Demo:

td
{
  padding-top: 10px;
  padding-bottom: 10px;
}
<table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  <tr>
    <td>Peter</td>
    <td>Griffin</td>
  </tr>
  <tr>
    <td>Lois</td>
    <td>Griffin</td>
  </tr>
</table>


0

padding trong TD hoạt động nếu bạn muốn không gian có cùng màu nền với td

trong trường hợp của tôi, yêu cầu là khoảng trắng giữa hàng tiêu đề và bất cứ thứ gì ở trên nó

bằng cách áp dụng kiểu này cho một ô duy nhất, tôi đã có thể có được sự phân tách mong muốn. Không cần thiết phải thêm nó vào tất cả các ô ... Có thể cho rằng không phải là thanh lịch NHẤT, nhưng có thể thanh lịch hơn các hàng phân cách.

<td colspan="10"> 
    <div class="HeaderRow" 
         style="margin-top:10px;">
            <%# Eval("VendorName")%>
     </div>
</td>  

-1

Nếu bạn gắn bó với thiết kế bằng cách sử dụng bảng, ý tưởng tốt nhất sẽ là cung cấp một hàng trống không có nội dung và chiều cao được chỉ định giữa mỗi hàng trong bảng.

Bạn có thể sử dụng div để tránh sự phức tạp này. Chỉ cần cho một số dư cho mỗi div.


1
Vẫn có những lý do chính đáng để sử dụng bảng (như dữ liệu dạng bảng). Bạn nói đúng, những hàng trống chắc chắn là một con đường ngớ ngẩn: P Nhưng có một giải pháp, sự sụp đổ của biên giới.
Ryan Florence

-1

Bạn cũng có thể chỉ cần sửa đổi chiều cao cho mỗi hàng bằng cách sử dụng CSS.

<head>
 <style>
 tr {
   height:40px;
 }
</style>
</head>

<body>
<table>

<tr> <td>One</td> <td>Two</td> </tr>
<tr> <td>Three</td> <td>Four</td> </tr>
<tr> <td>Five</td> <td>Six</td> </tr>

</table>
</body>

Bạn cũng có thể sửa đổi chiều cao của <td>phần tử, nó sẽ cho bạn kết quả tương tự.


-1

Tạo một cái khác <tr>ngay bên dưới và thêm một số không gian hoặc chiều cao vào nội dung của<td>

nhập mô tả hình ảnh ở đây

Ví dụ như kiểm tra các fiddle

https://jsfiddle.net/jd_dev777/wx63norf/9/


Đây được coi là thực hành xấu. Một trong những lý do là các công cụ (như trình đọc cho người dùng bị khuyết tật) mong muốn các hàng trong bảng là các hàng trong bảng và sẽ xuất / đọc / diễn giải các hàng "giả" của bạn lẫn với hàng thật. Xem lần đầu tiên câu trả lời tương tự này được đưa ra vào năm 2014, ở trên.
MGOwen

1
@MGOwen cảm ơn đề xuất của bạn. hoàn toàn đồng ý
Jaydeep Chauhan

-4

Thêm quy tắc sau vào tr và nó sẽ hoạt động

float: left

Mẫu (Mở nó trong IE9 offcourse :)): http://jsfiddle.net/zshmN/

CHỈNH SỬA: Đây không phải là giải pháp hợp pháp hoặc đúng như nhiều người đã chỉ ra, nhưng nếu bạn không có lựa chọn nào và cần một thứ gì đó, điều này sẽ hoạt động trong IE9.

Vì vậy, tất cả những người đang bỏ phiếu, xin vui lòng cho chúng tôi biết giải pháp chính xác.


3
Cách tiếp cận này ngăn chặn việc tự động xếp các cột khi các ô chứa dữ liệu có các kích thước khác nhau - đánh dấu bảng về cơ bản là vô nghĩa. Nó hoạt động đủ tốt trong các ví dụ được cung cấp, nhưng nó không phải là một kỹ thuật được khuyến khích. Thay đổi văn bản của ô để xem tôi muốn nói gì.
verism

Xin lỗi @verism, tôi không hiểu ý bạn. Bạn có thể giải thích nó một chút? Hoặc nếu bạn có thể cung cấp một lỗi trong trường hợp phương pháp này không thành công vì tôi đã sử dụng phương pháp này rộng rãi và muốn quan tâm đến các trường hợp mà nó không thành công.
Sandeep Choudhary

Không có phân định rõ ràng về các cột; có nghĩa là dữ liệu dạng bảng mất cấu trúc trực quan và khó đọc hơn. jsfiddle.net/verism/zshmN/5
verism

@verism ya Đây là một vấn đề, nhưng chúng tôi có thể xác định các cột chiều rộng cố định. Tôi biết đây không phải là một giải pháp tốt, nhưng tôi không tìm thấy giải pháp nào khác hoạt động trên IE9
Sandeep Choudhary

1
Các hàng của bảng nổi không hợp pháp theo đặc tả CSS. CSS2 phần 17 yêu cầu các phần tử display: table-row nằm trong phần tử display: table-row-group, -header-group hoặc -footer-group. Tuy nhiên, thuật toán nổi theo phần 9 sẽ chèn một khối cha mẹ ẩn danh. Điều này có nghĩa là hàng trong bảng không còn có bố cục mẹ hợp pháp và trình duyệt đang đoán xem phải làm gì. Điều này là không chính xác.
John Haugeland
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.