Поля ячейки CSS

В моем документе HTML у меня есть таблица с двумя столбцами и несколькими строками. Как увеличить пространство между первым и вторым столбцами с помощью css? Я пробовал применять "margin-right: 10px;" к каждой из ячеек с левой стороны, но без эффекта.

Ответ 1

Примените это к первому <td>:

padding-right:10px;

Пример HTML:

<table>
   <tr>
      <td style="padding-right:10px">data</td>
      <td>more data</td>
   </tr>
</table>

Ответ 2

Предупреждение: хотя padding-right может решить вашу конкретную (визуальную) проблему, это не правильный способ добавить интервал между ячейками таблицы. То, что padding-right делает для ячейки, похоже на то, что она делает для большинства других элементов: она добавляет пространство внутри ячейки. Если в ячейках нет цвета границы или фона или что-то еще, что отдает игру, это может имитировать эффект установки пространства между ячейками, но не иначе.

Как заметил кто-то, спецификации полей игнорируются для ячеек таблицы:

CSS 2.1 Спецификация - Таблицы - Визуальный макет содержимого таблицы

Внутренние элементы таблицы генерируют прямоугольные коробки с контентом и границы. У ячеек есть дополнение. Внутренние элементы таблицы не имеют поля.

Какой "правильный" способ? Если вы хотите заменить атрибут cellspacing таблицы, то border-spacingborder-collapse отключено) является заменой. Однако, если требуются "поля" для каждой ячейки, я не уверен, как это можно правильно достичь с помощью CSS. Единственный хак, о котором я могу думать, - это использовать padding, как указано выше, избегать любого стиля элементов (цвета фона, границы и т.д.) И вместо этого использовать контейнеры DIV внутри ячеек для реализации такого стиля.

Я не эксперт по CSS, поэтому я мог ошибаться в приведенном выше (что было бы здорово знать! Я тоже хотел бы использовать решение CSS для полей таблицы).

Ура!

Ответ 3

Если вы не можете использовать отступы (например, у вас есть границы в td), попробуйте

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

Ответ 4

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

table > tr > td:first-child { padding-right:10px }

И это будет ваш HTML, без CSS!:

<table><tr><td>data</td><td>more data</td></tr></table>

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

Ответ 5

Граница

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

Ответ 6

Вы можете просто сделать это:

<html>
<table>
    <tr>
        <td>one</td>
        <td width="10px"></td>
        <td>two</td>
    </tr>
</table>
</html>

Никакой CSS не требуется:) Это 10px - ваше пространство.

Ответ 7

Попробуйте padding-right. Вам не разрешено помещать margin между ячейками.

<table>
   <tr>
      <td style="padding-right: 10px;">one</td>
      <td>two</td>
   </tr>
</table>

Ответ 8

Это решение работает для td, для которого требуется как border, так и padding для стилизации.
 (Протестировано на Chrome 32, IE 11, Firefox 25)

CSS:
table {border-collapse: separate; border-spacing:0; }   /*  separate needed      */
td { display: inline-block; width: 33% }  /*  Firefox need inline-block + width  */
td { position: relative }                 /*  needed to make td move             */
td { left: 10px; }                        /*  push all 10px                      */
td:first-child { left: 0px; }             /*  move back first 10px               */
td:nth-child(3) { left: 20px; }           /*  push 3:rd another extra 10px       */

/*  to support older browsers we need a class on the td we want to push
    td.col1 { left: 0px; }
    td.col2 { left: 10px; }
    td.col3 { left: 20px; }
*/

HTML:
<table>
    <tr>
        <td class='col1'>Player</td>
        <td class='col2'>Result</td>
        <td class='col3'>Average</td>
    </tr>
</table>

Обновлено 2016

Firefox теперь поддерживает его без inline-block и набора width

table {border-collapse: separate; border-spacing:0; }
td { position: relative; padding: 5px; }
td { left: 10px; }
td:first-child { left: 0px; }
td:nth-child(3) { left: 20px; }
td { border: 1px solid gray; }


/* CSS table */
.table {display: table; }
.tr { display: table-row; }
.td { display: table-cell; }

.table { border-collapse: separate; border-spacing:0; }
.td { position: relative; padding: 5px; }
.td { left: 10px; }
.td:first-child { left: 0px; }
.td:nth-child(3) { left: 20px; }
.td { border: 1px solid gray; }
<table>
  <tr>
    <td>Player</td>
    <td>Result</td>
    <td>Average</td>
  </tr>
</table>

