Вот простое и элегантное решение с несколькими оговорками:
- Вы не можете сделать прозрачные промежутки, вам нужно придать им определенный цвет.
- Вы не можете закруглить углы границ выше и ниже пробелов
- Вам нужно знать отступы и границы ячеек таблицы.
Имея это в виду, попробуйте это:
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 */
}
То, что вы на самом деле делаете, это наклеивает прямоугольник ::before
блок в верхнюю часть всех ячеек в строке, которой вы хотите предшествовать пробел. Эти блоки немного торчат из ячеек, перекрывая существующие границы, скрывая их. Эти блоки представляют собой только верхнюю и нижнюю границу, зажатую вместе: верхняя граница образует зазор, а нижняя граница создает вид исходной верхней границы ячеек.
Обратите внимание, что если у вас есть рамка вокруг самой таблицы, а также ячеек, вам нужно будет еще больше увеличить горизонтальное поле ваших «блоков». Так что для границы таблицы 4px вы бы вместо этого использовали:
margin:-5px -12px 5px; /* 14px = original 10px + 2px for 'uncollapsed' part of table border */
И если ваша таблица использует border-collapse:separate
вместо border-collapse:collapse
, то вам нужно (а) использовать полную ширину границы таблицы:
margin:-5px -14px 5px; /* 14px = original 10px + 4px full width of table border */
... а также (b) замените двойную ширину границы, которая теперь должна появиться ниже разрыва:
border-bottom:4px solid blue; /* i.e. 4px = cell top border + previous row's bottom border */
Техника легко адаптируется к версии .gapafter, если вы предпочитаете, или к созданию вертикальных (столбцовых) пропусков вместо пропусков строк.
Вот кодекс, где вы можете увидеть его в действии: https://codepen.io/anon/pen/agqPpW