Đặt di động và không gian di động trong CSS?


3317

Trong bảng HTML, cellpaddingcellspacingcó thể được đặt như thế này:

<table cellspacing="1" cellpadding="1">

Làm thế nào cùng có thể được thực hiện bằng CSS?


6
Chỉ là một đề xuất chung, kiểm tra xem nếu style.css của bạn thực hiện "đặt lại" trên các bảng của bạn trước khi thử các giải pháp này. Ví dụ: Nếu bạn không đặt các bảng width:autothì border-collapsecó thể không hoạt động như mong đợi.
PJ Brunet

1
Sử dụng khoảng cách đường viền trên bàn và đệm trên td.
Anubhav

Câu trả lời:


3554

Khái niệm cơ bản

Để kiểm soát "cellpadding" trong CSS, bạn chỉ cần sử dụng paddingtrên các ô của bảng. Ví dụ: 10px của "cellpadding":

td { 
    padding: 10px;
}

Đối với "không gian di động", bạn có thể áp dụng thuộc tính border-spacingCSS cho bảng của mình. Ví dụ: 10px của "không gian di động":

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

Khách sạn này thậm chí sẽ cho phép khoảng cách ngang và dọc riêng biệt, điều mà bạn không thể làm với "không gian di động" của trường học cũ.

Các vấn đề trong IE <= 7

Điều này sẽ hoạt động trong hầu hết tất cả các trình duyệt phổ biến ngoại trừ Internet Explorer cho đến Internet Explorer 7, nơi bạn sắp hết may mắn. Tôi nói "gần như" bởi vì các trình duyệt này vẫn hỗ trợ thuộc border-collapsetính, hợp nhất các đường viền của các ô của bảng liền kề. Nếu bạn đang cố gắng loại bỏ không gian di động (nghĩa là cellspacing="0") , thì border-collapse:collapsesẽ có tác dụng tương tự: không có khoảng cách giữa các ô của bảng. Tuy nhiên, sự hỗ trợ này có lỗi, vì nó không ghi đè một cellspacingthuộc tính HTML hiện có trên thành phần bảng.

Nói tóm lại: đối với các trình duyệt không có Internet Explorer 5-7, border-spacingsẽ xử lý bạn. Đối với Internet Explorer, nếu tình huống của bạn vừa phải (bạn muốn 0 ô không gian và bảng của bạn chưa được xác định), bạn có thể sử dụng border-collapse:collapse.

table { 
    border-spacing: 0;
    border-collapse: collapse;
}

Lưu ý: Để biết tổng quan tuyệt vời về các thuộc tính CSS mà người ta có thể áp dụng cho các bảng và cho trình duyệt nào, hãy xem trang Quirksmode tuyệt vời này .


27
cellpadding = "0" vẫn có thể tạo ra sự khác biệt trong Chrome 13.0.782.215, ngay cả khi thu gọn đường viền: thu gọn và giãn cách viền được áp dụng cho bảng.
whitneyland

7
@LeeWhitney bạn cần đặt phần đệm: 0 trên các ô của bảng.
Martin rding-Thomsen

7
Đó là một chút chủ đề, nhưng các thuộc tính di động và không gian di động được loại bỏ trong HTML5, vì vậy CSS là cách duy nhất để đi bây giờ.
Ignas2526

12
Chào mọi người. Tôi đã cập nhật câu trả lời cho rõ ràng, bao gồm một phần về di động, điều mà tôi nghĩ là rõ ràng (chỉ sử dụng "phần đệm"). Hy vọng nó hữu ích hơn bây giờ.
Eric Nguyễn

4
Đúng, @vapcguy, trong bất kỳ tình huống nào khác có thể thay đổi vô hạn mà bạn có thể đang tạo kiểu cho một bảng, bạn sẽ cần xác định các bộ chọn cụ thể hơn. Trên đây được đánh dấu là ví dụ.
Eric Nguyễn

942

Mặc định

Hành vi mặc định của trình duyệt tương đương với:

table {border-collapse: collapse;}
td    {padding: 0px;}

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

Bàn di động

Đặt lượng không gian giữa nội dung của ô và thành ô

table {border-collapse: collapse;}
td    {padding: 6px;}

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

Không gian di động

Kiểm soát không gian giữa các ô của bảng

table {border-spacing: 2px;}
td    {padding: 0px;}

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

Cả hai

table {border-spacing: 2px;}
td    {padding: 6px;}

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

Cả hai (đặc biệt)

