Встановити стільникову панель та простір клітинок у CSS?


3316

У таблиці HTML, cellpaddingі cellspacingможна встановити так:

<table cellspacing="1" cellpadding="1">

Як це можна зробити за допомогою CSS?


6
Просто загальна пропозиція, перевірте, чи ваш style.css "скидає" на ваші таблиці, перш ніж спробувати ці рішення. Приклад: Якщо у вас не встановлені таблиці, width:autoвони border-collapseможуть не працювати, як очікувалося.
PJ Brunet

1
Використовуйте міжряддя на столі та набивки на td.
Анубхав

Відповіді:


3554

Основи

Для управління "стільниковими панелями" в CSS ви можете просто використовувати paddingна комірках таблиці. Напр. Для 10px "стільникового":

td { 
    padding: 10px;
}

Для "простору клітинок" ви можете застосувати border-spacingвластивість CSS до таблиці. Наприклад, 10px "простору клітинок":

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

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

Проблеми в IE <= 7

Це буде працювати майже у всіх популярних браузерах, за винятком Internet Explorer через Internet Explorer 7, де вам майже не пощастило. Я кажу "майже", оскільки ці браузери все ще підтримують border-collapseвластивість, яка об'єднує межі суміжних комірок таблиці. Якщо ви намагаєтесь усунути проміжок клітинок (тобто cellspacing="0"), то це border-collapse:collapseповинно мати той самий ефект: між клітинками таблиці немає місця. Ця підтримка є помилковою, оскільки не перекриває існуючий cellspacingатрибут HTML на елементі таблиці.

Якщо коротко: для браузерів, які не переглядають Internet Explorer 5-7, border-spacingви обробляєте вас. Для Internet Explorer, якщо ваша ситуація є правильною (ви хочете, щоб у просторі 0 клітинок і у вашій таблиці вже не було визначено), ви можете використовувати border-collapse:collapse.

table { 
    border-spacing: 0;
    border-collapse: collapse;
}

Примітка. Щоб отримати чудовий огляд властивостей CSS, які можна застосувати до таблиць і для яких браузерів, див. Цю фантастичну сторінку Quirksmode .


27
cellpadding = "0" все ще може змінити Chrome 13.0.782.215, навіть якщо до таблиці застосовано обмеження кордону: колапс та інтервал між межами.
Уїтніленд

7
@LeeWhitney потрібно встановити padding: 0 на клітинках таблиці.
Мартін Шердінг-Томсен

7
Це трохи поза темою, але атрибути стільникового зв'язку та керування клітинками видаляються в HTML5, тому CSS - єдиний шлях до цього часу.
Ignas2526

12
Усім привіт. Я оновив відповідь на ясність, включаючи розділ про накладення стільникових блоків, який, на мою думку, був очевидним (просто використовуйте "padding"). Сподіваюся, зараз це корисніше.
Ерік Нгуен

4
Правда, @vapcguy, у будь-якій з нескінченно змінних інших ситуацій, в яких ти можеш створювати таблицю, потрібно буде визначити більш конкретні селектори. Вищезазначені позначені як приклади.
Ерік Нгуен

942

За замовчуванням

Поведінка браузера за замовчуванням еквівалентна:

table {border-collapse: collapse;}
td    {padding: 0px;}

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

Стільниковий наклад

Встановлює кількість простору між вмістом клітини та клітинною стінкою

table {border-collapse: collapse;}
td    {padding: 6px;}

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

Розміщення клітин

Контролює простір між клітинками таблиці

table {border-spacing: 2px;}
td    {padding: 0px;}

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

І те й інше

table {border-spacing: 2px;}
td    {padding: 6px;}

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

Обидва (спеціальні)

table {border-spacing: 8px 2px;}
td    {padding: 6px;}

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

Примітка: Якщо параметр border-spacingвстановлений, це вказує border-collapseвластивість таблиці separate.

Спробуйте самі!

Тут ви можете знайти старий HTML-спосіб досягнення цього.


1
Як зникає інтервал навколо столу? Коли я встановлюю "інтервал між межами: 8px 12px, він додає пробіл не просто між, а між рамкою таблиці та зовнішніми клітинками! Але це не зображено на зображеннях тут, вони заливаються внизу",
Kaz

