Definir cellpadding e cellpacing em CSS?

3317

Em uma tabela HTML, o cellpaddinge cellspacingpode ser definido assim:

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

Como o mesmo pode ser feito usando CSS?

kokos
fonte
6
Apenas uma sugestão geral, verifique se o seu style.css faz uma "redefinição" em suas tabelas antes de tentar essas soluções. Exemplo: Se você não tiver tabelas definidas como width:auto, border-collapsepode não funcionar como esperado.
PJ Brunet
1
Use espaçamento entre bordas na mesa e preenchimento em td.
Anubhav

Respostas:

3555

Fundamentos

Para controlar "cellpadding" em CSS, você pode simplesmente usar paddingnas células da tabela. Por exemplo, para 10 px de "cellpadding":

td { 
    padding: 10px;
}

Para "cellpacing", você pode aplicar a border-spacingpropriedade CSS à sua tabela. Por exemplo, para 10 px de "espaçamento entre células":

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

Essa propriedade permitirá até espaçamento horizontal e vertical separado, algo que você não poderia fazer com o "espaçamento de células" da velha escola.

Problemas no IE <= 7

Isso funcionará em quase todos os navegadores populares, exceto no Internet Explorer, até o Internet Explorer 7, onde você está quase sem sorte. Eu digo "quase" porque esses navegadores ainda oferecem suporte à border-collapsepropriedade, que mescla as bordas das células da tabela adjacentes. Se você estiver tentando eliminar o espaçamento entre células (ou seja cellspacing="0"), border-collapse:collapsedeverá ter o mesmo efeito: sem espaço entre as células da tabela. Porém, esse suporte é incorreto, pois não substitui um cellspacingatributo HTML existente no elemento da tabela.

Em resumo: para navegadores que não sejam o Internet Explorer 5-7, border-spacinglida com você. Para o Internet Explorer, se sua situação estiver correta (você deseja 0 espaçamento entre células e sua tabela ainda não a define), você pode usá-lo border-collapse:collapse.

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

Nota: Para obter uma excelente visão geral das propriedades CSS que podem ser aplicadas a tabelas e para quais navegadores, consulte esta fantástica página Quirksmode .

Eric Nguyen
fonte
27
cellpadding = "0" ainda pode fazer a diferença no Chrome 13.0.782.215, mesmo se o recolhimento de borda: o recolhimento e o espaçamento de borda forem aplicados à tabela.
whitneyland
7
@LeeWhitney, você precisa definir o preenchimento: 0 nas células da tabela.
Martin Ørding-Thomsen 29/11
7
É um pouco fora de tópico, mas os atributos cellpadding e cellpacing são removidos no HTML5, então o CSS é o único caminho a percorrer agora.
Ignas2526
12
Olá a todos. Atualizei a resposta para maior clareza, incluindo uma seção sobre cellpadding, que achei óbvia (basta usar "padding"). Espero que seja mais útil agora.
Eric Nguyen
4
É verdade que @vapcguy, em qualquer uma das outras situações infinitamente variáveis ​​em que você pode criar uma tabela, precisará definir seletores mais específicos. Os itens acima estão marcados como exemplos.
22678 Eric
942

Padrão

O comportamento padrão do navegador é equivalente a:

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

         Digite a descrição da imagem aqui

Cellpadding

Define a quantidade de espaço entre o conteúdo da célula e a parede celular

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

        Digite a descrição da imagem aqui

Espaçamento entre células

Controla o espaço entre as células da tabela

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

        Digite a descrição da imagem aqui

Ambos

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

        Digite a descrição da imagem aqui

Ambos (especiais)

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

        Digite a descrição da imagem aqui

Nota: Se houver border-spacing, indica que a border-collapsepropriedade da tabela é separate.

Tente você mesmo!

Aqui você pode encontrar a antiga maneira HTML de conseguir isso.