table {border-spacing: 8px 2px;}
td    {padding: 6px;}

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

Lưu ý: Nếu có border-spacingtập hợp, nó cho biết border-collapsethuộc tính của bảng là separate.

Hãy tự thử!

Ở đây bạn có thể tìm thấy cách HTML cũ để đạt được điều này.


1
Làm thế nào là khoảng cách xung quanh bàn biến mất? Khi tôi đặt "viền khoảng cách: 8px 12px, nó sẽ thêm khoảng cách không chỉ giữa, mà giữa đường viền bảng và các ô bên ngoài! Nhưng điều đó không được mô tả trong các hình ảnh ở đây; chúng bị trượt sang trái.
Kaz

1
@ 2astalavista Và thật không may nếu ai đó muốn xóa hiệu ứng khoảng cách bên ngoài, nó sẽ không hoạt động theo cách này với các thuộc tính CSS này.
Kaz

@Kaz Bạn có thể cần sử dụng lề âm để ẩn phần khó chịu đó.

2
Phần đệm mặc định trên TD thường là 1px, không phải 0
Jan M

341
table
{
    border-collapse: collapse; /* 'cellspacing' equivalent */
}

table td, table th
{
    padding: 0; /* 'cellpadding' equivalent */
}

2
Đây thực sự là điều duy nhất tôi có thể làm việc cho tôi, mặc dù tôi đã áp dụng thông tin cho một id để tránh bị quá chung chung.
Kzqai

20
Điều đó cellspacing=0tương đương. Tương đương cho cellspacing=1là hoàn toàn khác nhau. Xem câu trả lời được chấp nhận.
TRiG

3
Không nên table tdtable thchỉ là tdthtương ứng? Nó hoạt động theo cách nào đó, nhưng bộ chọn nhỏ hơn có nghĩa là khớp nhanh hơn một chút
Cole Johnson

1
@Cole Trên thực tế, tôi nghĩ rằng nó nên table > tr > tdtable > tr > th. Điều này gần như nhanh trth, và nó được đảm bảo để hoạt động nếu bạn có một bảng lồng nhau. Chỉ cần 2c của tôi
leviathanbadger

@ trênyou00 nhưng là tablebộ chọn cần thiết? IIRC, a <td>không hợp lệ trừ khi bên trong a <tr>.
Cole Johnson

114

Đặt lề trên các ô của bảng không thực sự có tác dụng như tôi biết. Tương đương CSS thực sự cellspacingborder-spacing- nhưng nó không hoạt động trong Internet Explorer.

Bạn có thể sử dụng border-collapse: collapseđể đặt khoảng cách ô một cách đáng tin cậy thành 0 như đã đề cập, nhưng đối với bất kỳ giá trị nào khác tôi nghĩ cách duy nhất trên trình duyệt chéo là tiếp tục sử dụng cellspacingthuộc tính.


47
Trong thời đại ngày nay, thực tế là mút đến mức thứ N.
John K

7
Điều này gần như đúng, nhưng border-collapsechỉ hoạt động trong IE 5-7 nếu bảng không có cellspacingthuộc tính được xác định. Tôi đã viết một câu trả lời toàn diện, hợp nhất tất cả các phần chính xác của các câu trả lời khác trên trang này trong trường hợp điều đó hữu ích.
Eric Nguyễn

Thành thật mà nói, ai quan tâm đến Internet Explorer? Bất cứ ai sử dụng nó đều phải biết các trang web bị hỏng là lỗi của họ - vì đã sử dụng một trình duyệt chất lượng thấp như vậy. Các trang web không cần phải đối phó với điều này. Hãy để Internet Explorer bị mất. Quên hỗ trợ cho nó. Chúng tôi không cần nó, và đó là một nỗi đau để phát triển.

99

Bản hack này hoạt động cho Internet Explorer 6 trở lên, Google Chrome , Firefox và Opera :

table {
    border-collapse: separate;
    border-spacing: 10px; /* cellspacing */
    *border-collapse: expression('separate', cellSpacing = '10px');
}

table td, table th {
    padding: 10px; /* cellpadding */
}

Các *tuyên bố là dành cho Internet Explorer 6 và 7, và các trình duyệt khác đúng cách sẽ bỏ qua nó.

expression('separate', cellSpacing = '10px')trả về 'separate', nhưng cả hai câu lệnh đều được chạy, vì trong JavaScript, bạn có thể truyền nhiều đối số hơn dự kiến ​​và tất cả chúng sẽ được đánh giá.


