J'ai une table comme celle-ci:
<table>
<tfoot>
<tr><td>footer</td></tr>
</tfoot>
<tbody>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
</tbody>
<tbody>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
</tbody>
<tbody>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
</tbody>
</table>
Je voudrais mettre un espacement entre chaque élément tbody, mais le remplissage et la marge n'ont aucun effet. Des idées?
Réponses:
Essayez ceci, si cela ne vous dérange pas de ne pas avoir de frontières.
la source
transparent
comme couleur de bordure. Ce que @SteveAlmond a dit.transparent
lui donnera la couleur d'arrière-plan de l'élément, essentiellement indiscernable du corps de l'élément. Vous auriez besoin de colorer explicitement la bordure de la couleur dans laquelle vous voulez qu'elle apparaisse (pour la rendre soi-disant invisible)Quelque chose comme ça fonctionnera, en fonction des exigences de prise en charge de votre navigateur:
la source
display: table-row;
?Les gens auront toujours des opinions controversées sur l'utilisation d'éléments de tableau vides pour mettre en page une page (comme en témoigne le vote négatif de cette réponse). Je reconnais cela, mais il est parfois plus facile de les utiliser de cette façon lorsque vous travaillez de manière " rapide et sale ".
J'ai utilisé des lignes vides dans des projets précédents pour espacer des groupes de lignes de tableau. J'ai attribué aux lignes d'espacement une classe css propre et défini une hauteur pour cette classe qui agissait comme une marge supérieure et inférieure pour ce groupe de lignes de tableau.
Si vous n'avez pas de bordures sur les cellules de votre tableau,vous pouvez également définir une hauteur par rapport à votre cellule ou ligne typique dans votre feuille de style qui espère uniformément toutes les lignes de votre tableau.la source
J'avais eu du mal à espacer correctement plusieurs
<tbody>
avec::before
pseudo, en présence de<tr>
contenir<td>
avec rowspan dans quelques navigateurs.En gros, si vous avez une
<tbody>
structure comme celle-ci:Et vous suivez qui conseille d'écrire des css sur un
::before
pseudo élément comme celui-ci:Cela affectera l'envergure de lignes, rendant la table "perdant" dans la seconde
<tr>
le nombre de<td>
-rowspan présents dans la première.Donc, si quelqu'un rencontre ce type de problème, la solution est de styliser
::before
pseudo de cette manière:Voici un violon
la source
Voici une autre possibilité qui repose sur: first-child qui n'est pas disponible dans tous les navigateurs:
la source
Il suffit de définir
display
commeblock
et cela fonctionnera.la source
display:block
rompt l'alignement des colonnes entre les éléments du corps. Vous ne bénéficiez plus du moteur de mise en page des tableauxDe toutes les réponses données ci-dessus, seules les réponses de djenson47 retiennent séparation de la présentation et du contenu . L'inconvénient de la méthode du modèle de bordure réduite est que vous ne pouvez plus utiliser les attributs de bordure ou d' espacement des cellules du tableau pour séparer les cellules individuelles. Vous pourriez dire que c'est une bonne chose et qu'il existe des solutions de contournement, mais cela peut être pénible. Je pense donc que la méthode du premier enfant est la plus élégante.
Vous pouvez également définir votre classe TBODY ' propriété de débordement de sur autre chose que «visible». Cette méthode vous permet également de conserver un modèle de bordures séparées:
la source
Comme le remplissage peut être appliqué aux TD, vous pouvez faire une astuce avec le signe +. Ensuite, il sera possible de donner un rembourrage supérieur aux TD du premier TR d'un corps:
J'ai ajouté le "tbody + tbody" pour que le premier tbody n'ait pas de rembourrage supérieur. Cependant, ce n'est pas obligatoire.
Autant que je sache, il n'y a pas d'inconvénients :), mais n'a pas testé les anciens navigateurs.
la source
Vous pouvez utiliser
border-spacing
dans une table avec des groupes de lignes de table pour ajouter un espace entre ces groupes. Cependant, je ne pense pas qu'il existe un moyen de spécifier quels groupes sont espacés et lesquels ne le sont pas.CSS
la source
NOUVELLE RÉPONSE
Vous pouvez utiliser autant de
<tbody>
balises que vous le souhaitez. Je n'avais pas réalisé que c'était correct pour le W3C jusqu'à présent. Pour ne pas dire que ma solution ci-dessous ne fonctionne pas (c'est le cas), mais pour faire ce que vous essayez de faire, attribuez vos<tbody>
classes de balises, puis référencez leurs<td>
balises individuelles via CSS comme ceci:et votre HTML ainsi:
Essayez ce gars :)
ANCIENNE RÉPONSE
quoi que vous fassiez, N'insérez PAS de lignes vides ...
vous ne devriez pas avoir plus d'un élément tbody dans votre table. ce que vous pouvez faire est de définir l'attribut class ou id dans vos
<tr>
éléments et de donner le<td>
remplissage de leurs balises correspondantes :Vous pouvez même attribuer
<tr>
une classe supplémentaire aux haut et bas de sorte qu'ils ne remplissent respectivement que le haut ou le bas:et dans votre HTML, votre
<tr>
balise ressemblerait à ceci:J'espère que cela t'aides!
la source
La réponse djensen47 fonctionne très bien pour les navigateurs plus récents, cependant, comme cela a été souligné, IE7 ne fonctionne pas.
Ma solution de contournement pour ce problème pour prendre en charge les navigateurs plus anciens consistait à envelopper le contenu de chaque cellule dans un div. Ensuite, ajoutez une marge supérieure au div.
CSS
Le paramètre de hauteur maintient les cellules d'au moins 30 pixels de haut pour empêcher toute coloration de cellule utilisée à l'intérieur du div de s'effondrer autour du texte. Le bord supérieur crée l'espace souhaité en augmentant la hauteur de la rangée entière.
la source
Je suis tombé sur cela en essayant de le résoudre moi-même. J'ai réussi à mettre une
<br>
balise juste avant la</tbody>
balise de fermeture . C'est une solution purement visuelle, mais semble fonctionner sur la plupart des navigateurs que j'ai testés.Devrait également être accessible.
la source