1
@ 2astalavista І, на жаль, якщо хтось хоче, щоб ефект зовнішнього інтервалу був видалений, він не працює таким чином з цими атрибутами CSS.
Каз

@Kaz Можливо, вам потрібно буде використовувати негативний запас, щоб приховати цю набридливу частину.

2
Прокладка за замовчуванням на TD зазвичай становить 1 пікс., А не 0
січня M

341
table
{
    border-collapse: collapse; /* 'cellspacing' equivalent */
}

table td, table th
{
    padding: 0; /* 'cellpadding' equivalent */
}

2
Це насправді єдине, що мені вдалося взяти на роботу для мене, хоча я застосував інформацію до ідентифікатора, щоб уникнути надто загальної інформації.
Kzqai

20
Це cellspacing=0еквівалент. Еквівалент для cellspacing=1абсолютно інший. Дивіться прийняту відповідь.
TRiG

3
Не слід table tdі table thпросто бути tdі thвідповідно? Це працює в будь-якому випадку, але менший селектор означає трохи швидше відповідність
Коул Джонсон

1
@Cole На самом деле, я думаю , що це повинно бути table > tr > tdі table > tr > th. Це майже так само швидко, як trі th, і він гарантовано працює, якщо у вас є вкладена таблиця. Just my 2c
leviathanbadger

@ aboveyou00, але чи tableпотрібен селектор? IIRC, a <td>є недійсним, якщо тільки в a <tr>.
Коул Джонсон

114

Встановлення поля на стільники таблиці насправді не надає жодного ефекту, наскільки я знаю. Справжній еквівалент CSS cellspacingє border-spacing- але він не працює в Internet Explorer.

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


47
У сучасну епоху ця реальність підходить до N-го ступеня.
Джон К

7
Це майже правильно, але border-collapseпрацює лише в IE 5-7, якщо в таблиці вже не cellspacingвизначений атрибут. Я написав вичерпну відповідь, яка об'єднує всі правильні частини інших відповідей на цій сторінці, якщо це корисно.
Ерік Нгуен

Якщо чесно, хто переймається Internet Explorer? Кожен, хто користується ним, повинен знати, що зламані веб-сайти є їхньою виною - за використання такого неякісного браузера. Веб-сайти не повинні мати справу з цим. Нехай Internet Explorer загубиться. Забудьте про підтримку. Нам це не потрібно, і це болі, щоб розвинутись.

99

Цей хак працює для Internet Explorer 6 і новіших версій, Google Chrome , Firefox та Opera :

table {
    border-collapse: separate;
    border-spacing: 10px; /* cellspacing */
    *border-collapse: expression('separate', cellSpacing = '10px');
}

table td, table th {
    padding: 10px; /* cellpadding */
}

*Декларація для Internet Explorer 6 і 7, і інші браузери будуть правильно ігнорувати його.

expression('separate', cellSpacing = '10px')повертається 'separate', але обидва твердження запускаються, оскільки в JavaScript ви можете передати більше аргументів, ніж очікувалося, і всі вони будуть оцінені.


для тих , хто намагається реагують повідомлення електронної пошти, відзначають , що * не визнаних перспективи 2007+ (використовує слово як роблять двигун) campaignmonitor.com/css
ptim

71

Для тих, хто хоче ненульове значення простору стільника, для мене працював наступний CSS, але я можу протестувати його лише у Firefox.

Детальні відомості про сумісність див. У посиланні Quirksmode, розміщеному в іншому місці . Здається, це може не працювати зі старими версіями Internet Explorer.

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


49

Крім того, якщо ви хочете cellspacing="0", не забудьте додати border-collapse: collapseу свою tableтаблицю стилів.


43

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

Отже, CSS буде,

div.cellwidener {
  margin: 0px 15px 0px 15px;
}
td.tight {
  padding: 0px;
}
<table border="0">
  <tr>
    <td class="tight">
      <div class="cellwidener">My content</div>
    </td>
  </tr>
</table>

Так, це клопоти. Так, це працює з Internet Explorer. Насправді я тестував це лише в Internet Explorer, тому що це все, що ми можемо використовувати на роботі.


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

23

Просто використовуйте border-collapse: collapseдля свого столу, і paddingдля thабо td.


21

Цей стиль для повного скидання для таблиць - CELLPADDING , CELLSPACING і кордонів .

Я мав такий стиль у своєму файлі reset.css:

table{
    border:0;          /* Replace border */
    border-spacing: 0px; /* Replace cellspacing */
    border-collapse: collapse; /* Patch for Internet Explorer 6 and Internet Explorer 7 */
}
table td{
    padding: 0px; /* Replace cellpadding */
}

20

TBH. Для всіх роздумів про CSS ви можете просто використовувати, cellpadding="0" cellspacing="0"оскільки вони не застаріли ...

Хто-небудь інший, що пропонує націнки на <td>'явно, цього не пробував.


35
Вони фактично застаріли в html5.
Kzqai


17

Просто використовуйте правила накладки CSS з даними таблиці:

td { 
    padding: 20px;
}

А для міжряддя:

table { 
    border-spacing: 1px;
    border-collapse: collapse;
}

Однак це може створити проблеми в старій версії браузерів, таких як Internet Explorer, через різну реалізацію моделі коробки.


15

Як я розумію з класифікацій W3C, це те, що <table>s призначені для відображення даних "лише".

Виходячи з цього, мені було набагато простіше створити <div>фони та все це і мати таблицю з плаваючими над ним даними за допомогою position: absolute;та background: transparent;...

Він працює на Chrome, Internet Explorer (6 і пізніших версій) та Mozilla Firefox (2 та новіших версій).

Використовується Маржа (або маються на увазі в будь-якому випадку) , щоб створити розпірку між контейнерними елементами, як <table>, <div>і <form>, що не <tr>, <td>, <span>або <input>. Використання його для чого-небудь, крім елементів контейнерів, дозволить вам зайнятися налаштуванням вашого веб-сайту для майбутніх оновлень веб-переглядача.


7
ОП ніколи не заявляв, для чого він використовує таблицю.
Альфабраво


12

Ви можете легко встановити прокладки всередині комірок таблиці, використовуючи властивість CSS. Це дійсний спосіб отримати той же ефект, що і атрибут стільникової таблиці.

table,
th,
td {
  border: 1px solid #666;
}

table th,
table td {
  padding: 10px;
  /* Apply cell padding */
}
<!DOCTYPE html>
<html lang="en">
<head>

  <meta charset="utf-8">
  <title>Set Cellpadding in CSS</title>

</head>

<body>

  <table>
    <thead>
      <tr>
        <th>Row</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>Clark</td>
        <td>Kent</td>
        <td>clarkkent@mail.com</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>peterparker@mail.com</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>johnrambo@mail.com</td>
      </tr>
    </tbody>
  </table>

</body>
</html>

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

table {
  border-collapse: separate;
  border-spacing: 10px;
  /* Apply cell spacing */
}

table,
th,
td {
  border: 1px solid #666;
}

table th,
table td {
  padding: 5px;
  /* Apply cell padding */
}
<!DOCTYPE html>
<html lang="en">
<head>

  <meta charset="utf-8">
  <title>Set Cellspacing in CSS</title>

</head>

<body>

  <table>
    <thead>
      <tr>
        <th>Row</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>Clark</td>
        <td>Kent</td>
        <td>clarkkent@mail.com</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>peterparker@mail.com</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>johnrambo@mail.com</td>
      </tr>
    </tbody>
  </table>

</body>
</html>


10

Спробуйте це:

table {
    border-collapse: separate;
    border-spacing: 10px;
}
table td, table th {
    padding: 10px;
}

Або спробуйте це:

table {
    border-collapse: collapse;
}
table td, table th {
    padding: 10px;
}

9

Я використовував !importantпісля краху кордону, як

border-collapse: collapse !important;

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


9
!importantзнадобиться лише для зміни інших налаштувань CSS у складній ситуації (і навіть тоді в основному неправильному підході).
Jukka K. Korpela

1
Також повторення відповіді Дана просто додає те !important, що могло бути включене як коментар замість іншої відповіді.
vapcguy

8
<table>
    <tr>
        <th>Col 1</th>
        <th>Col 2</th>
        <th>Col 3</th>
    </tr>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
</table>

cell-paddingможе бути заданий paddingу CSS, тоді як cell-spacingможе бути встановлений, встановивши border-spacingтаблицю.

table {
    border-spacing: 10px;
}
td {
    padding: 10px;
}

Скрипка .


6
td {
    padding: npx; /* For cellpadding */
    margin: npx; /* For cellspacing */
    border-collapse: collapse; /* For showing borders in a better shape. */
}

