Ecco una soluzione semplice ed elegante, con alcuni avvertimenti:
- Non puoi effettivamente rendere trasparenti gli spazi vuoti, devi dare loro un colore specifico.
- Non è possibile arrotondare gli angoli dei bordi sopra e sotto gli spazi
- Devi conoscere l'imbottitura e i bordi delle celle della tabella
Con questo in mente, prova questo:
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 */
}
Quello che stai effettivamente facendo è incollare un ::before
blocco rettangolare nella parte superiore di tutte le celle nella riga che vuoi che sia preceduta da uno spazio. Questi blocchi sporgono leggermente dalle celle per sovrapporsi ai bordi esistenti, nascondendoli. Questi blocchi sono solo un bordo superiore e inferiore inserito insieme: il bordo superiore costituisce lo spazio vuoto e il bordo inferiore ricrea l'aspetto del bordo superiore originale delle celle.
Nota che se hai un bordo attorno alla tabella stessa e alle celle, dovrai aumentare ulteriormente il margine orizzontale di dei tuoi "blocchi". Quindi, per un bordo di tabella 4px, dovresti invece usare:
margin:-5px -12px 5px; /* 14px = original 10px + 2px for 'uncollapsed' part of table border */
E se la tua tabella usa border-collapse:separate
invece di border-collapse:collapse
, allora dovrai (a) usare l'intera larghezza del bordo della tabella:
margin:-5px -14px 5px; /* 14px = original 10px + 4px full width of table border */
... e anche (b) sostituire la doppia larghezza del bordo che ora deve apparire sotto il divario:
border-bottom:4px solid blue; /* i.e. 4px = cell top border + previous row's bottom border */
La tecnica può essere facilmente adattata a una versione .gapafter, se preferisci, o alla creazione di spazi verticali (colonna) anziché spazi vuoti di riga.
Ecco un codice in cui puoi vederlo in azione: https://codepen.io/anon/pen/agqPpW