Простір між двома рядками в таблиці?


754

Це можливо за допомогою CSS?

я намагаюся

tr.classname {
  border-spacing: 5em;
}

безрезультатно. Може я роблю щось не так?


Що таке браузер і чи можете ви надати фрагмент свого коду (html / css)?
Патрік Дежардінс

добре, я використовую ff3, оскільки я знаю, що нібито підтримує правила, але поки я шукаю виправити у ff3. Я спробував відстань і прокладку, поки що не пощастило. productlistingitem - це головна таблиця <table class = "productListingItem" border = "0" cellpadding = "10" cellpacing = "0"> <tr> <tr> <td class = "dragItem">
Марін

1
Можливо, це тому border-spacing, що це атрибут, пов’язаний із цим, tableа не tr. Спробуйте table.classname {border-spacing:5em}. Note: IE8 підтримує властивість інтервалу, якщо вказано! DOCTYPE.
Varun Natraaj

Я використовую висоту лінії, коли немає меж.
Лія

Чи відповідає це на ваше запитання? CSS: як створити проміжок між рядками в таблиці?
alexalejandroem

Відповіді:


523

Потрібно використовувати набивання на своїх tdелементах. Щось подібне повинно зробити трюк. Звичайно, ви можете отримати той же результат, використовуючи верхню підкладку замість нижньої підкладки.

У наведеному нижче коді CSS знак «більший за» означає, що накладка застосовується лише до tdелементів, що спрямовують дітей до trелементів класу spaceUnder. Це дасть можливість використовувати вкладені таблиці. (Стільниці C і D у прикладі коду.) Я не надто впевнений у підтримці браузера для прямого дочірнього селектора (думаю, що IE 6), але він не повинен порушувати код у будь-яких сучасних браузерах.

/* Apply padding to td elements that are direct children of the tr elements with class spaceUnder. */

tr.spaceUnder>td {
  padding-bottom: 1em;
}
<table>
  <tbody>
    <tr>
      <td>A</td>
      <td>B</td>
    </tr>
    <tr class="spaceUnder">
      <td>C</td>
      <td>D</td>
    </tr>
    <tr>
      <td>E</td>
      <td>F</td>
    </tr>
  </tbody>
</table>

Це має виглядати приблизно так:

+---+---+
| A | B |
+---+---+
| C | D |
|   |   |
+---+---+
| E | F |
+---+---+

1
code.google.com/p/ie7-js додає підтримку добірці дітей, тобто 5,5, тобто 6, тобто 7
Ентоні Хетчкінс

403
За винятком цього, проблема взагалі не вирішує, коли рядки мають колір тла, і ви дійсно хочете WHITESPACE між рядками.
Саймон Схід

6
@Simon: Пробіл зазвичай стосується порожнього простору, а не конкретно білого кольору. Якщо ви хочете розфарбувати простір між рядками, ви можете спробувати з властивістю CSS <code> border-bottom </code> на елементах td. Це, ймовірно, візуалізується правильно лише з 1px рамкою. Ще одним, але не таким елегантним рішенням буде використання порожнього рядка.
Ян Агаард

18
@Jan: Так, саме моя думка ... Встановити прозорий порожній простір між рядками досить складно . Ваше рішення допомагає в деяких випадках, але не вирішує цю проблему. Вставка порожнього рядка таблиці може спрацювати, але це непомітно. bottom-borderНабір прозорих також можуть працювати, але я не знаю , як крос-браузер , сумісний це.
Саймон Схід


387

У батьківській таблиці спробуйте встановити

border-collapse:separate; 
border-spacing:5em;

Плюс декларацію про кордону, і подивіться, чи досягне це бажаний ефект Але будьте обережні, що IE не підтримує модель "розділених кордонів".


5
Так, цей метод був би ідеальним, за винятком того, що IE 7 не підтримує його. Інформацію про підтримку браузера див .: quirksmode.org/css/tables.html
Саймон Схід,

7
Крім того, він контролює пробіл у всіх рядках таблиці, ви не можете встановлювати міжрядкові інтервали для окремих рядків (саме те, чого може хотіти ОП).
Саймон Схід

1
Це суперечить Chrome і Firefox. Якщо у вас є theadі tbody, він виведе вдвічі border-spacingміж ними в Chrome (але єдиний у Firefox).
Каміло Мартін

