Voici une solution simple et élégante, avec quelques mises en garde:
- Vous ne pouvez pas réellement rendre les espaces transparents, vous devez leur donner une couleur spécifique.
- Vous ne pouvez pas arrondir les coins des bordures au-dessus et en dessous des espaces
- Vous devez connaître le remplissage et les bordures de vos cellules de tableau
Dans cet esprit, essayez ceci:
td {padding:5px 8px;border:2px solid blue;background:#E0E0E0} /* lets say the cells all have this padding and border, and the gaps should be white */
tr.gapbefore td {overflow:visible}
tr.gapbefore td::before,
tr.gapbefore th::before
{
content:"";
display:block;
position:relative;
z-index:1;
width:auto;
height:0;
padding:0;
margin:-5px -10px 5px; /* 5px = cell top padding, 10px = (cell side padding)+(cell side border width)+(table side border width) */
border-top:16px solid white; /* the size & color of the gap you want */
border-bottom:2px solid blue; /* this replaces the cell's top border, so should be the same as that. DOUBLE IT if using border-collapse:separate */
}
En fait, vous collez un ::before
bloc rectangulaire en haut de toutes les cellules de la ligne que vous souhaitez précédé d'un espace. Ces blocs dépassent un peu des cellules pour chevaucher les bordures existantes, les cachant. Ces blocs sont juste une bordure supérieure et inférieure prises en sandwich ensemble: la bordure supérieure forme l'espace, et la bordure inférieure recrée l'apparence de la bordure supérieure d'origine des cellules.
Notez que si vous avez une bordure autour du tableau lui-même ainsi que des cellules, vous devrez augmenter davantage la marge horizontale -ve de vos «blocs». Donc, pour une bordure de table 4px, vous utiliseriez plutôt:
margin:-5px -12px 5px; /* 14px = original 10px + 2px for 'uncollapsed' part of table border */
Et si votre table utilise à la border-collapse:separate
place de border-collapse:collapse
, vous devrez (a) utiliser la largeur de bordure de table complète:
margin:-5px -14px 5px; /* 14px = original 10px + 4px full width of table border */
... et aussi (b) remplacer la bordure à double largeur qui doit maintenant apparaître sous l'écart:
border-bottom:4px solid blue; /* i.e. 4px = cell top border + previous row's bottom border */
La technique est facilement adaptée à une version .gapafter, si vous préférez, ou à la création d'espaces verticaux (colonnes) au lieu d'écarts de ligne.
Voici un codepen où vous pouvez le voir en action: https://codepen.io/anon/pen/agqPpW