Peter Mortensen
fonte
1
Como o espaçamento ao redor da mesa está desaparecendo? Quando defino "espaçamento entre bordas: 8 px e 12 px, ele adiciona o espaçamento não apenas entre, mas entre a borda da tabela e as células externas! Mas isso não é mostrado nas imagens aqui; elas ficam niveladas à esquerda.
Kaz
1
@ 2astalavista E, infelizmente, se alguém quiser excluir o efeito do espaçamento externo, não funcionará dessa maneira com esses atributos CSS.
Kaz
@ Kaz Você pode precisar de uma margem negativa para ocultar essa parte irritante.
2
O preenchimento padrão no TD é tipicamente 1 px, não 0
Jan M
341
table
{
    border-collapse: collapse; /* 'cellspacing' equivalent */
}

table td, table th
{
    padding: 0; /* 'cellpadding' equivalent */
}
Filhote
fonte
2
Essa é realmente a única coisa que eu poderia trabalhar para mim, embora eu tenha aplicado as informações a um ID para evitar ser excessivamente geral.
Kzqai
20
Isso é cellspacing=0equivalente. O equivalente para cellspacing=1é completamente diferente. Veja a resposta aceita.
TRiG
3
Não deveria table tde table thapenas deveria ser tde, threspectivamente? Funciona de qualquer maneira, mas um seletor menor significa uma correspondência um pouco mais rápida
Cole Johnson
1
@ Cole Na verdade, eu acho que deveria ser table > tr > tde table > tr > th. Isso é quase tão rápido como tre th, e é garantido para o trabalho se você tiver uma tabela aninhada. Apenas a minha 2c
leviathanbadger
@ aboveyou00 mas o tableseletor é necessário? IIRC, a <td>é inválido, a menos que esteja dentro de <tr>.
Cole Johnson
114

Definir margens nas células da tabela realmente não tem nenhum efeito, até onde eu sei. O verdadeiro equivalente CSS para cellspacingé border-spacing- mas não funciona no Internet Explorer.

Você pode usar border-collapse: collapsepara definir com segurança o espaçamento das células como 0, como mencionado, mas para qualquer outro valor, acho que a única maneira entre navegadores é continuar usando o cellspacingatributo.

Will Prescott
fonte
47
Na era atual, essa realidade é sugada até o enésimo grau.
John K
7
Isso está quase correto, mas border-collapsesó funciona no IE 5-7 se a tabela ainda não tiver um cellspacingatributo definido. Escrevi uma resposta abrangente que mescla todas as partes corretas das outras respostas nesta página, caso isso seja útil.
Eric Nguyen
Para ser sincero, quem se importa com o Internet Explorer? Qualquer pessoa que o utilize deve conhecer sites corrompidos é sua culpa - por usar um navegador de baixa qualidade. Os sites não deveriam ter que lidar com isso. Deixe o Internet Explorer se perder. Esqueça o suporte. Nós não precisamos disso, e é uma dor para desenvolver.
99

Esse hack funciona para o Internet Explorer 6 e posterior, Google Chrome , Firefox e Opera :

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

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

o * declaração é para o Internet Explorer 6 e 7 e outros navegadores a ignoram adequadamente.

expression('separate', cellSpacing = '10px')retorna 'separate', mas ambas as instruções são executadas, pois no JavaScript você pode passar mais argumentos do que o esperado e todos eles serão avaliados.

Vitalii Fedorenko
fonte
para aqueles que tentam e-mails de resposta, nota que * não é reconhecido pelo Outlook 2007+ (usa o Word como um mecanismo de renderização) campaignmonitor.com/css
PTIM
71

Para aqueles que desejam um valor de espaçamento entre células diferente de zero, o seguinte CSS funcionou para mim, mas só posso testá-lo no Firefox.

Consulte o link Quirksmode publicado em outro lugar para obter detalhes de compatibilidade. Parece que pode não funcionar com versões mais antigas do Internet Explorer.

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

A solução simples para esse problema é:

table
{
    border: 1px solid #000000;
    border-collapse: collapse;
    border-spacing: 0px;
}
table td
{
    padding: 8px 8px;
}
George Filippakos
fonte
49

Além disso, se você quiser cellspacing="0", não se esqueça de adicionar border-collapse: collapseem sua tablefolha de estilo 's.

