J'ai une table contenant beaucoup de lignes. Certaines de ces lignes sont class="highlight"
et signifient une ligne qui doit être stylée différemment et mise en surbrillance. Ce que j'essaie de faire est d'ajouter un espacement supplémentaire avant et après ces lignes afin qu'elles apparaissent légèrement séparées des autres lignes.
Je pensais pouvoir faire ceci avec margin-top:10px;margin-bottom:10px;
mais cela ne fonctionnait pas. Quelqu'un sait comment faire cela, ou si cela pourrait être fait? Voici le code HTML et j'ai mis le deuxième test dans la classe en surbrillance.
<table>
<thead>
<tr>
<th>Header 1</th>
<th>Header 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Value1</td>
<td>Value2</td>
</tr>
<tr class="highlight">
<td>Value1</td>
<td>Value2</td>
</tr>
<tr>
<td>Value1</td>
<td>Value2</td>
</tr>
<tr>
<td>Value1</td>
<td>Value2</td>
</tr>
</tbody>
</table>
Les lignes de table ne peuvent pas avoir de valeur de marge. Pouvez-vous augmenter le rembourrage? Ça marcherait. Sinon, vous pourriez insérer un <tr class="spacer"></tr>
avant et après les lignes class="highlighted"
.
La propriété border-spacing
fonctionnera pour ce cas particulier.
table {
border-collapse:separate;
border-spacing: 0 1em;
}
Vous ne pouvez pas nommer le <tr>
s eux-mêmes, mais vous pouvez attribuer un style à <td>
s dans le "surlignage" <tr>
s.
tr.highlight td {padding-top: 10px; padding-bottom:10px}
line-height peut être la solution possible
tr
{
line-height:30px;
}
Je sais que c'est un peu vieux, mais je viens de recevoir quelque chose dans le même sens. Tu ne pouvais pas faire ça?
tr.highlight {
border-top: 10px solid;
border-bottom: 10px solid;
border-color: transparent;
}
J'espère que cela t'aides.
Tout d'abord, n'essayez pas de mettre une marge sur un <tr>
ou un <td>
car cela ne fonctionnera pas avec le rendu moderne.
Bien que la marge ne fonctionne pas, padding ne fonctionne pas:
td{
padding-bottom: 10px;
padding-top: 10px;
}
Attention: Ceci éloignera également la bordure de l'élément. Si votre bordure est visible, vous pouvez utiliser la solution 2 à la place.
Pour que la bordure reste proche de l'élément et imite la marge, insérez un autre <tr>
entre chacun des <tr>
de votre table des bobines, comme suit:
<tr style="height: 20px;"> <!-- Mimic the margin -->
</tr>
Étant donné que margin
est ignoré sur tr
, j’utilise habituellement une solution de contournement en définissant un border-bottom
ou border-top
transparent et en définissant la propriété background-clip
sur padding-box
afin que background-color
ne soit pas peint sous la bordure.
table {
border-collapse: collapse; /* [1] */
}
th, td {
border-bottom: 5px solid transparent; /* [2] */
background-color: gold; /* [3] */
background-clip: padding-box; /* [4] */
}
5px
représente la marge que vous souhaitez atteindrebackground-color
de votre ligne/cellulebackground
ne soit pas peinte sous la border
voir une démo ici: http://codepen.io/meodai/pen/MJMVNR?editors=1100
background-clip
est pris en charge dans tout navigateur moderne . (Et IE9 +)
Sinon, vous pouvez utiliser un border-spacing
. Mais cela ne fonctionnera pas avec border-collapse
défini sur collapse
.
Cela ne va pas être parfait, mais j’ai eu le plaisir de découvrir que vous pouvez contrôler l’espacement horizontal et vertical l’espacement des borduresséparément:
table
{
border-collapse: separate;
border-spacing: 0 8px;
}
Un moyen d'imiter la marge sur la ligne serait d'utiliser le pseudo-sélecteur pour ajouter un espacement sur la td
.
.highlight td::before, .highlight td::after
{
content:"";
height:10px;
display:block;
}
De cette façon, tout ce qui est marqué avec la classe de surbrillance sera séparé en haut et en bas.
Un hack pour donner l’apparence des marges entre les lignes d’un tableau consiste à leur donner une bordure de la même couleur que l’arrière-plan. Ceci est utile lors de la création d'un thème tiers où vous ne pouvez pas modifier le balisage HTML. Par exemple:
tr{
border: 5px solid white;
}
Vous pouvez essayer d’utiliser des transformations CSS pour indenter tout un tr:
tr.indent {
-webkit-transform: translate(20px,0);
-moz-transform: translate(20px,0);
}
Je pense que c'est une solution valable. Semble fonctionner correctement dans Firefox 16, Chrome 23 et Safari 6 sous OSX.
Voici une façon soignée de le faire:
table tr {
border-bottom: 4px solid;
}
Cela va ajouter 4px
d'espacement vertical entre chaque ligne. Et si vous ne voulez pas que cette frontière touche le dernier enfant:
table tr:last-child {
border-bottom: 0;
}
Rappelez-vous que les pseudo-sélecteurs CSS3 ne fonctionneront que dans IE 8 et avec selectivizr.
J'ai abandonné et inséré un simple code jQuery comme ci-dessous. Cela ajoutera un tr après chaque tr, si vous en avez tellement comme moi . Démo: https://jsfiddle.net/acf9sph6/
<table>
<tbody>
<tr class="my-tr">
<td>one line</td>
</tr>
<tr class="my-tr">
<td>one line</td>
</tr>
<tr class="my-tr">
<td>one line</td>
</tr>
</tbody>
</table>
<script>
$(function () {
$("tr.my-tr").after('<tr class="tr-spacer"/>');
});
</script>
<style>
.tr-spacer
{
height: 20px;
}
</style>
Vous pouvez créer un espace entre les lignes d'un tableau en ajoutant une ligne vide de cellules comme celle-ci ...
<tr><td></td><td></td></tr>
CSS peut ensuite être utilisé pour cibler les cellules vides comme ceci…
table :empty{border:none; height:10px;}
NB: Cette technique n'est valable que si aucune de vos cellules normales ne sera vide/vide.
Même un espace insécable permettra d'éviter qu'une cellule ne soit ciblée par la règle CSS ci-dessus.
Inutile de mentionner que vous pouvez ajuster la hauteur de l'espace à votre convenance avec la propriété height incluse.
Une autre possibilité consiste à utiliser un pseudo sélecteur: after ou: before
tr.highlight td:last-child:after
{
content: "\0a0";
line-height: 3em;
}
Cela pourrait éviter des problèmes avec le navigateur qui ne comprennent pas les pseudo-sélecteurs, plus les couleurs de fond ne sont pas un problème.
L'inconvénient est qu'il ajoute des espaces après la dernière cellule.
ajoute ce style avant la classe = "en surbrillance" padding-bottom et display est inline-table
Je vous suggère fortement de jeter un coup d'œil à vos analyses et de voir combien d'utilisateurs d'IE7 ou moins vous visitez sur le site. J'ai constaté que je pouvais maintenant abandonner le support pour IE7, ce qui signifie que je peux utiliser des tables CSS ... ce qui facilitera grandement le travail.
ajoutez un div aux cellules que vous souhaitez ajouter un espacement supplémentaire:
<tr class="highlight">
<td><div>Value1</div></td>
<td><div>Value2</div></td>
</tr>
tr.highlight td div {
margin-top: 10px;
}
Pour ce qui en vaut la peine, j’ai tiré parti du fait que j’utilisais déjà bootstrap (4.3), car j’avais besoin d’ajouter des marges, des ombres au rectangle et des rayons dans la rangée, ce que je ne peux pas faire avec les tableaux.
<div id="loop" class="table-responsive px-4">
<section>
<div id="thead" class="row m-0">
<div class="col"></div>
<div class="col"></div>
<div class="col"></div>
</div>
<div id="tbody" class="row m-0">
<div class="col"></div>
<div class="col"></div>
<div class="col"></div>
</div>
</section>
</div>
Sur css j’ai ajouté quelques lignes pour maintenir le comportement de bootstrap à la table
@media (max-width: 800px){
#loop{
section{
min-width: 700px;
}
}
}