Поля в CSS ячейки

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

16 ответов


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

padding-right:10px;

пример HTML:

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

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

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

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

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

каков же тогда "правильный" путь? Если вы хотите заменить значит, от стола!--3--> (С border-collapse disabled) является заменой. Однако, если для каждой ячейки требуются "поля", я не уверен, как это можно правильно достичь с помощью CSS. Единственный хак, который я могу придумать, это использовать padding как и выше, избегайте любого стиля ячеек (цвета фона, границ и т. д.) и вместо этого используйте container DIVs внутри ячеек для реализации такого стиля.

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

Ура!


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

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

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

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

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

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

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


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


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

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

CSS не требуется :) это 10px - ваше пространство.


попробовать padding-right. Тебе нельзя ставить marginмежду ячейками.

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

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

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

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

это решение работает для 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's 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>

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


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

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

table td {
    padding-left: 20px;
}

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

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


решение

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

http://jsfiddle.net/MG4hD/


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

родительский элемент (UL): border-collapse: отдельный; border-spacing:.25em; margin-left: -.25em;
ДОЧЕРНИЙ ЭЛЕМЕНТ (LI): дисплей: таблица-ячейка; вертикальное выравнивание: среднее;

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

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


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

использование заполнения не является правильным способом сделать это, это может изменить внешний вид, но это не то, что вы хотели. Это может решить вашу проблему.


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

padding-right:10px;

padding-right:10%;

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


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

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

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

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