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


94

Це означає, що результуюча таблиця буде виглядати менш так:

[=== РЯДОК ===]
[=== РЯДОК ===]
[=== РЯДОК ===]
[=== РЯДОК ===]

... і більше подібного:

[=== РЯДОК ===]

[=== РЯДОК ===]

[=== РЯДОК ===]

[=== РЯДОК ===]

Я спробував додати

margin-bottom:1em;

як td, так і tr, але нічого не отримав. Будь-які ідеї?


2
Чому б не розподілити клітинки та не заповнити їх?
adatapost

1
Клітинний інтервал також дасть інтервал між стовпцями.
rahul

4
Розподіл клітин та padpad не є дійсним (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

Відповіді:


214

Все, що вам потрібно:

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

Це передбачає, що ви хочете вертикальний зазор 1em, а не горизонтальний зазор. Якщо ви робите це, вам, мабуть, слід також поглянути на контроль висоти рядка.

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


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

4
Це рішення не дозволяє вибірково застосовувати інтервал до певних рядків.
Flimm

15
Питання цього не вимагало.
John Haugeland

Це гарна ідея, але, щоб заповнити верхній пробіл першого ряду, мені довелося дійти до обхідного шляху, який, як я думаю, не є стандартним, але працює. Надання thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ

3
Чи можу я сказати, що люблю тебе? Боже мій. ти щойно врятував мій $$
NikosKeyz

93
table {
    border-collapse: collapse;
}

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

Клітинки ні на що не реагуватимуть, якщо спочатку ви не встановите обмеження кордону. Ви також можете додати межі до елементів TR після встановлення (крім іншого).

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


Ви це перевірили? Здається, у td можуть бути відступи з або без згортання. Кордони працюють із згортанням, але не на IE.
Кобі

Це спрацювало. Прикро, що поля не працюють, але в цьому випадку це не має значення. Дякую.
MGOwen

30
Це справді поганий підхід. Ви модифікуєте поле комірок для позиціонування комірок, а не просто для позиціонування комірок, шляхом злиття комірок між собою, оскільки ви хочете, щоб вони були розділені. Друге, що клітинам потрібні фони, ти збився. Правильним підходом є розділення кордону, а не руйнування кордону, використання розділення кордону для визначення, ви знаєте, поділу кордону.
Джон Хаугленд

1
Це чи не найперший шматок CSS2, який був впроваджений, оскільки браузери вже мали прогалини таблиць для HTML-версії, яку всі звикли використовувати для точного розміщення пікселів. Так, я впевнений. :)
Джон Хаугленд

1
Це один із тих дивних куточків CSS, про який не знає ніхто, крім людей, які прочитали специфікацію. (Їх напрочуд велика кількість. Подібним чином поплавок в основному ніколи не повинен використовуватися так, як це використовується на практиці.)
Джон Хаугленд

7

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


Чому голос проти? Інші відповіді є проблематичними: відповідь rpflo вимагає скористатися функцією розгортання меж та розширити заповнення комірок, роблячи комірки більшими, а не створюючи інтервал між ними. Відповідь Джона Хаугленда не дозволяє вибірково застосовувати інтервал до певних рядків. Я міг би продовжувати, але ця відповідь є одним із варіантів, який працював для мого випадку використання, коли жодна з інших відповідей не робила.
Flimm

2
Підхід анонімного користувача, що проголосував проти встановлення висоти окремих рядків за допомогою CSS, значно перевершує додавання фіктивного вмісту до таблиці, імовірно, що вам потрібно керувати окремими рядками, не про що йшлося в цьому питанні.
John Haugeland

Фальшиві рядки також плутають інструменти, які передбачають, що рядки таблиці є рядками таблиці (наприклад, важливі інструменти доступності для інвалідів та загальні плагіни для експорту / сортування / переформатування / тощо). Є багато причин використовувати стилі для управління стилем, а не засовувати підроблені речі, як загальне правило. Докладніше про семантичну розмітку.
MGOwen

@MGOwen Не могли б ви назвати інструменти доступності, які зазнали б невдачі за цим сценарієм, і як вони зазнали б невдачі? Зараз я скептично ставлюсь до порад щодо доступності, які не згадують особливостей, там є багато поганих порад щодо доступності, які насправді нікому не допомагають (наприклад, рекомендації щодо конспекту документа для HTML 5 були неправильними , інструменти доступності не працюють так, як люди кажуть, що працюють).
Флімм

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
}

Сподіваюся, це допоможе вам! Вітайте!


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

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, вибачте, але я не зрозумів вашої думки. Чи можете ви пояснити це трохи більше? Або якщо ви можете надати скрипку, коли цей метод не вдається, оскільки я широко використовував цей метод і хотів би подбати про сценарії, коли він не вдається.
Сандіп Чудхарі,

Чіткого розмежування стовпців немає; що означає, що табличні дані втрачають свою візуальну структуру і стають важчими для читання. jsfiddle.net/verism/zshmN/5
веризм

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

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