В таблице HTML cellpadding и cellspacing могут быть установлены следующим образом:

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

Как сделать то же самое с помощью CSS?

3666
kokos 4 Дек 2008 в 11:45
11
Просто общее предложение, прежде чем пробовать эти решения, проверьте, выполняет ли ваш style.css «сброс» таблиц. Пример: Если у вас нет таблиц, настроенных на width:auto, то border-collapse может работать не так, как ожидалось.
 – 
PJ Brunet
1 Сен 2016 в 10:12
3
Используйте border-spacing на table и padding на td.
 – 
Anubhav
23 Май 2017 в 12:17
6
"Ой, черт, когда-то я делал это с cellpadding и cellspacing ... что это опять за CSS?" –Мне, почти каждый раз, когда мне нужно это сделать.
 – 
Robert J. Walker
13 Авг 2021 в 19:43

30 ответов

Лучший ответ

< Сильный > Основы

Для управления "заполнением ячеек" в CSS вы можете просто использовать padding для ячеек таблицы. Например. для 10 пикселей "cellpadding":

td { 
    padding: 10px;
}

Для "cellspacing" вы можете применить свойство CSS border-spacing к своей таблице. Например. для 10 пикселей «пространства ячеек»:

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

Это свойство даже позволит разделить интервалы по горизонтали и вертикали, чего нельзя было сделать с помощью "ячеек" старой школы.

Проблемы в IE ≤ 7

Это будет работать почти во всех популярных браузерах, кроме Internet Explorer до Internet Explorer 7, где вам почти не повезло. Я говорю «почти», потому что эти браузеры все еще поддерживают свойство border-collapse, которое объединяет границы соседних ячеек таблицы. Если вы пытаетесь исключить интервал между ячейками (то есть cellspacing="0"), то border-collapse:collapse должен иметь тот же эффект: отсутствие пробелов между ячейками таблицы. Однако в этой поддержке есть ошибки, поскольку она не отменяет существующий атрибут HTML cellspacing в элементе таблицы.

Вкратце: для браузеров, отличных от Internet Explorer 5-7, border-spacing обрабатывает вас. Для Internet Explorer, если ваша ситуация подходит (вам нужно 0 ячеек, а в вашей таблице он еще не определен), вы можете использовать border-collapse:collapse.

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

Примечание. Подробный обзор свойств CSS, которые можно применить к таблицам и для каких браузеров, см. В этой фантастической Страница Quirksmode.

3864
Community 25 Июн 2020 в 05:28
33
Cellpadding = "0" по-прежнему может иметь значение в Chrome 13.0.782.215, даже если к таблице применены border-collapse: collapse и border-spacing.
 – 
whitneyland
25 Авг 2011 в 07:01
7
Вам нужно установить padding: 0 в ячейках таблицы.
 – 
Martin Ørding-Thomsen
29 Ноя 2011 в 14:09
11
Это немного не по теме, но атрибуты cellpadding и cellspacing в HTML5 удалены, так что CSS - единственный выход сейчас.
 – 
Ignas2526
22 Ноя 2013 в 23:10
16
Всем привет. Я обновил ответ для ясности, включая раздел о добавлении ячеек, который, на мой взгляд, был очевиден (просто используйте «заполнение»). Надеюсь, теперь это более полезно.
 – 
Eric Nguyen
16 Дек 2013 в 10:27
4
Правда, @vapcguy, в любой из бесконечно изменяемых других ситуаций, в которых вы можете стилизовать таблицу, вам нужно будет определить более конкретные селекторы. Выше отмечены как примеры.
 – 
Eric Nguyen
1 Апр 2015 в 23:41

Просто используйте border-collapse: collapse для своего стола и padding для th или td.

24
Peter Mortensen 7 Апр 2019 в 13:00
table th,td {
    padding: 8px 2px;
}
table {
    border-collapse: separate;
    border-spacing: 2px;
}
18
RevanthKrishnaKumar V. 30 Июл 2015 в 13:26
<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-padding можно задать с помощью padding в CSS, а cell-spacing можно задать, установив border-spacing для таблицы.

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

