3681 votes

Définir l'espacement et l'espacement des cellules en CSS ?

Dans un tableau HTML, l'élément cellpadding y cellspacing peut être défini comme suit :

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

Comment peut-on faire la même chose avec CSS ?

11 votes

Juste une suggestion générale, vérifiez si votre style.css fait une "réinitialisation" sur vos tables avant d'essayer ces solutions. Exemple : Si vous n'avez pas réglé les tableaux sur width:auto puis border-collapse pourrait ne pas fonctionner comme prévu.

3 votes

Utilisez l'espacement des bordures pour les tables et le rembourrage pour les td.

6 votes

"Oh, dang, à l'époque, je faisais cela avec cellpadding y cellspacing ... qu'est-ce que c'est en CSS déjà ?" -Moi, à peu près à chaque fois que j'ai besoin de le faire.

3876voto

Eric Nguyen Points 18126

Principes de base

Pour contrôler le "cellpadding" en CSS, vous pouvez simplement utiliser padding sur les cellules du tableau. Par exemple, pour 10px de "cellpadding" :

td { 
    padding: 10px;
}

Pour l'"espacement des cellules", vous pouvez appliquer la méthode border-spacing CSS à votre tableau. Par exemple, pour 10px de "cellspacing" :

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

Cette propriété permet même de séparer l'espacement horizontal et l'espacement vertical, ce qui n'était pas possible avec l'ancien "espacement des cellules".

Problèmes avec IE ≤ 7

Cela fonctionnera dans presque tous les navigateurs courants, à l'exception d'Internet Explorer jusqu'à Internet Explorer 7, où vous n'aurez presque pas de chance. Je dis "presque" parce que ces navigateurs prennent toujours en charge le format border-collapse qui fusionne les bordures des cellules de tableau adjacentes. Si vous essayez d'éliminer l'espacement des cellules (c'est-à-dire, cellspacing="0" ) alors border-collapse:collapse devrait avoir le même effet : pas d'espace entre les cellules du tableau. Cette prise en charge est cependant boguée, car elle ne remplace pas une fonction existante de l'option cellspacing attribut HTML de l'élément table.

En bref : pour les navigateurs autres qu'Internet Explorer 5-7, border-spacing s'occupe de vous. Pour Internet Explorer, si votre situation est parfaite (vous voulez un espacement de 0 cellule et votre tableau ne l'a pas déjà défini), vous pouvez utiliser border-collapse:collapse .

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

Note : Pour une excellente vue d'ensemble des propriétés CSS que l'on peut appliquer aux tableaux et pour quels navigateurs, voir ceci fantastique page Quirksmode .

33 votes

Cellpadding="0" peut encore faire la différence dans Chrome 13.0.782.215, même si border-collapse:collapse et border-spacing sont appliqués au tableau.

1 votes

C'est certainement logique en raison de la spécificité de la css, de sorte que vous devrez peut-être appliquer les styles à un identifiant css pour une spécificité maximale. Il n'est pas certain que cela permette de remplacer les valeurs des attributs dans tous les cas, mais c'est l'endroit où il faut commencer à vérifier.

7 votes

@LeeWhitney vous devez définir le padding : 0 sur les cellules de votre tableau.

1025voto

2astalavista Points 7092

Défaut

Le comportement par défaut du navigateur est équivalent à :

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

         Enter image description here

Cellpadding

Définit la quantité d'espace entre le contenu de la cellule et la paroi cellulaire.

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

        Enter image description here

Espacement des cellules

Contrôle l'espace entre les cellules du tableau

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

        Enter image description here

Les deux

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

        Enter image description here

Les deux (spécial)

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

        Enter image description here

Remarque : S'il y a border-spacing il indique border-collapse du tableau est separate .

Essayez-le vous-même !

Ici vous pouvez trouver l'ancienne méthode HTML pour y parvenir.

1 votes

Comment l'espacement autour de la table disparaît-il ? Lorsque je définis "border-spacing : 8px 12px, il ajoute l'espacement non seulement entre, mais aussi entre la bordure du tableau et les cellules extérieures ! Mais ce n'est pas ce que montrent les images ici ; elles sont alignées à gauche.

1 votes

@2astalavista Et malheureusement, si quelqu'un veut supprimer l'effet de l'espacement extérieur, cela ne fonctionnera pas de cette façon avec ces attributs CSS.

0 votes

@Kaz Vous pourriez avoir besoin d'utiliser une marge négative pour cacher cette partie gênante.

370voto

Pup Points 3505
table
{
    border-collapse: collapse; /* 'cellspacing' equivalent */
}

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

2 votes

C'est en fait la seule chose que j'ai pu faire fonctionner pour moi, bien que j'aie appliqué l'information à un identifiant pour éviter d'être trop général.

23 votes

C'est cellspacing=0 équivalent. L'équivalent pour cellspacing=1 est complètement différent. Voir la réponse acceptée.

3 votes

Ne devrait pas table td y table th être simplement td y th respectivement ? Cela fonctionne dans les deux cas, mais un sélecteur plus petit permet une mise en correspondance légèrement plus rapide.

124voto

Will Prescott Points 2451

Le réglage des marges sur les cellules des tableaux n'a pas vraiment d'effet, pour autant que je sache. Le véritable équivalent CSS de cellspacing est border-spacing - mais il ne fonctionne pas dans Internet Explorer.

Vous pouvez utiliser border-collapse: collapse pour régler de manière fiable l'espacement des cellules à 0, mais pour toute autre valeur, je pense que la seule solution inter-navigateurs est de continuer à utiliser la fonction cellspacing attribut.

51 votes

À l'époque actuelle, cette réalité est une véritable tartine au Nième degré.

8 votes

C'est presque correct, mais border-collapse ne fonctionne que dans IE 5-7 si le tableau n'a pas déjà un nom de fichier cellspacing défini. J'ai rédigé une réponse complète qui fusionne toutes les parties correctes des autres réponses de cette page, au cas où cela serait utile.

1 votes

Pour être honnête, qui se soucie d'Internet Explorer ? Tous ceux qui l'utilisent devraient savoir que les sites web cassés sont leur faute - pour avoir utilisé un navigateur de si mauvaise qualité. Les sites web ne devraient pas avoir à gérer cela. Laissez Internet Explorer se perdre. Oubliez le soutien. Nous n'en avons pas besoin et c'est une plaie à développer.

111voto

Vitalii Fedorenko Points 17469

Cette astuce fonctionne avec Internet Explorer 6 et les versions ultérieures, Google Chrome , Firefox, et Opéra :

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

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

En * La déclaration est destinée à Internet Explorer 6 et 7, et les autres navigateurs l'ignoreront.

expression('separate', cellSpacing = '10px') retours 'separate' mais les deux instructions sont exécutées, car en JavaScript, vous pouvez passer plus d'arguments que prévu et ils seront tous évalués.

0 votes

Pour ceux qui souhaitent envoyer des courriels réactifs, notez que * n'est pas reconnu par outlook 2007+ (qui utilise word comme moteur de rendu). campaignmonitor.com/css

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X