Aqui está uma solução simples e elegante, com algumas ressalvas:
- Na verdade, você não pode tornar as lacunas transparentes; precisa dar uma cor específica.
- Você não pode arredondar os cantos das bordas acima e abaixo das lacunas
- Você precisa conhecer o preenchimento e as bordas das células da tabela
Com isso em mente, tente o seguinte:
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 */
}
Na verdade, o que você está fazendo é colocar um ::before
bloco retangular na parte superior de todas as células da linha que você deseja preceder por uma lacuna. Esses blocos se destacam um pouco das células para sobrepor as bordas existentes, ocultando-as. Esses blocos são apenas uma borda superior e inferior agrupadas: a borda superior forma a lacuna e a borda inferior recria a aparência da borda superior original das células.
Observe que, se você tiver uma borda ao redor da própria tabela e das células, precisará aumentar ainda mais a margem horizontal dos seus 'blocos'. Portanto, para uma borda de tabela de 4 px, você deve usar:
margin:-5px -12px 5px; /* 14px = original 10px + 2px for 'uncollapsed' part of table border */
E se sua tabela usar em border-collapse:separate
vez de border-collapse:collapse
, será necessário (a) usar a largura completa da borda da tabela:
margin:-5px -14px 5px; /* 14px = original 10px + 4px full width of table border */
... e também (b) substitua a largura dupla da borda que agora precisa aparecer abaixo da lacuna:
border-bottom:4px solid blue; /* i.e. 4px = cell top border + previous row's bottom border */
A técnica é facilmente adaptada a uma versão .gapafter, se você preferir, ou à criação de intervalos verticais (coluna) em vez de intervalos de linhas.
Aqui está um código de código em que você pode vê-lo em ação: https://codepen.io/anon/pen/agqPpW