Impostare cellpad e cellpacing in CSS?


3317

In una tabella HTML, cellpaddinge cellspacingpuò essere impostato in questo modo:

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

Come si può ottenere lo stesso risultato usando i CSS?


6
Solo un suggerimento generale, controlla se style.css esegue un "reset" sui tuoi tavoli prima di provare queste soluzioni. Esempio: se non si dispone di tavoli per width:autopoi border-collapsepotrebbe non funzionare come previsto.
PJ Brunet,

1
Usa la spaziatura dei bordi sul tavolo e l'imbottitura su td.
Anubhav,

Risposte:


3555

Nozioni di base

Per controllare il "cellpadding" nei CSS, puoi semplicemente usare paddingsulle celle della tabella. Ad esempio per 10px di "cellpadding":

td { 
    padding: 10px;
}

Per "cellpacing", puoi applicare la border-spacingproprietà CSS alla tua tabella. Ad esempio per 10px di "cellpacing":

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

Questa proprietà consentirà persino una spaziatura orizzontale e verticale separata, cosa che non potresti fare con la "spaziatura cellulare" della vecchia scuola.

Problemi in IE <= 7

Funzionerà in quasi tutti i browser più diffusi tranne Internet Explorer fino a Internet Explorer 7, dove sei quasi sfortunato. Dico "quasi" perché questi browser supportano ancora la border-collapseproprietà, che unisce i bordi delle celle della tabella adiacenti. Se stai cercando di eliminare la spaziatura cellulare (ovvero, cellspacing="0") , allora border-collapse:collapsedovrebbe avere lo stesso effetto: nessuno spazio tra le celle della tabella. Questo supporto è errato, tuttavia, poiché non sovrascrive un cellspacingattributo HTML esistente sull'elemento tabella.

In breve: per i browser non Internet Explorer 5-7, border-spacingti gestisce. Per Internet Explorer, se la tua situazione è giusta (vuoi 0 cellpacing e la tua tabella non lo ha già definito), puoi usare border-collapse:collapse.

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

Nota: per una fantastica panoramica delle proprietà CSS che è possibile applicare alle tabelle e per quali browser, vedere questa fantastica pagina Quirksmode .


27
cellpadding = "0" può ancora fare la differenza in Chrome 13.0.782.215, anche se border-collapse: collapse e border-spacing sono applicati alla tabella.
Whitneyland,

7
@LeeWhitney devi impostare il riempimento: 0 sulle celle della tabella.
Martin Ørding-Thomsen,

7
È un po 'fuori tema, ma gli attributi cellpad e cellpacing sono rimossi in HTML5, quindi CSS è l'unico modo per andare ora.
Ignas2526,

12
Ciao a tutti. Ho aggiornato la risposta per chiarezza, inclusa una sezione sul cellpadding, che pensavo fosse ovvia (basta usare "padding"). Spero sia più utile ora.
Eric Nguyen,

4
È vero, @vapcguy, in una qualsiasi delle situazioni infinitamente variabili in cui potresti creare una tabella, dovrai definire selettori più specifici. Quanto sopra sono contrassegnati come esempi.
Eric Nguyen,

942

Predefinito

Il comportamento predefinito del browser è equivalente a:

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

         Inserisci qui la descrizione dell'immagine

cELLPADDING

Imposta la quantità di spazio tra il contenuto della cella e la parete della cella

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

        Inserisci qui la descrizione dell'immagine

cellspacing

Controlla lo spazio tra le celle della tabella

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

        Inserisci qui la descrizione dell'immagine

Tutti e due

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

        Inserisci qui la descrizione dell'immagine

Entrambi (speciali)

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

        Inserisci qui la descrizione dell'immagine

Nota: se è border-spacingimpostato, indica che la border-collapseproprietà della tabella è separate.

Prova tu stesso!

Qui puoi trovare il vecchio modo HTML per raggiungere questo obiettivo.


1
Come sta scomparendo la spaziatura attorno al tavolo? Quando imposto "spaziatura bordo: 8px 12px, aggiunge la spaziatura non solo tra, ma tra il bordo del tavolo e le celle esterne! Ma questo non è rappresentato nelle immagini qui; sono a filo a sinistra.
Kaz

1
@ 2astalavista E sfortunatamente, se qualcuno desidera eliminare l'effetto della spaziatura esterna, non funzionerà in questo modo con questi attributi CSS.
Kaz,

@Kaz Potrebbe essere necessario utilizzare un margine negativo per nascondere quella parte fastidiosa.

2
Il padding predefinito su TD è in genere 1px, non 0
Jan M

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

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

2
Questa è in realtà l'unica cosa che potrei riuscire a lavorare per me, anche se ho applicato le informazioni a un ID per evitare di essere eccessivamente generale.
Kzqai,

20
Questo è cellspacing=0equivalente. L'equivalente per cellspacing=1è completamente diverso. Vedi la risposta accettata
TRiG