Fiddle.

8
Super User 11 Янв 2017 в 11:37

Для таблиц интервалы между ячейками и заполнение ячеек в HTML 5 устарели.

Теперь для размещения ячеек вам нужно использовать границы. А для cellpadding вы должны использовать border-collapse.

И убедитесь, что вы не используете это в своем коде HTML5. Всегда старайтесь использовать эти значения в файле CSS 3.

5
Peter Mortensen 7 Апр 2019 в 13:06
table {
    border-spacing: 4px; 
    color: #000; 
    background: #ccc; 
}
td {
    padding-left: 4px;
}
5
Peter Mortensen 7 Апр 2019 в 13:07

В таблице HTML cellpadding и cellspacing могут быть установлены следующим образом:

Для cell-padding :

Просто вызовите простую td/th ячейку padding.

Пример:

/******Call-Padding**********/

table {
    border-collapse: collapse;
}

td {
  border: 1px solid red;
  padding: 10px;
}
<table>
        <tr>
            <th>Head1 </th>
            <th>Head2 </th>
            <th>Head3 </th>
            <th>Head4 </th>
        </tr>
        <tr>
            <td>11</td>
            <td>12</td>
            <td>13</td>
            <td>14</td>
        </tr>
        <tr>
            <td>21</td>
            <td>22</td>
            <td>23</td>
            <td>24</td>
        </tr>
        <tr>
            <td>31</td>
            <td>32</td>
            <td>33</td>
            <td>34</td>
        </tr>
        <tr>
            <td>41</td>
            <td>42</td>
            <td>43</td>
            <td>44</td>
        </tr>
    </table>
table {
    border-collapse: collapse;
}

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

Для интервала ячеек

Просто позвоните по телефону table border-spacing

Пример:

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

td {
  border: 1px solid red;
}
<table>
        <tr>
            <th>Head1</th>
            <th>Head2</th>
            <th>Head3</th>
            <th>Head4</th>
        </tr>
        <tr>
            <td>11</td>
            <td>12</td>
            <td>13</td>
            <td>14</td>
        </tr>
        <tr>
            <td>21</td>
            <td>22</td>
            <td>23</td>
            <td>24</td>
        </tr>
        <tr>
            <td>31</td>
            <td>32</td>
            <td>33</td>
            <td>34</td>
        </tr>
        <tr>
            <td>41</td>
            <td>42</td>
            <td>43</td>
            <td>44</td>
        </tr>
    </table>
/********* Cell-Spacing   ********/
table {
    border-spacing: 10px;
    border-collapse: separate;
}

td {
  border: 1px solid red;
}

Дополнительные стили таблиц по ссылке на источник CSS здесь вы получите дополнительные стили таблиц с помощью CSS.

5
Peter Mortensen 7 Апр 2019 в 13:08

Вы можете просто сделать что-то подобное в своем CSS, используя border-spacing и padding:

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>
3
Alireza 8 Сен 2017 в 11:49

Вы можете проверить приведенный ниже код, просто создайте index.html и запустите его.

<!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>

ВЫХОД:

enter image description here

1
m4n0 9 Июл 2020 в 04:51

Как насчет добавления стиля непосредственно в саму таблицу? Это вместо использования table в вашем CSS, что является ПЛОХО подходом, если на вашей странице несколько таблиц:

<table style="border-collapse: separate;border-spacing: 2px;">
    <tr>
        <td style="padding: 4px 4px;">Some Text</td>
    </tr>
</table>
0
vapcguy 26 Фев 2015 в 08:30
2
Помещение «style» в тег таблицы хуже, чем «table # someId» в вашем CSS, поскольку стили должны быть отделены от содержимого. Но главный вопрос в том, как преобразовать устаревший html в правильный css. Что вы сделали правильно, но на самом деле ничего не добавили в свой ответ и сосредоточились на несвязанной проблеме.
 – 