esteira
fonte
43

Quebra o conteúdo da célula com uma div e você pode fazer o que quiser, mas é necessário quebrar todas as células da coluna para obter um efeito uniforme. Por exemplo, para obter margens esquerda e direita mais amplas:

Então o CSS será,

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>

Sim, é um aborrecimento. Sim, funciona com o Internet Explorer. Na verdade, eu só testei isso com o Internet Explorer, porque é tudo o que podemos usar no trabalho.

Robert White
fonte
Eu gostaria de poder votar mais ... Primeiro exemplo que não repetiu os outros e um que mostra como limitar o efeito a uma única tabela ou célula, em vez de a todos eles na página !!!
vapcguy
23

Basta usar border-collapse: collapsepara a sua mesa e paddingpara thou td.

Dan
fonte
21

Esse estilo é para redefinição completa de tabelas - preenchimento de célula , espaçamento de célula e bordas .

Eu tinha esse estilo no meu arquivo 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 */
}
Elad Shechter
fonte
20

TBH. Por toda a fannying com CSS, você também pode usar, cellpadding="0" cellspacing="0"pois eles não são preteridos ...

Alguém mais sugerindo margens no <td>obviamente não tentou isso.

corretor
fonte
35
Na verdade, eles estão obsoletos no html5.
Kzqai
18
table th,td {
    padding: 8px 2px;
}
table {
    border-collapse: separate;
    border-spacing: 2px;
}
Abhishek Singh
fonte
17

Basta usar regras de preenchimento CSS com dados da tabela:

td { 
    padding: 20px;
}

E para espaçamento de borda:

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

No entanto, ele pode criar problemas na versão mais antiga de navegadores como o Internet Explorer, devido à implementação diferencial do modelo de caixa.

suraj rawat
fonte
15

Pelo que entendi das classificações do W3C, é que <table>s servem para exibir 'apenas' os dados.

Com base nisso, achei muito mais fácil criar um <div>com os planos de fundo e tudo mais e ter uma tabela com dados flutuando sobre ele usando position: absolute;ebackground: transparent; ...

Ele funciona no Chrome, Internet Explorer (6 e posterior) e Mozilla Firefox (2 e posterior).

As margens são usados (ou de qualquer maneira significava) para criar um espaçador entre os elementos do recipiente, como <table>, <div>e <form>, não <tr>, <td>, <span>or <input>. Usá-lo para qualquer coisa que não seja elementos de contêiner manterá você ocupado ajustando seu site para futuras atualizações do navegador.

RolanDecoy
fonte
7
O OP nunca declarou para o que ele estava usando a tabela.
Alfabravo
13

CSS:

selector{
    padding:0 0 10px 0; // Top left bottom right 
}
suraj rawat
fonte
12

Você pode definir facilmente o preenchimento dentro das células da tabela usando a propriedade CSS padding. É uma maneira válida de produzir o mesmo efeito que o atributo cellpadding da tabela.

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>[email protected]</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>[email protected]</td>
      </tr>
    </tbody>
  </table>

</body>
</html>

Da mesma forma, você pode usar a propriedade CSS border-espaçamento para aplicar o espaçamento entre as bordas adjacentes das células da tabela, como o atributo cellpacing. No entanto, para trabalhar com espaçamento entre bordas, o valor da propriedade colapsar entre bordas deve ser separado, o que é o padrão.

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>[email protected]</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>[email protected]</td>
      </tr>
    </tbody>
  </table>

</body>
</html>

Rafiqul Islam
fonte
10

Tente o seguinte:

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

Ou tente o seguinte:

table {
    border-collapse: collapse;
}
table td, table th {
    padding: 10px;
}
Falguni Panchal
fonte
9

Eu usei !importantapós o colapso da fronteira como

border-collapse: collapse !important;

e funciona para mim no IE7. Parece substituir o atributo cellpacing.