Якщо marginне працює, спробуйте набір displayз trдо , blockа потім маржа буде працювати.


5

Для таблиць простір клітинок та стільникове поле застаріли в HTML 5.

Тепер для простору клітинок вам потрібно використовувати інтервал між межами. А для блокування стільникового зв'язку вам доведеться використовувати межу-колапс.

І переконайтеся, що ви не використовуєте це у своєму коді HTML5. Завжди намагайтеся використовувати ці значення у файлі CSS 3.



4

У таблиці HTML, cellpaddingі cellspacingможна встановити так:

Для набивання клітин :

Просто зателефонуйте до простої td/thклітинки padding.

Приклад:

table {
    border-collapse: collapse;
}

td {
  border: 1px solid red;
  padding: 10px;
}

Для інтервалів клітин

Просто зателефонуйте просто table border-spacing

Приклад:

/********* Cell-Spacing   ********/
table {
    border-spacing: 10px;
    border-collapse: separate;
}

td {
  border: 1px solid red;
}

Більше стилю таблиці за посиланням джерела CSS тут ви отримуєте більше стилю таблиці від CSS .


3

Ви можете просто зробити щось подібне у своєму CSS, використовуючи border-spacingта padding:

table {
  border-collapse: collapse;
}

td, th {
  padding: 1em;
  border: 1px solid blue;
}
<table>
  <tr>
    <th>head_1</th>
    <th>head_2</th>
    <th>head_3</th>
    <th>head_4</th>
  </tr>
  <tr>
    <td>txt_1</td>
    <td>txt_2</td>
    <td>txt_3</td>
    <td>txt_4</td>
  </tr>
</table>


При згортанні кордонів правило проходження кордонів ігнорується.
dgrogan

0

Як щодо додавання стилю безпосередньо до самої таблиці? Це замість використання tableу вашому CSS, який є BAD- підходом, якщо на вашій сторінці є кілька таблиць:

<table style="border-collapse: separate;border-spacing: 2px;">
    <tr>
        <td style="padding: 4px 4px;">Some Text</td>
    </tr>
</table>

2
Введення "стилю" у тег таблиці гірше, ніж "таблиця # someId" у ваш css, оскільки стилізація повинна відокремлюватися від вмісту. Але головним моментом питання є те, як перетворити застарілий html у належний css. Що ви правильно зробили, але насправді ви нічого не додали до своєї відповіді і зосереджуєтесь на непов'язаному питанні.
Teepeemm

1
Нічого не додано ?! Те, що я додав, було зосередитись на тому, як кожна інша відповідь тут в основному говорить про використання td { padding: ... }або table { border-spacing: ... }замість того, щоб застосовувати її безпосередньо до таблиці. Ті нічого не додають. Як я вже говорив, коли у вас є кілька таблиць на своїй сторінці і не хочете на них впливати, ви цього не хочете! Нам не потрібна ціла сторінка відповідей із записом "Використовуйте таблицю стилів!", Коли, можливо, це останнє, що вам потрібно, тому що ви хочете форматувати лише одну клітинку або таблицю. Ось тоді, коли застосовувати його до tableабо tdнебажано, і створити новий клас для нього надмірно.
vapcguy

1
Кожна інша відповідь використовує таблицю стилів, оскільки первісне питання було "як я можу це зробити за допомогою css". Якби питання було "як я можу css вплинути лише на цю одну таблицю", то відповідь була б більш доречною (хоча я все одно віддаю перевагу table#someId).
Teepeemm

2
Технічно стильний стиль в інтернеті все ще є CSS, просто не використовуючи таблицю стилів, але я розумію.
vapcguy

1
Тому що ідея класу - для повторного використання. Для разового, це мало сенсу і є надмірним, IMHO.
vapcguy


0

Ви можете перевірити наведений нижче код просто створити index.htmlта запустити його.

<!DOCTYPE html>
<html>
   <head>
      <style>
         table{
         border-spacing:10px;
         }
         td{
         padding:10px;
         }
      </style>
   </head>
   <body>
      <table cellspacing="0" cellpadding="0">
         <th>Col 1</th>
         <th>Col 2</th>
         <th>Col 3</th>
         <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
         </tr>
      </table>
   </body>
</html>

ВИХІД:

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

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