3
Non dovrebbe table tde table thsolo essere tde thrispettivamente? Funziona in entrambi i modi, ma un selettore più piccolo significa una corrispondenza leggermente più veloce
Cole Johnson,

1
@Cole In realtà, penso che dovrebbe essere table > tr > tde table > tr > th. È veloce quasi quanto tre th, ed è garantito che funzioni se hai una tabella nidificata. Solo il mio 2c
leviathanbadger il

@ aboveyou00 ma è tablenecessario il selettore? IIRC, a <td>non è valido a meno che all'interno di a <tr>.
Cole Johnson,

114

L'impostazione dei margini sulle celle della tabella non ha alcun effetto per quanto ne so. Il vero equivalente CSS per cellspacingèborder-spacing - ma non funziona in Internet Explorer.

È possibile utilizzare border-collapse: collapseper impostare in modo affidabile la spaziatura delle celle su 0, come indicato, ma per qualsiasi altro valore penso che l'unico modo tra browser sia continuare a utilizzare l' cellspacingattributo.


47
Nell'età di oggi quella realtà è risucchiata all'ennesima potenza.
John K,

7
Questo è quasi corretto, ma border-collapsefunziona solo in IE 5-7 se la tabella non ha già un cellspacingattributo definito. Ho scritto una risposta completa che unisce tutte le parti corrette delle altre risposte in questa pagina nel caso sia utile.
Eric Nguyen,

Ad essere sincero, a chi importa di Internet Explorer? Chiunque lo usi dovrebbe sapere che i siti Web non funzionanti sono colpa loro - per aver utilizzato un browser di bassa qualità. I siti web non dovrebbero avere a che fare con questo. Lascia perdere Internet Explorer. Dimentica il supporto. Non ne abbiamo bisogno ed è un dolore per cui sviluppare.

99

Questo trucco funziona per Internet Explorer 6 e versioni successive, 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 */
}

La *dichiarazione è per Internet Explorer 6 e 7 e altri browser la ignoreranno correttamente.

expression('separate', cellSpacing = '10px')restituisce 'separate', ma vengono eseguite entrambe le istruzioni, poiché in JavaScript è possibile passare più argomenti del previsto e tutti verranno valutati.


per coloro che tentano e-mail reattive, nota che * non è riconosciuto da Outlook 2007+ (utilizza Word come motore di rendering) campaignmonitor.com/css
ptim

71

Per coloro che desiderano un valore di spaziatura cellulare diverso da zero, il seguente CSS ha funzionato per me, ma sono in grado di testarlo solo in Firefox.

Vedi il link Quirksmode pubblicato altrove per i dettagli di compatibilità. Sembra che potrebbe non funzionare con le versioni precedenti di Internet Explorer.

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

54

La semplice soluzione a questo problema è:

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

49

Inoltre, se lo desideri cellspacing="0", non dimenticare di aggiungere border-collapse: collapseil tablefoglio di stile.


43

Avvolgi il contenuto della cella con un div e puoi fare tutto ciò che vuoi, ma devi avvolgere ogni cella in una colonna per ottenere un effetto uniforme. Ad esempio, per ottenere margini più ampi a sinistra e a destra:

Quindi il CSS sarà,

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>

Sì, è una seccatura. Sì, funziona con Internet Explorer. In realtà, l'ho testato solo con Internet Explorer, perché è tutto ciò che ci è permesso usare al lavoro.


Vorrei poter votare di più ... Primo esempio che non ha ripetuto gli altri e uno che mostra come limitare l'effetto a una singola tabella o cella, anziché a tutti sulla pagina !!!
Vapcguy,

23

Basta usare border-collapse: collapseper il tuo tavolo e paddingper tho td.


21

Questo stile è per il ripristino completo delle tabelle : riempimento di celle , spaziatura cellulare e bordi .

Ho avuto questo stile nel mio file 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. Per quanto riguarda la sparizione con i CSS, potresti anche usare solo cellpadding="0" cellspacing="0"perché non sono deprecati ...

Qualcun altro che ha suggerito margini su <td>ovviamente non ha provato questo.


35
In realtà sono deprecati in HTML5.
Kzqai,

18
table th,td {
    padding: 8px 2px;
}
table {
    border-collapse: separate;
    border-spacing: 2px;
}

17

Usa semplicemente le regole di riempimento CSS con i dati della tabella:

td { 
    padding: 20px;
}

E per la spaziatura dei bordi:

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

Tuttavia, può creare problemi nella versione precedente di browser come Internet Explorer a causa dell'implementazione diff del modello box.


15

Da quanto ho capito dalle classificazioni del W3C è che <table>s sono pensati per visualizzare i dati "solo".

Sulla base di ciò, ho trovato molto più facile creare un <div>con gli sfondi e tutto il resto e avere una tabella con i dati fluttuanti su di esso usando position: absolute;e background: transparent;...

Funziona su Chrome, Internet Explorer (6 e versioni successive) e Mozilla Firefox (2 e versioni successive).

