CSS: как создать промежуток между строками в таблице?


94

Это означает, что итоговая таблица будет выглядеть менее так:

[=== ROW ===]
[=== ROW ===]
[=== ROW ===]
[=== ROW ===]

... и так далее:

[=== ROW ===]

[=== ROW ===]

[=== ROW ===]

[=== ROW ===]

Я пробовал добавить

margin-bottom:1em;

к td и tr, но ничего не получил. Любые идеи?


2
Почему не использовать пространство ячеек и заполнение ячеек?
adatapost,

1
Cellspacing также даст интервал между столбцами.
rahul

4
Cellspacing и cellpadding недопустимы (X) HTML. Вы не должны их использовать.
freiksenet

8
@freiksenet: Вы ошибаетесь. Это совершенно правильный строгий HTML4 ( w3.org/TR/html401/struct/tables.html#h-11.2.1 ), XHTML1 ( w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ) и даже XHTML1. .1 ( w3.org/MarkUp/DTD/xhtml-table-1.mod ).
mercator

Ответы:


217

Все, что тебе нужно:

table {
    border-collapse: separate;
    border-spacing: 0 1em;
}

Это предполагает, что вам нужен вертикальный зазор 1em, а не горизонтальный. Если вы делаете это, вам, вероятно, также следует подумать об управлении высотой строки.

Довольно странно, что некоторые из ответов, которые дали люди, включают границу коллапс: коллапс, эффект которого прямо противоположен тому, о чем задан вопрос.


да ладно, я пытался сделать конкретный столбец с более широким интервалом, поэтому не подумал применить его к таблице
Джонатан.

4
Это решение не позволяет выборочно применять интервалы к определенным рядам.
Flimm

15
Вопрос не требовал этого.
Джон Хогеланд

Это хорошая идея, но чтобы заполнить верхний пробел в первой строке, мне пришлось найти обходной путь, который, я думаю, не является стандартным, но работает. Предоставление thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ

4
могу я сказать, что люблю тебя? Боже мой. Вы только что спасли мою $
NikosKeyz

94
table {
    border-collapse: collapse;
}

td {
    padding-top: .5em;
    padding-bottom: .5em;
}

Ячейки ни на что не отреагируют, если вы сначала не установите border-collapse. Вы также можете добавить границы к элементам TR после того, как они будут установлены (среди прочего).

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


Вы это тестировали? Кажется, что у td может быть padding с коллапсом или без него. Границы работают с развалом, но не на IE.
Коби

Это сработало. Раздражает, что поля не работают, но это не имеет значения в данном случае. Спасибо.
MGOwen

30
Это действительно плохой подход. Вы модифицируете поле ячеек, чтобы расположить ячейки, а не просто позиционировать ячейки, объединяя ячейки вместе, потому что вы хотите, чтобы они были разделены. Когда клеткам нужен фон, вы облажались. Правильный подход - это разделение границ, а не коллапс границ, использование разделения границ для определения, как вы знаете, разделения границ.
Джон Хогеланд

1
Это почти самая первая часть CSS2, которая была реализована, потому что в браузерах уже есть пробелы в таблицах, реализованные для версии HTML, которую все использовали для верстки с точностью до пикселей. Да, я уверен. :)
Джон Хогеланд

1
Это один из тех странных уголков CSS, о которых не знает никто, кроме тех, кто читал спецификацию. (Их на удивление много. Точно так же float никогда не следует использовать на практике.)
John Haugeland

8

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


Почему голос против? Другие ответы проблематичны: ответ rpflo требует, чтобы вы использовали border-collapse и расширяли заполнение ячеек, заставляя ячейки казаться больше, а не создавать промежутки между ними. Ответ Джона Хогеланда не позволяет выборочно применять интервал к определенным строкам. Я мог бы продолжить, но этот ответ - один из вариантов, который работал для моего варианта использования, когда ни один из других ответов не работал.
Flimm

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

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

@MGOwen Не могли бы вы назвать инструменты обеспечения доступности, которые не работают в этом сценарии, и как они не работают? Сейчас я скептически отношусь к советам по доступности, в которых не упоминаются детали, есть много плохих советов по доступности, которые на самом деле никому не помогают (например, рекомендации по структуре документа для HTML 5 были неверными , инструменты обеспечения доступности не работают так, как люди говорят, что они работают).
Flimm

4

Если у вас нет границ или есть границы и вам нужен интервал внутри ячеек, вы можете использовать padding, или line-height. Насколько мне известно, маржа не влияет на ячейки и строки.
Свойство CSS для интервала между ячейками:border-spacing , но оно не работает в IE6 / 7 (поэтому вы можете использовать его в зависимости от вашей аудитории).

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

/ * таблицы все еще нуждаются cellspacing="0"в разметке * /


2

Вот способ (я думал, что это невозможно):