91
Це фактична відповідь, спеціально встановлена border-spacing: 0 1emдля отримання інтервалу між лише рядками.
ігнеозавр

1
@igneosaur Я спробував виконати те, що ви сказали, але це все ще додало проміжки між усіма рядками, а не лише першими двома. Чи можете ви надати робочу jsfiddle?
користувач3281466

184

У вас є таблиця з альбомами id з будь-якими даними ... Я пропустив trs і tds

<table id="albums" cellspacing="0">       
</table>

У css:

table#albums 
{
    border-collapse:separate;
    border-spacing:0 5px;
}

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

Це не завжди потрібно фантазійним CSS, якщо добрий старий HTML може зробити цю роботу :)
luator


чи можна подати заявку лише на тр всередині "tbody"?
Джейсон

129

оскільки у мене за столом фонове зображення, підробляти його білою оббивкою не вийде. Я вирішив розмістити порожній рядок між кожним рядком вмісту:

<tr class="spacer"><td></td></tr>

потім використовуйте css, щоб надати міжряддям рядки певної висоти та прозорого фону.


3
Це, мабуть, гнучкіше, я думаю. Ви не завжди можете контролювати, коли заздалегідь вам знадобиться місце (динамічно створені сторінки).
Стефан Кендалл

10
Це мені нагадує 90-ті роки, коли підтримка CSS майже не існувала, а таблиці використовувались для більшості макетів. Я все ще даю це +1, тому що інші "відповіді" не є кращими з точки зору фактичного пробілу між рядками таблиці.
лабіринт

@labyrinth Не дуже змінилося з 90-х років. Щодо HTML, то воно просто стало набагато потужнішим і набагато бруднішим.
maaartinus

73

Від мережі розробників Mozilla :

Властивість CSS з інтервалом для кордону вказує відстань між межами сусідніх комірок (лише для моделі розділених меж). Це еквівалентно атрибуту простору клітинок у презентаційному HTML, але необов'язкове друге значення можна використовувати для встановлення різних горизонтальних та вертикальних інтервалів.

Останню частину часто наглядають. Приклад:

.your-table {
    border-collapse: separate; /* allow spacing between cell borders */
    border-spacing: 0 5px; /* NOTE: syntax is <horizontal value> <vertical value> */

ОНОВЛЕННЯ

Тепер я розумію, що ОП хоче, щоб конкретні, окремі рядки мали збільшений інтервал. Я додав налаштування з tbodyелементами, що виконує це, не руйнуючи семантики. Однак я не впевнений, чи підтримується він у всіх браузерах. Я зробив це в Chrome.

Наведений нижче приклад показує, як можна зробити так, щоб таблиця існувала окремими рядами, повною присмаком css. Також перший рядок дав більше інтервалів із tbodyналаштуванням. Сміливо користуйтесь!

Повідомлення про підтримку: IE8 +, Chrome, Firefox, Safari, Opera 4+

.spacing-table {
  font-family: 'Helvetica', 'Arial', sans-serif;
  font-size: 15px;
  border-collapse: separate;
  table-layout: fixed;
  width: 80%;
  border-spacing: 0 5px; /* this is the ultimate fix */
}
.spacing-table th {
  text-align: left;
  padding: 5px 15px;
}
.spacing-table td {
  border-width: 3px 0;
  width: 50%;
  border-color: darkred;
  border-style: solid;
  background-color: red;
  color: white;
  padding: 5px 15px;
}
.spacing-table td:first-child {
  border-left-width: 3px;
  border-radius: 5px 0 0 5px;
}
.spacing-table td:last-child {
  border-right-width: 3px;
  border-radius: 0 5px 5px 0;
}
.spacing-table thead {
  display: table;
  table-layout: fixed;
  width: 100%;
}
.spacing-table tbody {
  display: table;
  table-layout: fixed;
  width: 100%;
  border-spacing: 0 10px;
}
<table class="spacing-table">
  <thead>
    <tr>
        <th>Lead singer</th>
        <th>Band</th>
    </tr>
  </thead>
  <tbody>
    <tr>
        <td>Bono</td>
        <td>U2</td>
    </tr>
  </tbody>
  <tbody>
    <tr>
        <td>Chris Martin</td>
        <td>Coldplay</td>
    </tr>
    <tr>
        <td>Mick Jagger</td>
        <td>Rolling Stones</td>
    </tr>
    <tr>
        <td>John Lennon</td>
        <td>The Beatles</td>
    </tr>
  </tbody>
</table>


Якщо б я хотів трохи вертикального простору між двома окремими рядками, я просто додав міжрядковий рядок <tr> <td colspan = "2" style = "padding-bottom: 1em;"> </td> </tr>
Пол Тейлор

Це буде спрацьовувати, але семантично неправильно (як, наприклад, у вашому сепаративному рядку не є фактичним рядком з такими даними, як інші рядки. Це може дратувати людей, які використовують зчитувачі екрану чи інші пристрої-помічники, а також для цілей індексації та Це може не змінити величезних змін, але добре розвивати його в голові під час розробки веб-сайту :)
Justus Romijn

Це правда, якщо він насправді використовує таблицю для представлення таблиці. Якщо він просто використовує таблицю як спосіб відображення даних табличним способом, то я б стверджував, що має більше сенсу вставити рядок, щоб представити проміжок між двома елементами, а не просто додавати пробіли або до елементів td вище. або нижче рядка, оскільки те, що користувач хоче зробити, це додавати простір між двома рядками, а не збільшувати розмір елементів всередині рядка.
Пол Тейлор

53

Ви можете спробувати додати рядок розділення:

html:

<tr class="separator" />

css:

table tr.separator { height: 10px; }

7
Для IE tr без тіла не розпізнається. додайте фіктивний тег також.
Вор

Проблема полягає в тому, що в HTML5 валідатор W3C видасть помилку, кажучи "Рядок таблиці був шириною 0 стовпців, що менше, ніж кількість стовпців, встановлена ​​першим рядком".
Девід Грейсон

Приємно, я додав ще <tr>, <td> і <p> і встановив видимість p-тегу на прихований .. Працює також. :-)
Jeppe