<div class="table">
  <div class="tr">
    <div class="td">Player</div>
    <div class="td">Result</div>
    <div class="td">Average</div>
  </div>
</div>

Ответ 9

Использование border-collapse: separate; не работает для меня, потому что мне нужна только разница между ячейками таблицы не по сторонам таблицы.

Я придумал следующее решение:

- CSS

.tableDiv{
    display: table;
}

.cellSeperator {
    display: table-cell;
    width: 20px;
}

.cell1 {
    display: table-cell;
    width: 200px;
}

.cell2 {
    display: table-cell;
    width: 50px;
}

- HTML

<div class="tableDiv">
    <div class="cell1"></div>
    <div class="cellSeperator"></div>
    <div class="cell2"></div>
</div>

Ответ 10

Вы не можете выделить отдельные столбцы в ячейке таким образом. На мой взгляд, ваш лучший вариант - добавить style='padding-left:10px' во второй столбец и применить стили во внутреннем div или элементе. Таким образом, вы можете достичь иллюзии большего пространства.

Ответ 11

Если вы контролируете ширину таблицы, вставьте остатки слева на все ячейки таблицы и вставьте отрицательный маркер слева на всю таблицу.

table {
    margin-left: -20px;
    width: 720px;
}

table td {
    padding-left: 20px;
}

Примечание. Ширина таблицы должна включать ширину прокладки/поля. Используя вышеприведенное в качестве примера, визуальная ширина таблицы будет равна 700px.

Это не лучшее решение, если вы используете границы своих ячеек таблицы.

Ответ 12

Решение

Я нашел, что лучший способ решить эту проблему - это комбинация проб и ошибок и чтение того, что было написано передо мной:

http://jsfiddle.net/MG4hD/


Как вы можете видеть, у меня есть довольно сложный материал, который продолжается... но основным игроком в том, что он выглядит хорошо:

РОДИТЕЛЬНЫЙ ЭЛЕМЕНТ (UL): пограничный коллапс: отдельный; border-spacing:.25em; margin-left: -.25em;
ДЕТСКИЕ ЭЛЕМЕНТЫ (LI): дисплей: table-cell; вертикально-выровненный: средний;

HTML

<ul>
<li><span class="large">3</span>yr</li>
<li>in<br>stall</li>
<li><span class="large">9</span>x<span class="large">5</span></li>
<li>on<br>site</li>
<li>globe</li>
<li>back<br>to hp</li>
</ul>

CSS

ul { border: none !important; border-collapse: separate; border-spacing: .25em; margin: 0 0 0 -.25em; }
li { background: #767676 !important; display: table-cell; vertical-align: middle; position: relative; border-radius: 5px 0; text-align: center; color: white; padding: 0 !important; font-size: .65em; width: 4em; height: 3em; padding: .25em !important; line-height: .9; text-transform: uppercase; }

Ответ 13

Следуя решению Cian, устанавливая границу вместо поля, я обнаружил, что вы можете установить цвет рамки прозрачным, чтобы избежать цветного соответствия фону. Работает в FF17, IE9, Chrome v23. Похоже на достойное решение, при котором вам также не нужна фактическая граница.

Ответ 14

<!DOCTYPE html>
<html>
<head>
<style>
table{
border-spacing: 16px 4px;
}

 td {
    border: 1px solid black;
}
</style>
</head>
<body>

<table style="width:100%">
  <tr>
    <td>Jill</td>
    <td>Smith</td>		
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>		
    <td>94</td>
  </tr>
  <tr>
    <td>John</td>
    <td>Doe</td>		
    <td>80</td>
  </tr>
</table>

</body>
</html>

Ответ 15

Вы можете использовать оба из них:

padding-right:10px;

padding-right:10%;

Но лучше использовать с %.

Ответ 16

Если заполнение не работает для вас, другая работа заключается в добавлении дополнительных столбцов и задании поля по ширине с помощью <colgroup>. Ни одно из дополняющих решений выше не работало для меня, поскольку я пытался дать границе ячейки сам по себе, и это то, что решило проблему в конце:

<table>
  <colgroup>
    <col>
    <col width="20px">
    <col>
  </colgroup>
  <tr>
     <td>data</td>
     <td></td>
     <td>more data</td>
   </tr>
</table>

Настройте границы ячеек таблицы, используя: nth-child, чтобы второй и третий столбцы отображались как один столбец.

table tr td:nth-child(2) { border: 1px solid black; border-right:0; }
table tr td:nth-child(3) { border: 1px solid black; border-left:0; }