đối với những người đang cố gắng gửi email phản hồi, lưu ý rằng * không được nhận ra bởi triển vọng 2007+ (sử dụng từ làm công cụ kết xuất) chiến
dịchmonitor.com/css

71

Đối với những người muốn có giá trị không gian di động khác không, CSS sau đây hoạt động với tôi, nhưng tôi chỉ có thể kiểm tra nó trong Firefox.

Xem liên kết Quirksmode được đăng ở nơi khác để biết chi tiết tương thích. Có vẻ như nó có thể không hoạt động với các phiên bản Internet Explorer cũ hơn.

table {
    border-collapse: separate;
    border-spacing: 2px;
}

54

Giải pháp đơn giản cho vấn đề này là:

table
{
    border: 1px solid #000000;
    border-collapse: collapse;
    border-spacing: 0px;
}
table td
{
    padding: 8px 8px;
}

49

Ngoài ra, nếu bạn muốn cellspacing="0", đừng quên thêm border-collapse: collapsevào biểu tableđịnh kiểu của bạn .


43

Bọc nội dung của ô bằng một div và bạn có thể làm bất cứ điều gì bạn muốn, nhưng bạn phải bọc mọi ô trong một cột để có được hiệu ứng thống nhất. Ví dụ: để có được lề trái & phải rộng hơn:

Vì vậy, CSS sẽ là,

div.cellwidener {
  margin: 0px 15px 0px 15px;
}
td.tight {
  padding: 0px;
}
<table border="0">
  <tr>
    <td class="tight">
      <div class="cellwidener">My content</div>
    </td>
  </tr>
</table>

Vâng, đó là một rắc rối. Vâng, nó hoạt động với Internet Explorer. Trên thực tế, tôi chỉ thử nghiệm điều này với Internet Explorer, vì đó là tất cả những gì chúng tôi được phép sử dụng tại nơi làm việc.


Tôi ước tôi có thể nâng cao hơn nữa ... Ví dụ đầu tiên không lặp lại những cái khác và một ví dụ cho thấy cách giới hạn hiệu ứng trong một bảng hoặc ô duy nhất, thay vì cho tất cả chúng trên trang !!!
vapcguy

23

Chỉ cần sử dụng border-collapse: collapsecho bảng của bạn, và paddingcho thhoặc td.


21

Phong cách này là dành cho thiết lập lại đầy đủ cho các bảng - cellpadding , cellspacingbiên giới .

Tôi đã có phong cách này trong tập tin reset.css của mình:

table{
    border:0;          /* Replace border */
    border-spacing: 0px; /* Replace cellspacing */
    border-collapse: collapse; /* Patch for Internet Explorer 6 and Internet Explorer 7 */
}
table td{
    padding: 0px; /* Replace cellpadding */
}

20

TBH. Đối với tất cả các fannying xung quanh với CSS, bạn có thể chỉ cần sử dụngcellpadding="0" cellspacing="0" vì chúng không bị phản đối ...

Bất cứ ai khác đề xuất lợi nhuận trên <td>rõ ràng đã không thử điều này.


35
Chúng thực sự không được dùng trong html5.
Kzqai

18
table th,td {
    padding: 8px 2px;
}
table {
    border-collapse: separate;
    border-spacing: 2px;
}

17

Chỉ cần sử dụng quy tắc đệm CSS với dữ liệu bảng:

td { 
    padding: 20px;
}

Và cho khoảng cách biên giới:

table { 
    border-spacing: 1px;
    border-collapse: collapse;
}

Tuy nhiên, nó có thể tạo ra sự cố trong phiên bản cũ hơn của các trình duyệt như Internet Explorer do việc triển khai mô hình hộp khác nhau.


15

Theo những gì tôi hiểu từ các phân loại của W3C thì đó <table>là ý nghĩa cho việc hiển thị dữ liệu 'chỉ'.

Dựa vào đó tôi thấy việc tạo một <div>nền với tất cả các nền và tất cả những thứ đó đều dễ dàng hơn rất nhiều và có một bảng với dữ liệu nổi trên đó bằng cách sử dụng position: absolute;background: transparent;...

Nó hoạt động trên Chrome, Internet Explorer (6 trở lên) và Mozilla Firefox (2 trở lên).

Lợi nhuận được sử dụng (hoặc có nghĩa anyways) để tạo ra một spacer giữa các yếu tố container, như <table>, <div><form>, không <tr>, <td>, <span>hoặc <input>. Sử dụng nó cho bất cứ điều gì khác ngoài các yếu tố trong thùng chứa sẽ khiến bạn bận rộn điều chỉnh trang web của mình để cập nhật trình duyệt trong tương lai.