Håkan Nilsson
fonte
9
!importantseria necessário apenas para substituir outras configurações de CSS em uma situação complexa (e mesmo assim principalmente na abordagem errada).
Jukka K. Korpela
1
Também uma repetição da resposta de Dan, apenas adiciona a !important, que poderia ter sido incluída como um comentário em vez de outra resposta.
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-paddingpode ser fornecido paddingem CSS enquanto cell-spacingpode ser definido pela configuração border-spacingde tabela.

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

Violino .

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

Se marginnão funcionar, tente conjunto displayde trpara blocke, em seguida, a margem vai funcionar.

Majid Sadr
fonte
5

Para tabelas, espaçamento e preenchimento de célula são obsoletos no HTML 5.

Agora, para espaçamento entre células, é necessário usar espaçamento entre bordas. E para o cellpadding você precisa usar o colapso de borda.

E não use isso no seu código HTML5. Sempre tente usar esses valores em um arquivo CSS 3.

Pushp Singh
fonte
5
table {
    border-spacing: 4px; 
    color: #000; 
    background: #ccc; 
}
td {
    padding-left: 4px;
}
Peter Mortensen
fonte
4

Em uma tabela HTML, o cellpaddingecellspacingpode ser definido assim:

Para preenchimento de células :

Basta ligar para o td/thcelular simples padding.

Exemplo:

table {
    border-collapse: collapse;
}

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

Para espaçamento de células

Basta ligar para simples table border-spacing

Exemplo:

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

td {
  border: 1px solid red;
}

Mais estilo de tabela por link de origem CSS aqui você obtém mais estilo de tabela por CSS .

MD Ashik
fonte
3

Você pode simplesmente fazer algo assim no seu CSS, usando border-spacinge 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>

Alireza
fonte
A regra de espaçamento entre bordas é ignorada quando as bordas são recolhidas.
dgrogan 6/09
0

Que tal adicionar o estilo diretamente à própria tabela? Isso é em vez de usar tableno seu CSS, que é uma abordagem MAU se você tiver várias tabelas na sua página:

<table style="border-collapse: separate;border-spacing: 2px;">
    <tr>
        <td style="padding: 4px 4px;">Some Text</td>
    </tr>
</table>
vapcguy
fonte
2
Colocar "style" na tag table é pior do que colocar "table # someId" em seu css, pois o estilo deve ser separado do conteúdo. Mas o ponto principal da questão é como converter o html obsoleto em css adequado. O que você fez corretamente, mas não adicionou realmente nada à sua resposta e está se concentrando em um problema não relacionado.
28415 Teepeemm
1
Nada adicionado ?! O que eu adicionei foi focar em como todas as outras respostas aqui dizem basicamente para usar td { padding: ... }ou table { border-spacing: ... }, em vez de aplicá-la diretamente na tabela. Isso não acrescenta nada. Como eu disse, quando você tem várias tabelas na sua página e não deseja afetá-las, não deseja! Não precisamos de uma página inteira de respostas dizendo "Use a folha de estilo!", Quando talvez essa seja a última coisa que você deseja, porque deseja formatar apenas uma célula ou tabela. É quando aplicá-lo tableou tdé indesejável e criar uma nova classe, pois é um exagero.
vapcguy
1
Todas as outras respostas usam uma folha de estilo porque a pergunta original era "como posso fazer isso com o css". Se a pergunta tivesse sido "como o CSS pode afetar apenas essa tabela", sua resposta seria mais apropriada (embora eu ainda fosse a favor table#someId).
Teepeemm 28/03/2015
2
Tecnicamente, o estilo embutido ainda é CSS, apenas não usando uma folha de estilo, mas entendo o seu ponto.
vapcguy
1
Porque a ideia por trás de uma classe é de reutilização. Para um caso pontual, isso faz pouco sentido e é um exagero, IMHO.
vapcguy
0

Eu sugiro isso e todas as células da tabela específica são afetadas.

table.tbl_classname td, th {
    padding: 5px 5px 5px 4px   ;
 }

Greggo
fonte
0

Você pode verificar o código abaixo, basta criar um index.htmle executá-lo.

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

RESULTADO :

insira a descrição da imagem aqui

Amaresh Tiwari
fonte