Сначала задайте для таблицы только вертикальный интервал границ (например, 5 пикселей) и установите для него горизонтальный интервал границы равным 0. Затем вы должны задать правильные границы для каждой ячейки строки. Например, самая правая ячейка в каждой строке должна иметь границу сверху, снизу и справа. Крайние левые ячейки должны иметь границы сверху, снизу и слева. И другие ячейки между этими двумя должны иметь границу только сверху и снизу. Как этот пример:

<table style="border-spacing:0 5px; color:black">
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
</table>

1

На мой взгляд, самый простой способ - добавить к тегу отступы.

td {
 padding: 10px 0
}

Надеюсь, что это поможет вам! Ура!


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

1

Просто можешь использовать padding-topи padding-bottomна tdэлементе.

Единица может что угодно из этого списка:

введите описание изображения здесь

Демо-код:

td
{
  padding-top: 10px;
  padding-bottom: 10px;
}
<table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  <tr>
    <td>Peter</td>
    <td>Griffin</td>
  </tr>
  <tr>
    <td>Lois</td>
    <td>Griffin</td>
  </tr>
</table>


0

отступ в TD работает, если вы хотите, чтобы пространство имело тот же цвет фона, что и td

в моем случае требовалось пустое пространство между строкой заголовка и всем, что было над ней

применив этот стиль к одной ячейке, я смог получить желаемое разделение. Не было необходимости добавлять его ко всем ячейкам ... Возможно, не САМЫЙ элегантный, но, возможно, более элегантный, чем строки-разделители.

<td colspan="10"> 
    <div class="HeaderRow" 
         style="margin-top:10px;">
            <%# Eval("VendorName")%>
     </div>
</td>  

-1

Если вы придерживаетесь дизайна с использованием таблиц, лучше всего будет дать пустую строку без содержимого и с указанной высотой между каждой строкой в ​​таблице.

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


1
По-прежнему есть веские причины использовать таблицы (например, табличные данные). Вы правы, пустые строки - это, конечно, глупый путь: P Но есть решение, граница-коллапс.
Райан Флоренс,

-1

Вы также можете просто изменить высоту каждой строки с помощью CSS.

<head>
 <style>
 tr {
   height:40px;
 }
</style>
</head>

<body>
<table>

<tr> <td>One</td> <td>Two</td> </tr>
<tr> <td>Three</td> <td>Four</td> </tr>
<tr> <td>Five</td> <td>Six</td> </tr>

</table>
</body>

Вы также можете изменить высоту <td>элемента, это должно дать вам тот же результат.


-1

Создайте еще один <tr>чуть ниже и добавьте немного места или высоты к содержимому<td>

введите описание изображения здесь

Например, проверить скрипку

https://jsfiddle.net/jd_dev777/wx63norf/9/


Это считается плохой практикой. Одна из причин заключается в том, что инструменты (такие как программы чтения для пользователей с ограниченными возможностями) ожидают, что строки таблицы будут строками таблицы, и будут экспортировать / читать / интерпретировать ваши «поддельные» строки, смешанные с настоящими. См. Первый раз, когда такой же ответ был дан в 2014 г., выше.
MGOwen

1
@MGOwen спасибо за ваше предложение. полностью согласен
Jaydeep Chauhan

-4

Добавьте следующее правило в tr, и оно должно работать

float: left

Образец (откройте его в IE9 вне курса :)): http://jsfiddle.net/zshmN/

РЕДАКТИРОВАТЬ: это не законное или правильное решение, как указывали многие, но если у вас нет выбора и вам что-то нужно, это будет работать в IE9.

Так что всем, кто голосует, дайте нам знать и правильное решение.


3
Такой подход предотвращает автоматическое выравнивание столбцов, когда ячейки содержат данные с разными размерами - разметка таблицы практически бессмысленна. В приведенных примерах он работает достаточно хорошо, но не рекомендуется. Измените текст ячейки, чтобы понять, что я имею в виду.
Verism

Привет, @verism, извини, но я тебя не понял. Вы можете объяснить это поподробнее? Или, если вы можете предоставить скрипку, где этот метод не работает, поскольку я широко использовал этот метод и хотел бы позаботиться о сценариях, в которых он не работает.
Сандип Чоудхари

Нет четкого разграничения столбцов; Это означает, что табличные данные теряют свою визуальную структуру и их становится труднее читать.jsfiddle.net/verism/zshmN/5
веризм

@verism да, это одна проблема, но мы можем определить столбцы с фиксированной шириной. Я знаю, что это не очень хорошее решение, но я не нашел другого решения, которое работало бы в IE9
Сандип Чоудхари

1
Строки плавающей таблицы недопустимы в соответствии со спецификацией CSS. Раздел 17 CSS2 требует, чтобы элементы display: table-row находились внутри элементов display: table-row-group, -header-group или -footer-group. Однако алгоритм с плавающей запятой согласно разделу 9 вводит анонимный родительский блок. Это означает, что строка таблицы больше не имеет допустимого родительского макета, и браузер догадывается, что делать. Это совершенно неверно.
Джон Хогеланд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.