7
OP không bao giờ nói anh ấy dùng cái gì để làm gì.
Alfabravo


12

Bạn có thể dễ dàng đặt phần đệm bên trong các ô của bảng bằng cách sử dụng thuộc tính phần đệm CSS. Đây là một cách hợp lệ để tạo hiệu ứng tương tự như thuộc tính di động của bảng.

table,
th,
td {
  border: 1px solid #666;
}

table th,
table td {
  padding: 10px;
  /* Apply cell padding */
}
<!DOCTYPE html>
<html lang="en">
<head>

  <meta charset="utf-8">
  <title>Set Cellpadding in CSS</title>

</head>

<body>

  <table>
    <thead>
      <tr>
        <th>Row</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>Clark</td>
        <td>Kent</td>
        <td>clarkkent@mail.com</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>peterparker@mail.com</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>johnrambo@mail.com</td>
      </tr>
    </tbody>
  </table>

</body>
</html>

Tương tự, bạn có thể sử dụng thuộc tính khoảng cách viền CSS để áp dụng khoảng cách giữa các đường viền ô của bảng liền kề như thuộc tính không gian ô. Tuy nhiên, để làm việc cách nhau biên giới, giá trị của các thuộc tính sụp đổ biên giới được tách biệt, đó là mặc định.

table {
  border-collapse: separate;
  border-spacing: 10px;
  /* Apply cell spacing */
}

table,
th,
td {
  border: 1px solid #666;
}

table th,
table td {
  padding: 5px;
  /* Apply cell padding */
}
<!DOCTYPE html>
<html lang="en">
<head>

  <meta charset="utf-8">
  <title>Set Cellspacing in CSS</title>

</head>

<body>

  <table>
    <thead>
      <tr>
        <th>Row</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>Clark</td>
        <td>Kent</td>
        <td>clarkkent@mail.com</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>peterparker@mail.com</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>johnrambo@mail.com</td>
      </tr>
    </tbody>
  </table>

</body>
</html>


10

Thử cái này:

table {
    border-collapse: separate;
    border-spacing: 10px;
}
table td, table th {
    padding: 10px;
}

Hoặc thử điều này:

table {
    border-collapse: collapse;
}
table td, table th {
    padding: 10px;
}

9

Tôi đã sử dụng !importantsau khi sụp đổ biên giới như

border-collapse: collapse !important;

và nó hoạt động với tôi trong IE7. Nó dường như ghi đè lên thuộc tính không gian.


9
!importantsẽ chỉ cần ghi đè các cài đặt CSS khác trong một tình huống phức tạp (và thậm chí sau đó chủ yếu là một cách tiếp cận sai).
Jukka K. Korpela

1
Cũng là một câu trả lời lặp lại của Dan, chỉ cần thêm !important, có thể được đưa vào như một nhận xét thay vì một câu trả lời khác.
vapcguy

8
<table>
    <tr>
        <th>Col 1</th>
        <th>Col 2</th>
        <th>Col 3</th>
    </tr>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
</table>

cell-paddingcó thể được đưa ra bằng paddingCSS trong khi cell-spacingcó thể được đặt bằng cách đặt border-spacingcho bảng.

table {
    border-spacing: 10px;
}
td {
    padding: 10px;
}

Fiddle .


6
td {
    padding: npx; /* For cellpadding */
    margin: npx; /* For cellspacing */
    border-collapse: collapse; /* For showing borders in a better shape. */
}

Nếu marginkhông làm việc, hãy cố gắng thiết lập displaycủa trđể blockvà sau đó lợi nhuận sẽ làm việc.


5

Đối với các bảng, không gian di động và ô di động đã lỗi thời trong HTML 5.

Bây giờ đối với không gian di động, bạn phải sử dụng khoảng cách viền. Và đối với di động, bạn phải sử dụng thu gọn viền.

Và đảm bảo bạn không sử dụng mã này trong mã HTML5 của mình. Luôn cố gắng sử dụng các giá trị này trong tệp CSS 3.



4

Trong bảng HTML, cellpaddingcellspacingcó thể được đặt như thế này:

Đối với đệm tế bào :

Chỉ cần gọi td/thdi động đơn giản padding.

Thí dụ:

table {
    border-collapse: collapse;
}

td {
  border: 1px solid red;
  padding: 10px;
}