47

Ви не можете змінити поле комірки таблиці. Але МОЖЕТЕ змінити прокладку. Змініть прокладку TD, що зробить клітинку більшою і відсуне текст убік із збільшенням прокладки. Якщо у вас є прикордонні лінії, це все одно не буде саме тим, що ви хочете.


Так, оббивка буде штовхати кордону вниз, так border-bottomі padding-bottomозначає , що кордон буде нижче відступів.
Дан Даскалеску

21

Погляньте на межу-згортання: окремий атрибут (за замовчуванням) та властивість пробігу кордонів .

По-перше, ви повинні відокремити їх за допомогою обмеження кордону , потім ви можете визначити пробіл між стовпцями та рядками з проміжком між межами .

Обидва ці властивості CSS насправді добре підтримуються у кожному веб- переглядачі .

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

table, 
table td,
table th  {border: 1px solid black;}
<table>
  <tr>
    <td>Some text - 1</td>
    <td>Some text - 1</td>
  </tr>
  <tr>
    <td>Some text - 2</td>
    <td>Some text - 2</td>
  </tr>
  <tr>
    <td>Some text - 3</td>
    <td>Some text - 3</td>
  </tr>
</table>


20

Гаразд, можна зробити

tr.classname td {background-color:red; border-bottom: 5em solid white}

Переконайтеся, що колір тла встановлений на td, а не на рядку. Це має працювати в більшості браузерів ... (Chrome, тобто & ff тестується)


Це створює дивні проблеми з вертикальним вирівнюванням, принаймні у Firefox
cjohansson

20

Вам потрібно встановити border-collapse: separate;на стіл; починається з більшості таблиць стилів за замовчуванням у веб-переглядачах border-collapse: collapse;, які викреслюють міжряддя

Крім того, інтервал між межами: йде на TD, а не на TR.

Спробуйте:

<html><head><style type="text/css">
    #ex    { border-collapse: separate; }
    #ex td { border-spacing: 1em; }
</style></head><body>
    <table id="ex"><tr><td>A</td><td>B</td></tr><tr><td>C</td><td>D</td></tr></table>
</body>

1
Межі між межами також призначені для таблиці не td
silversky

4
Дякую. Я раніше подякував вам у виправленому коментарі, але надмірний редактор, який хотів змінити мій стиль і порушив код у процесі, також видалив мою привітання. Я зараз розміщую його там, де його неможливо відредагувати.
John Haugeland

