Учимся применять cellpadding и cellspacing в CSS

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

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

Если нужно полностью убрать расстояние между ячейками (установить cellspacing=»0″), не забудьте задать свойство border-collapse: collapse. Но как реализовать cellspacing в CSS?

Рабочий CSS-эквивалент cellspacing – это border-spacing, но при этом он не работает в браузере Internet Explorer. Можно установить border-collapse: collapse, что также приведет к нулевым промежуткам между ячейками. Но единственным полностью кроссбраузерным решением остается применение атрибута cellspacing:

table
{
    border-collapse: collapse; /* эквивалент 'cellspacing' */
}

table td, table th
{
    padding: 0; /* эквивалент 'cellpadding' */
}

Также можно просто использовать cellpadding=»0″ cellspacing=»0″, так как эти атрибуты еще не считаются устаревшими.

Основы

Чтобы контролировать промежутки между ячейками с помощью CSS, можно использовать отступы (padding), выставленные для ячеек таблицы:

td { 
    padding: 10px;
}

Что касается эквивалентов CSS table cellspacing, то можно использовать свойство border-spacing, примененное к таблице. Например:

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

Данное свойство также позволит получить горизонтальные и вертикальные промежутки. То есть, реализовать то, что невозможно при помощи атрибута cellspacing.

Проблемы с IE ниже 7 версии

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

Если вы не работаете с Internet Explorer 5-7, используйте border-spacing. Если же вам не повезло, то используйте cellspacing:0 или border-collapse:collapse:

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

Если же вам не нужно нулевое значение cellspacing, то попробуйте то, что сработало у меня. Но имейте в виду, что этот вариант был протестирован только в Firefox:

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

Этот хак cellpadding cellspacing CSS работает в IE 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 можно передать больше аргументов, и все они будут использованы.

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

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

Установки по умолчанию

Стандартное поведение браузера эквивалентно следующему:

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

<h4>Cellpadding</h4>

Позволяет задать расстояние между содержимым ячеек:

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

Cellspacing

cellspacing CSS отвечает за расстояние между самими ячейками:

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

Комбинация свойств

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

Комбинация свойств (дополнительно)

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

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

Можете попробовать в действии!

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

div.cellwidener {
  margin:0px 15px 0px 15px;
}
td.tight {
  padding:0px;
}

А также следующий HTML-код:

<table border="0">
  <tr>
     <td class="tight"><div class="cellwidener">My content</div></td>
  </tr>
</table>

Здесь можно опробовать код в действии.

Этот подход работает в IE! На самом деле, я и тестировал его только в Internet Explorer. Из W3C-спецификации я понял, что тег <table> предназначался исключительно для отображения контента.

Гораздо проще создать <div> с нужными фонами, а затем поверх этого элемента позиционировать таблицы с использованием position: absolute и background: transparent. Данный метод работает в Chrome, IE (6 и выше), а также Mozilla (2 и выше).

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

После border-collapse я использовал атрибут !important, чтобы получилось border-collapse: collapse !important. В IE 7 этот вариант отлично работал. Он переписывал исходный атрибут cellspacing.

Попробуйте следующий метод реализации CSS table cellspacing:

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

Или немного по-другому:

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

Для таблиц можно использовать border-collapse: collapse, а для th или td — указать padding:

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

CSS:

selector{
    padding:0 0 10px 0; // Верхняя, левая, нижняя, правая 
}

Для содержимого таблицы можно применять CSS-отступы:

td { 
    padding: 20px;
}

А для границ:

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

Это может вызвать проблемы в старых версиях Internet Explorer из-за различий в реализации блочной модели.

Ниже приведен код для сброса всех стилей cellpadding cellspacing CSS. Он находится у меня в файле reset.css:

table{
    border:0;          /* Замена границ */
    border-spacing: 0px; /* Замена cellspacing */
    border-collapse: collapse; /* Патч для Internet Explorer 6 и Internet Explorer 7 */
}
table td{
    padding: 0px;/* Замена cellpadding*/
}

Cellpadding используется для создания промежутков между содержимым ячеек и их границами:

td
{
    padding: 10px;
}

Атрибут cellspacing создает пространство вокруг каждой ячейки в таблице. Чтобы добиться эффекта cellspacing в CSS, используйте свойство border-spacing:

table,th,td
{
    border:2px solid green;
    border-spacing: 10px;
}

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

Стили добавляются в разметку таблиц только для того, чтобы не использовать CSS. Это может вызвать сложности, если на странице много таблиц:

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

В HTML5 свойства cellspacing и cellpadding для таблиц считаются устаревшими. Теперь, чтобы получить эффект cellspacing, нужно использовать border-spacing, а cellpadding компенсировать border-collapse.

И всегда старайтесь задавать значения cellpadding cellspacing CSS в стилевом файле:

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

cellpadding можно реализовать с помощью отступов в CSS, в то время как cellspacing можно компенсировать свойством border-spacing, примененным к таблице:

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

Посмотреть пример.

table{border-spacing:4px; color: #000; background:#ccc; } td{padding-left:4px;}

В HTML-таблице cellpadding cellspacing CSS можно установить следующим образом: чтобы получить промежутки между контентом ячеек, используйте отступы для td/th:

/******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;
}

Для получения cellspacing CSS используйте свойство border-spacing для table:

/********* 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;
}

Перевод статьи “How to set cellpadding and cellspacing in CSS?” был подготовлен дружной командой проекта Сайтостроение от А до Я.