Aquí hay una solución simple y elegante, con algunas advertencias:
- En realidad, no puede hacer que los espacios sean transparentes, debe darles un color específico.
- No puede redondear las esquinas de los bordes encima y debajo de los espacios
- Debe conocer el relleno y los bordes de las celdas de la tabla.
Con eso en mente, intente esto:
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 */
}
Lo que realmente está haciendo es pegar un ::before
bloque rectangular en la parte superior de todas las celdas en la fila que desea precedido por un espacio. Estos bloques sobresalen un poco de las celdas para superponer los bordes existentes, ocultándolos. Estos bloques son solo un borde superior e inferior intercalados: el borde superior forma el espacio y el borde inferior recrea la apariencia del borde superior original de las celdas.
Tenga en cuenta que si tiene un borde alrededor de la tabla en sí y de las celdas, deberá aumentar aún más el margen horizontal -ve de sus 'bloques'. Entonces, para un borde de tabla de 4px, en su lugar usaría:
margin:-5px -12px 5px; /* 14px = original 10px + 2px for 'uncollapsed' part of table border */
Y si su tabla usa en border-collapse:separate
lugar de border-collapse:collapse
, entonces necesitará (a) usar el ancho completo del borde de la tabla:
margin:-5px -14px 5px; /* 14px = original 10px + 4px full width of table border */
... y también (b) reemplace el doble ancho del borde que ahora debe aparecer debajo del espacio:
border-bottom:4px solid blue; /* i.e. 4px = cell top border + previous row's bottom border */
La técnica se adapta fácilmente a una versión .gapafter, si lo prefiere, o para crear espacios verticales (columnas) en lugar de espacios de filas.
Aquí hay un codepen donde puedes verlo en acción: https://codepen.io/anon/pen/agqPpW