Teepeemm
28 Мар 2015 в 05:53
1
Ничего не добавлено ?! Я добавил, чтобы сосредоточиться на том, как каждый другой ответ здесь в основном говорит об использовании td { padding: ... } или table { border-spacing: ... } вместо того, чтобы применять его непосредственно к таблице. Те ничего не добавляют. Как я уже сказал, когда у вас есть несколько таблиц на вашей странице и вы не хотите на них влиять, вы этого не хотите! Нам не нужна целая страница с ответами, в которых говорится: «Используйте таблицу стилей!», Хотя, возможно, это последнее, что вам нужно, потому что вам нужно форматирование только для одной ячейки или таблицы. Это когда применение его к table или td нежелательно, а создание для него совершенно нового класса - это излишне.
 – 
vapcguy
28 Мар 2015 в 06:03
1
В каждом другом ответе используется таблица стилей, потому что исходный вопрос был «как я могу сделать это с помощью css». Если бы вопрос был «как я могу заставить CSS воздействовать только на эту одну таблицу», то ваш ответ был бы более подходящим (хотя я все же предпочел бы table#someId).
 – 
Teepeemm
28 Мар 2015 в 07:09
2
Технически встроенные стили по-прежнему являются CSS, только без таблиц стилей, но я понимаю вашу точку зрения.
 – 
vapcguy
1 Апр 2015 в 03:15
1
Потому что идея, лежащая в основе класса, заключается в возможности повторного использования. Для одноразового использования это не имеет особого смысла и является излишним, ИМХО.
 – 
vapcguy
11 Апр 2015 в 11:13

Это сработало для меня:

table {border-collapse: collapse}
table th, table td {padding: 0}
0
MattAllegro 24 Фев 2021 в 14:29

Я предлагаю это, и все ячейки для конкретной таблицы обрабатываются.

table.tbl_classname td, th {
    padding: 5px 5px 5px 4px;
 }
0
MattAllegro 24 Фев 2021 в 14:30

По умолчанию

Поведение браузера по умолчанию эквивалентно:

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

         Enter image description here

Cellpadding

Устанавливает расстояние между содержимым ячейки и стенкой ячейки

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

        Enter image description here

Ячейки

Управляет расстоянием между ячейками таблицы

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

        Enter image description here

И то и другое

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

        Enter image description here

Оба (специальные)

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

        Enter image description here

Примечание. Если установлен параметр border-spacing, это означает, что свойство таблицы border-collapse равно separate.

Попробуй сам!

Здесь вы можете найти старый способ HTML для достижения этой цели.

1023
Peter Mortensen 7 Апр 2019 в 12:57
1
Как исчезает интервал вокруг стола? Когда я устанавливаю «border-spacing: 8px 12px, он добавляет интервал не только между, но и между границей таблицы и внешними ячейками! Но это не изображено на изображениях здесь; они расположены на одном уровне с левым краем».
 – 
Kaz
19 Ноя 2013 в 05:14
1
И, к сожалению, если кто-то хочет удалить эффект внешнего интервала, это не сработает с этими атрибутами CSS.
 – 
Kaz
19 Ноя 2013 в 22:07
Возможно, вам понадобится использовать отрицательный запас, чтобы скрыть эту раздражающую часть.
 – 
user669677
20 Ноя 2013 в 13:59
2
Отступ по умолчанию на TD обычно составляет 1 пиксель, а не 0.
 – 
Jan M
5 Ноя 2014 в 18:40
Осторожно: border-spacing:horizontal vertical; тогда как, например, padding:vertical horizontal;.
 – 
Adam Chalcraft
30 Окт 2020 в 22:03
table
{
    border-collapse: collapse; /* 'cellspacing' equivalent */
}

table td, table th
{
    padding: 0; /* 'cellpadding' equivalent */
}
369
Hemerson Varela 24 Июл 2013 в 00:46
23
Это эквивалент cellspacing=0. Эквивалент для cellspacing=1 совершенно другой. См. Принятый ответ.
 – 
TRiG
25 Июл 2012 в 18:08

Насколько я знаю, установка полей для ячеек таблицы на самом деле не имеет никакого эффекта. Настоящий CSS-эквивалент для cellspacing - border-spacing, но он не работает в Internet Explorer.

Вы можете использовать border-collapse: collapse, чтобы надежно установить интервал между ячейками равным 0, как уже упоминалось, но для любого другого значения, я думаю, единственный кроссбраузерный способ - это продолжать использовать атрибут cellspacing.

124
Peter Mortensen 3 Авг 2013 в 00:34
51
В наше время эта реальность в высшей степени отстойна.
 – 
John K
9 Июл 2010 в 06:36
8
Это почти правильно, но border-collapse работает только в IE 5-7, если для таблицы еще не определен атрибут cellspacing. Я написал исчерпывающий ответ, который объединяет все правильные части других ответов на этой странице на случай, если это будет полезно.
 – 
Eric Nguyen
9 Июл 2010 в 06:36

Этот прием работает для Internet Explorer 6 и более поздних версий, Google Chrome, Firefox и Opera:

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

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

Объявление * предназначено для Internet Explorer 6 и 7, и другие браузеры будут его игнорировать.

expression('separate', cellSpacing = '10px') возвращает 'separate', но оба оператора выполняются, так как в JavaScript вы можете передать больше аргументов, чем ожидалось, и все они будут оценены.

111
James Donnelly 29 Окт 2013 в 21:17

Для тех, кто хочет ненулевое значение расстояния между ячейками, у меня сработал следующий CSS, но я могу протестировать его только в Firefox.

См. Ссылку Quirksmode опубликовано в другом месте для получения сведений о совместимости. Похоже, это может не работать со старыми версиями Internet Explorer.

table {
    border-collapse: separate;
    border-spacing: 2px;
}
74
Peter Mortensen 7 Апр 2019 в 12:55

Простое решение этой проблемы:

table
{
    border: 1px solid #000000;
    border-collapse: collapse;
    border-spacing: 0px;
}
table td
{
    padding: 8px 8px;
}
57
Hemerson Varela 24 Июл 2013 в 00:45

Кроме того, если вы хотите cellspacing="0", не забудьте добавить border-collapse: collapse в свою таблицу стилей table.

55
mat 4 Дек 2008 в 12:06

Оберните содержимое ячейки с помощью div, и вы можете делать все, что захотите, но вам нужно обернуть каждую ячейку в столбце, чтобы получить однородный эффект. Например, чтобы просто расширить левое и правое поля:

Итак, CSS будет,

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>

Да, хлопотно. Да, работает с Internet Explorer. Фактически, я тестировал это только с Internet Explorer, потому что это все, что нам разрешено использовать на работе.

47
Peter Mortensen 7 Апр 2019 в 12:58

Этот стиль предназначен для полного сброса таблиц - заполнение ячеек , расстояние между ячейками и границы .

В моем файле reset.css был такой стиль:

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 */
}
26
Peter Mortensen 7 Апр 2019 в 13:01