18

Ви можете використовувати висоту рядка в таблиці:

<table style="width: 400px; line-height:50px;">

Ви маєте рацію, але текст також отримає висоту рядка, що не годиться, я думаю, ви повинні побачити колега! У нього є приємне рішення
Waqas Tahir


11

Занадто пізня відповідь :)

Якщо ви застосовуєте float до trелементів, ви можете пропускати між двома рядками marginатрибут.

table tr{
float: left
width: 100%;
}

tr.classname {
margin-bottom:5px;
}

12
Це страшно. Це насправді робиться - це встановити displayвластивість blockдля рядка. Це дозволяє рядку мати поле. Вертикальне поле " Застосовується до: всіх елементів, за винятком типів відображення таблиць, крім таблиць з підписом, таблиці та вбудованої таблиці ". Оскільки table-rowце не одне з цих винятків, то це не враховує. Можливо, ви могли б досягти такого ж ефекту, виконавши, tr {display:block;}але я б насторожено використовував будь-який із цих методів у складній таблиці. Це, швидше за все, не призведе до того, що ви очікуєте.
sholsinger

Це страшно, але це спрацювало. Не в ie7, але проміжок клітинок безпосередньо в таблиці працює в ie7.
Ліко

плаваючі рядки не є хорошим рішенням. Особливо, якщо ваша сторінка більше, ніж в 2 рази, ширина рядка. додайте атрибут ширини до обох тегів
AndreaCi

11

Для створення ілюзії проміжку між рядками нанесіть на рядок колір тла, а потім створіть товсту облямівку з білим кольором, щоб створився "пробіл" :)

tr 
{
   background-color: #FFD700;
   border: 10px solid white;
}

9

Правильним способом надання інтервалу для таблиць є використання накладки на стільниці та простору, наприклад

<table cellpadding="4">

5
Це можна зробити за допомогою CSS, який я б сказав, що це "правильніше" (крім того, що він більш елегантний, переміщення стилю від розмітки до CSS економить пропускну здатність).
Каміло Мартін

2
Це не економить пропускну здатність. Я насправді використовує більше. Якщо припустити, що ви не додаєте таблицю стилів лише для цього, вам потрібно додати селектор і, можливо, ідентифікатор або ім'я до цієї таблиці. Це більше байт не менше.
majinnaibu

9

Я натрапив на це, борючись із подібним питанням. Я знайшов відповідь Варуна Натрая дуже корисною, але замість цього я скористався прозорою рамкою.

td { border: 1em solid transparent; }

Прозорі межі все ще мають ширину.


6

Працює для більшості останніх браузерів у 2015 році. Просте рішення. Це не працює для прозорості, але на відміну від відповіді Торонвена, я не можу отримати прозорий візуалізацію будь-якого розміру.

    tr {
      border-bottom:5em solid white;
    }

3

Просто помістіть divвсередину tdта встановіть наступні стилі div:

margin-bottom: 20px;
height: 40px;
float: left;
width: 100%;

2

Я усвідомлюю, що це відповідь на стару тему, і це може бути не запитуване рішення, але, хоча всі запропоновані рішення не виконували те, що мені потрібно, це рішення працювало на мене.

У мене було 2 комірки таблиці, одна з кольором фону, а інша з кольором рамки. Вищеописані рішення видаляють межу, тому клітина праворуч, здавалося б, плаває в повітрі. Рішення , яке зробило трюк повинні було замінити table, trі tdз дивами і відповідними класами: таблиця буде div id="table_replacer", тр б div class="tr_replacer"і тд буде div class="td_replacer"(змінити закривають тег для діви , а також , очевидно)

Щоб отримати рішення для моєї проблеми, CSS:

#table_replacer{display:table;}
.tr_replacer {border: 1px solid #123456;margin-bottom: 5px;}/*DO NOT USE display:table-row! It will destroy the border and the margin*/
.td_replacer{display:table-cell;}

Сподіваюся, що це комусь допоможе.


Імхо, це рішення еквівалентно використанню звичайної таблиці, tr, шаблону td і стилю tr {display: block;}, який я спробував. Проблема: таблиця виглядає інакше, оскільки елементи td не надаються на ширину таблиці, а пливуть зліва в межах tr. Значить, елементи td усіх рядків більше не вирівнюються вертикально.
Андреас Стенкевіц

0

Ви можете заповнити елементи <td /> елементами <div /> та застосувати будь-які поля до тих дівок, які вам подобаються. Для візуального простору між рядками можна використовувати повторюване фонове зображення на елементі <tr />. (Це рішення, яке я щойно використовував сьогодні, і, здається, працює як в IE6, так і в FireFox 3, хоча я більше не перевіряв це.)

Крім того, якщо ви проти змінити код вашого сервера, щоб помістити <div /> s всередину <td /> s, ви можете використовувати jQuery (або щось подібне) для динамічного загортання вмісту <td /> у <div / >, що дозволяє застосувати CSS за бажанням.


0

Або просто додайте пробіл з висотою поля між рядками, які ви хочете додати між проміжками


0

Ось просте і елегантне рішення з кількома застереженнями:

  • Насправді ви не можете зробити прогалини прозорими, вам потрібно надати їм певний колір.
  • Ви не можете заокруглювати кути меж вище та нижче прогалин
  • Вам потрібно знати прокладки та межі комірок вашої таблиці

Зважаючи на це, спробуйте це:

td {padding:5px 8px;border:2px solid blue;background:#E0E0E0}  /* lets say the cells all have this padding and border, and the gaps should be white */

tr.gapbefore td {overflow:visible}
tr.gapbefore td::before,
tr.gapbefore th::before
{
  content:"";
  display:block;
  position:relative;
  z-index:1;
  width:auto;
  height:0;
  padding:0;
  margin:-5px -10px 5px;  /* 5px = cell top padding, 10px = (cell side padding)+(cell side border width)+(table side border width) */
  border-top:16px solid white;  /* the size & color of the gap you want */
  border-bottom:2px solid blue; /* this replaces the cell's top border, so should be the same as that. DOUBLE IT if using border-collapse:separate */
}

Те, що ви насправді робите, - це вклеїти прямокутний ::beforeблок у верхню частину всіх комірок у рядку, який ви хочете, щоб передував проміжок. Ці блоки трохи стирчать з комірок, щоб перекривати існуючі межі, приховуючи їх. Ці блоки є лише верхньою і нижньою облямівкою, прошиті разом: Верхня межа утворює проміжок, а нижня межа створює зовнішній вигляд початкової верхньої межі комірок.

Зауважте, що якщо у вас є межа навколо самого столу, а також комірок, вам потрібно буде додатково збільшити горизонтальний -ve межа ваших "блоків". Отже, для межі таблиці 4px ви замість цього використовуєте:

margin:-5px -12px 5px;     /* 14px = original 10px + 2px for 'uncollapsed' part of table border */

І якщо ваша таблиця використовує border-collapse:separateзамість border-collapse:collapse, тоді вам потрібно (a) використовувати повну ширину рамки таблиці:

margin:-5px -14px 5px;     /* 14px = original 10px + 4px full width of table border */

... а також (b) замінити подвійну ширину межі, яка тепер повинна бути нижче проміжку:

border-bottom:4px solid blue;     /* i.e. 4px = cell top border + previous row's bottom border */

Техніка легко пристосовується до версії .gapafter, якщо вам зручніше, або до створення вертикальних (стовпчикових) проміжків замість пропусків рядків.

Ось коден, де ви можете побачити його в дії: https://codepen.io/anon/pen/agqPpW


-1

Тут це працює безперебійно:

#myOwnTable td { padding: 6px 0 6px 0;}

Я припускаю, що ви могли б розробити більш дрібнозернистий макет, вказавши, який тд буде потрібен.


-5

робимо це, як показано вище ...

table tr{ float: left width: 100%; }  tr.classname { margin-bottom:5px; } 

видаляє вертикальне вирівнювання стовпця, тому будьте обережні, як ви його використовуєте


-17

Ти намагався:

tr.classname { margin-bottom:5em; }

Крім того, кожен td може бути також відрегульований:

td.classname { margin-bottom:5em; }

або

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

Це насправді працює? У мене є div.el { display: table-row; margin: 10px; }, і маржа нічого не робить. Я знаю, що це трохи інакше, ніж фактична таблиця, але вона не повинна бути ...
bradlis7

20
Рядки / комірки таблиці не мають полів.
Еспен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.