Dành cho khoảng cách ô

Chỉ cần gọi đơn giản table border-spacing

Thí dụ:

/********* Cell-Spacing   ********/
table {
    border-spacing: 10px;
    border-collapse: separate;
}

td {
  border: 1px solid red;
}

Thêm kiểu bảng theo liên kết nguồn CSS ở đây bạn có thêm kiểu bảng bằng CSS .


3

Bạn có thể chỉ cần làm một cái gì đó như thế này trong CSS của mình, sử dụng border-spacingpadding:

table {
  border-collapse: collapse;
}

td, th {
  padding: 1em;
  border: 1px solid blue;
}
<table>
  <tr>
    <th>head_1</th>
    <th>head_2</th>
    <th>head_3</th>
    <th>head_4</th>
  </tr>
  <tr>
    <td>txt_1</td>
    <td>txt_2</td>
    <td>txt_3</td>
    <td>txt_4</td>
  </tr>
</table>


Quy tắc khoảng cách đường viền được bỏ qua khi đường viền được thu gọn.
dgrogan

0

Làm thế nào về việc thêm phong cách trực tiếp vào bảng? Đây là thay vì sử dụng tabletrong CSS của bạn, đây là cách tiếp cận BAD nếu bạn có nhiều bảng trên trang của mình:

<table style="border-collapse: separate;border-spacing: 2px;">
    <tr>
        <td style="padding: 4px 4px;">Some Text</td>
    </tr>
</table>

2
Đặt "style" trong thẻ bảng còn tệ hơn đặt "bảng # someId" trong css của bạn, vì kiểu dáng sẽ bị tách khỏi nội dung. Nhưng điểm chính của câu hỏi là làm thế nào để chuyển đổi html không dùng thành css thích hợp. Bạn đã thực hiện đúng, nhưng bạn chưa thực sự thêm bất cứ điều gì vào câu trả lời của mình và đang tập trung vào một vấn đề không liên quan.
Teepeemm 28/03/2015

1
Không có gì thêm?! Những gì tôi đã thêm là tập trung vào cách mọi câu trả lời khác ở đây về cơ bản nói là sử dụng td { padding: ... }hoặc table { border-spacing: ... }, thay vì áp dụng nó trực tiếp vào bảng. Những cái đó không thêm gì. Như tôi đã nói, khi bạn có nhiều bảng trên trang của mình và không muốn ảnh hưởng đến chúng, bạn không muốn điều này! Chúng tôi không cần cả một trang câu trả lời có nội dung "Sử dụng biểu định kiểu!", Khi có thể đó là điều cuối cùng bạn muốn, bởi vì bạn chỉ muốn định dạng cho một ô hoặc bảng. Đó là khi áp dụng nó cho tablehoặc tdlà không mong muốn và tạo ra một lớp hoàn toàn mới cho nó là quá mức cần thiết.
vapcguy 28/03/2015

1
Mọi câu trả lời khác đều sử dụng biểu định kiểu vì câu hỏi ban đầu là "làm thế nào tôi có thể làm điều này với css". Nếu câu hỏi là "làm thế nào tôi có thể có css chỉ ảnh hưởng đến một bảng này", thì câu trả lời của bạn sẽ phù hợp hơn (mặc dù tôi vẫn sẽ ủng hộ table#someId).
Teepeemm 28/03/2015

2
Về mặt kỹ thuật, kiểu dáng nội tuyến vẫn là CSS, chỉ không sử dụng biểu định kiểu, nhưng tôi hiểu ý của bạn.
vapcguy

1
Bởi vì ý tưởng đằng sau một lớp học là để tái sử dụng. Đối với một lần, điều đó có ý nghĩa rất nhỏ và quá mức cần thiết, IMHO.
vapcguy

0

Tôi đề nghị điều này và tất cả các ô cho bảng cụ thể được thực hiện.

table.tbl_classname td, th {
    padding: 5px 5px 5px 4px   ;
 }


0

Bạn có thể kiểm tra mã dưới đây chỉ cần tạo một index.htmlvà chạy nó.

<!DOCTYPE html>
<html>
   <head>
      <style>
         table{
         border-spacing:10px;
         }
         td{
         padding:10px;
         }
      </style>
   </head>
   <body>
      <table cellspacing="0" cellpadding="0">
         <th>Col 1</th>
         <th>Col 2</th>
         <th>Col 3</th>
         <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
         </tr>
      </table>
   </body>
</html>

ĐẦU RA:

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

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.