TBH. Несмотря на все эксперименты с CSS, вы можете просто использовать cellpadding="0" cellspacing="0", поскольку они не являются устаревшими ...

Кто-то другой, предлагающий поля для <td>, очевидно, не пробовал этого.

21
Josh Crozier 16 Окт 2013 в 03:54
37
На самом деле они устарели в html5.
 – 
Kzqai
15 Ноя 2011 в 20:49

Просто используйте правила заполнения CSS для табличных данных:

td { 
    padding: 20px;
}

И для интервала между границами:

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

Однако это может создать проблемы в старых версиях браузеров, таких как Internet Explorer, из-за реализации блочной модели diff.

19
Peter Mortensen 3 Июл 2014 в 00:32

Насколько я понимаю из классификации W3C, <table> предназначены только для отображения данных.

Основываясь на этом, я обнаружил, что намного проще создать <div> с фоном и всем остальным и иметь таблицу с плавающими над ним данными, используя position: absolute; и background: transparent; ...

Он работает в Chrome, Internet Explorer (6 и новее) и Mozilla Firefox (2 и новее).

Поля используются (или в любом случае предназначены) для создания разделителя между элементами контейнера, такими как <table>, <div> и <form>, а не <tr>, <td>, <span> или <input>. Использование его для чего-либо, кроме элементов контейнера, заставит вас заняться настройкой своего веб-сайта для будущих обновлений браузера.