I margini sono utilizzati (o comunque destinate) per creare un distanziatore tra elementi contenitore, come <table>, <div>e <form>, non <tr>, <td>, <span>o <input>. Usarlo per qualsiasi cosa diversa dagli elementi contenitore ti terrà occupato ad adattare il tuo sito Web per futuri aggiornamenti del browser.


7
OP non ha mai dichiarato per cosa stesse usando la tabella.
Alfabravo,


12

Puoi facilmente impostare il riempimento all'interno delle celle della tabella usando la proprietà di riempimento CSS. È un modo valido per produrre lo stesso effetto dell'attributo cellpadding della tabella.

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>

Allo stesso modo, puoi usare la proprietà CSS border-spacing per applicare la spaziatura tra i bordi di celle della tabella adiacenti come l'attributo cellpacing. Tuttavia, al fine di lavorare la spaziatura dei bordi, il valore della musa della proprietà di collasso dei bordi deve essere separato, che è l'impostazione predefinita.

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

Prova questo:

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

Oppure prova questo:

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

9

Ho usato !importantdopo il crollo del confine come

border-collapse: collapse !important;

e funziona per me in IE7. Sembra sovrascrivere l'attributo cellpacing.


9
!importantsarebbe necessario solo per sovrascrivere altre impostazioni CSS in una situazione complessa (e anche allora per lo più un approccio sbagliato).
Jukka K. Korpela,

1
Anche una ripetizione della risposta di Dan, aggiunge solo il !important, che avrebbe potuto essere incluso come commento invece di un'altra risposta.
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-paddingpuò essere fornito da paddingCSS mentre cell-spacingpuò essere impostato impostando la border-spacingtabella.

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

Violino .


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

Se marginnon ha funzionato, tenta di impostare displaydi tra blocke quindi il margine funzionerà.


5

Per le tabelle, cellpacing e cellpad sono obsoleti in HTML 5.

Ora per la spaziatura cellulare devi usare la spaziatura dei bordi. E per il cellpadding devi usare border-collapse.

E assicurati di non usarlo nel tuo codice HTML5. Cerca sempre di utilizzare questi valori in un file CSS 3.


5
table {
    border-spacing: 4px; 
    color: #000; 
    background: #ccc; 
}
td {
    padding-left: 4px;
}

4

In una tabella HTML, cellpaddinge cellspacingpuò essere impostato in questo modo:

Per imbottitura cellulare :

Chiama semplicemente una td/thcella padding.

Esempio:

table {
    border-collapse: collapse;
}

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

Per spaziatura cellulare

Chiama semplicemente table border-spacing

Esempio:

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

td {
  border: 1px solid red;
}

Più stile tabella tramite collegamento sorgente CSS qui ottieni più stile tabella tramite CSS .


3

Puoi semplicemente fare qualcosa del genere nel tuo 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>


La regola di spaziatura dei bordi viene ignorata quando i bordi vengono compressi.
dgrogan,

0

Che ne dici di aggiungere lo stile direttamente al tavolo stesso? Questo invece di utilizzare tablenel tuo CSS, che è un approccio MALE se hai più tabelle nella tua pagina:

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

2
Inserire "style" nel tag table è peggio che inserire "table # someId" nel tuo CSS, poiché lo stile dovrebbe essere separato dal contenuto. Ma il punto principale della domanda è come convertire l'html deprecato in CSS corretto. Che hai fatto correttamente, ma non hai aggiunto nulla con la tua risposta e ti stai concentrando su un problema non correlato.
Teepeemm,

1
Non è stato aggiunto nulla ?! Quello che ho aggiunto è stato quello di concentrarmi su come ogni altra risposta qui sostanzialmente dice di usare td { padding: ... }o table { border-spacing: ... }, invece di applicarla direttamente al tavolo. Quelli non aggiungono nulla. Come ho detto, quando hai più tabelle sulla tua pagina e non vuoi influenzarle, non vuoi farlo! Non abbiamo bisogno di un'intera pagina di risposte che dice "Usa il foglio di stile!", Quando forse è l'ultima cosa che vuoi, perché vuoi solo la formattazione per una cella o tabella. Questo è quando lo si applica tableo tdè indesiderabile e la creazione di una classe completamente nuova perché è eccessiva.
vapcguy,

1
Ogni altra risposta utilizza un foglio di stile perché la domanda originale era "come posso fare questo con CSS". Se la domanda fosse "come posso fare in modo che css influisca solo su questa tabella", allora la tua risposta sarebbe più appropriata (anche se preferirei comunque table#someId).
Teepeemm,

2
Tecnicamente, lo stile in linea è ancora CSS, semplicemente non usando un foglio di stile, ma ottengo il tuo punto.
vapcguy,

1
Perché l'idea alla base di una classe è per la riusabilità. Per una volta, ha poco senso ed è eccessivo, IMHO.
vapcguy,

0

Suggerisco questo e tutte le celle per la tabella particolare sono state eseguite.

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


0

Puoi controllare il codice qui sotto semplicemente creare un index.htmled eseguirlo.

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

PRODUZIONE :

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.