Как указать заполнение таблицы в CSS? (таблица, а не заполнение ячеек)

У меня есть таблица с цветным фоном, и мне нужно указать отступ между таблицей и ее содержимым, т.е. ячеек.
Кажется, что тег таблицы не принимает значение заполнения.
Firebug показывает макет таблицы и тела с заполнением 0, но не принимает никаких значений, введенных для них, поэтому я предполагаю, что они просто не имеют свойство заполнения.
Но дело в том, что мне нужно такое же разделение между ячейками, как между верхними ячейками с верхней частью таблицы и нижними ячейками с нижней частью таблицы.
Опять же, я хочу не заполнение ячеек.

РЕДАКТИРОВАТЬ: Спасибо, что мне действительно нужно, теперь я понимаю, это border-spacing или его html-эквивалент, cellspacing.
Но по какой-то причине они ничего не делают на сайте, над которым я работаю.
Оба отлично работают в отдельном HTML, но на сайте - нет.
Я подумал, что это может быть какой-то стиль, перезаписывающий свойство, но не должно быть перезаписано пространство ячеек и встроенный интервал границ, не так ли?
(Я использую firefox)

РЕДАКТИРОВАТЬ 2: Нет, заполнение TD - это НЕ то, что мне нужно. При использовании TD padding верхнее и нижнее заполнение соседних ячеек суммируются, поэтому между двумя ячейками существует вдвое больше пространства (фактически, padding), чем между верхней ячейкой и верхней границей таблицы. Я хочу, чтобы между ними было точно такое же расстояние.


person Petruza    schedule 17.11.2009    source источник


Ответы (12)


Самый простой / лучший поддерживаемый метод - использовать <table cellspacing="10">

Способ css: border-spacing (не поддерживается IE, я не думаю)

    <!-- works in firefox, opera, safari, chrome -->
    <style type="text/css">
    
    table.foobar {
    	border: solid black 1px;
    	border-spacing: 10px;
    }
    table.foobar td {
    	border: solid black 1px;
    }
    
    
    </style>
    
    <table class="foobar" cellpadding="0" cellspacing="0">
    <tr><td>foo</td><td>bar</td></tr>
    </table>

Изменить: если вы просто хотите заполнить содержимое ячейки, а не пространство, вы можете просто использовать

<table cellpadding="10">

OR

td {
    padding: 10px;
}
person Rob    schedule 17.11.2009
comment
border-spacing поддерживается в IE8, но не в более ранних версиях. border-collapse можно использовать для достижения cellspacing="0" в браузерах, но не более высоких значений. - person bobince; 17.11.2009
comment
Ой! ЭТО КЛЮЧ! Мне было интересно, нет ли какого-либо другого свойства, действующего на интервал ... и это крах-коллапс! Спасибо! - person Petruza; 18.11.2009
comment
border-spacing, похоже, не работает в более поздних версиях Firefox - person evanmcd; 06.01.2012
comment
cellpadding не поддерживается в HTML5! - person paullb; 08.07.2015

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

person Frank Schwieterman    schedule 17.11.2009

Вот что вам следует понять о таблицах ... Это не дерево вложенных независимых элементов. Они представляют собой единый составной элемент. В то время как отдельные TD ведут себя более или менее как блочные элементы CSS, промежуточные элементы (все, что находится между TABLE и TD, включая TR и TBODY) неделимы и не попадают ни в inline, ни в блокировать. Никакие случайные HTML-элементы не допускаются в этом многомерном пространстве, и размер такого другого многомерного пространства вообще не настраивается с помощью CSS. Только свойство HTML cellspacing может даже получить доступ к нему, и это свойство не имеет аналогов в CSS.

Итак, чтобы решить вашу проблему, я бы предложил либо оболочку DIV, как предлагает другой плакат, либо, если вам абсолютно необходимо сохранить ее в таблице, у вас есть этот уродливый мусор:

<style>
    .padded tr.first td { padding-top:10px; }
    .padded tr.last td { padding-bottom:10px; }
    .padded td.first { padding-left:10px; }
    .padded td.last { padding-right:10px; }
</style>

<table class='padded'>
    <tr class='first'>
        <td class='first'>a</td><td>b</td><td class='last'>c</td>
    </tr>
    <tr>
        <td class='first'>d</td><td>e</td><td class='last'>f</td>
    </tr>
    <tr class='last'>
        <td class='first'>g</td><td>h</td><td class='last'>i</td>
    </tr>
</table>
person jpsimons    schedule 19.11.2009
comment
Также возможно использовать псевдоэлементы CSS (: first-child,: last-child) вместо добавления классов (.first, .last). - person camcam; 07.09.2014
comment
Да, сегодня, но я ответил на это в 2009 году! - person jpsimons; 17.09.2014

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

Например, вы можете обернуть всю таблицу в DIV и установить отступ в div.

person Seb    schedule 17.11.2009

Забавно, я вчера делал именно это. Вам просто нужно это в вашем файле css

.ablock table td {
     padding:5px;
}

затем оберните таблицу в подходящий div

<div class="ablock ">
<table>
  <tr>
    <td>
person Cruachan    schedule 17.11.2009
comment
Самый простой и непробиваемый подход. - person Rantiev; 07.12.2015

С помощью css таблица может иметь заполнение независимо от ее ячеек.

Свойство padding не наследуется его дочерними элементами.

Итак, определяя:

table {
    padding: 5px;
}

Должно сработать. Вы также можете специально указать браузеру, как заполнять (или, в данном случае, не заполнять) ваши ячейки.

td {
    padding: 0px;
}

РЕДАКТИРОВАТЬ: не поддерживается IE8. Извините.

person MPelletier    schedule 17.11.2009
comment
Я нигде не видел отступы как свойство таблицы, не так ли? - person Petruza; 17.11.2009
comment
Заполнение не является свойством таблицы HTML, но может быть определено в CSS. Однако не все браузеры его поддерживают. - person MPelletier; 17.11.2009

Есть еще одна хитрость:

/* Padding on the sides of the table */
table th:first-child, .list td:first-child { padding-left: 28px; }
table th:last-child, .list td:last-child { padding-right: 28px; }

(Только что видел это на моей нынешней работе)

person Offirmo    schedule 21.04.2016

Вы можете попробовать свойство border-spacing. Это должно делать то, что вы хотите. Но вы можете захотеть увидеть этот ответ.

person Vincent Ramdhanie    schedule 17.11.2009

CSS на самом деле не позволяет делать это на уровне таблицы. Обычно я указываю cellspacing="3", когда хочу добиться этого эффекта. Очевидно, что это не решение css, так что принимайте его за то, что оно стоит.

person localshred    schedule 17.11.2009

table.foobar
{
   padding:30px; /* if border is not collapsed */
}

or 

table.foobar
{
   border-spacing:0;
}
table.foobar>tbody
{
   display:table;
   border-spacing:0; /* or other preferred */
   border:30px solid transparent; /* 30px is the "padding" */
}

Работает в Firefox, Chrome, IE11, Edge.

person 18C    schedule 09.09.2019

person    schedule
comment
Добро пожаловать в stackoverflow! Пожалуйста, объясните свой ответ. - person Rahul Vishwakarma; 25.03.2015
comment
В случае, если вам не нужно различать границу таблицы (я имею в виду, дать ей цвет), вы можете просто сделать границу прозрачной и имитировать заполнение только между границей таблицы и ее содержимым. Если вам действительно нужно различать границу таблицы, вы можете смоделировать ее, вставив таблицу в родительский DIV с другим цветом фона. Проверьте эту скрипку: jsfiddle.net/34fq0gru/1 - person Anibal Enrique Alvarez Sifonte; 31.03.2015

person    schedule
comment
На этот вопрос был дан ответ, и он был принят 7 лет назад. - person VDWWD; 11.11.2016