17
Peter Mortensen 7 Апр 2019 в 12:59

CSS:

selector{
    padding:0 0 10px 0; // Top left bottom right 
}
15
Peter Mortensen 3 Июл 2014 в 00:31

Вы можете легко установить отступ внутри ячеек таблицы, используя свойство CSS padding. Это действительный способ произвести тот же эффект, что и атрибут cellpadding таблицы.

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>

Точно так же вы можете использовать свойство CSS border-spacing, чтобы применить интервал между границами соседних ячеек таблицы, как атрибут cellspacing. Однако для работы с интервалом между границами значение свойства «border-collapse» должно быть отдельным, что является значением по умолчанию.

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>
14
Peter Mortensen 7 Апр 2019 в 13:09

Попробуй это:

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

Или попробуйте это:

table {
    border-collapse: collapse;
}
table td, table th {
    padding: 10px;
}
12
James Donnelly 29 Окт 2013 в 21:17

Я использовал !important после сглаживания границы, например

border-collapse: collapse !important;

И у меня это работает в IE7. Кажется, переопределяет атрибут ячейки.

10
James Donnelly 29 Окт 2013 в 21:17
10
!important потребуется только для переопределения других настроек CSS в сложной ситуации (и даже тогда в большинстве случаев это неправильный подход).
 – 
Jukka K. Korpela
30 Май 2013 в 14:37

Предположим, что мы хотим назначить нашей таблице «заполнение ячеек» 10 пикселей и 15 пикселей «пространство ячеек» совместимым с HTML5 способом. Я покажу здесь два метода, дающих действительно похожие результаты.

Два разных набора свойств CSS применяются к одной и той же разметке HTML для таблицы, но с противоположными концепциями:

  • первый использует значение по умолчанию для border-collapse (separate) и использует border-spacing для указания расстояния между ячейками,

  • второй переключает border-collapse на collapse и использует свойство border в качестве расстояния между ячейками.

В обоих случаях добавление ячеек достигается назначением padding:10px элементам td, и в обоих случаях назначенный им background-color используется только для более ясной демонстрации.

Первый способ:

table{border-spacing:15px}
td{background-color:#00eb55;padding:10px;border:0}
<table>
<tr>
<td>Header 1</td><td>Header 2</td>
</tr>
<tr>
<td>1</td><td>2</td>
</tr>
<tr>
<td>3</td><td>4</td>
</tr>
</table>

Второй способ:

table{border-collapse:collapse}
td{background-color:#00eb55;padding:10px;border:15px solid #fff}
<table>
<tr>
<td>Header 1</td><td>Header 2</td>
</tr>
<tr>
<td>1</td><td>2</td>
</tr>
<tr>
<td>3</td><td>4</td>
</tr>
</table>
9
MattAllegro 27 Фев 2021 в 22:06
td {
    padding: npx; /* For cellpadding */
    margin: npx; /* For cellspacing */
    border-collapse: collapse; /* For showing borders in a better shape. */
}

Если margin не работает, попробуйте установить для display из tr значение block, и тогда маржа будет работать.

7
Peter Mortensen 7 Апр 2019 в 13:02