Đây là một giải pháp đơn giản và thanh lịch, với một vài lưu ý:
- Bạn thực sự không thể làm cho các khoảng trống trong suốt, bạn cần cung cấp cho chúng một màu cụ thể.
- Bạn không thể làm tròn các góc của đường viền trên & dưới các khoảng trống
- Bạn cần biết phần đệm và đường viền của các ô trong bảng
Với ý nghĩ đó, hãy thử điều này:
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 */
}
Những gì bạn đang làm là dán một hình chữ nhật ::before
khối vào đầu của tất cả các ô trong hàng bạn muốn trước một khoảng trống. Các khối này dính ra khỏi các ô một chút để chồng lên các đường viền hiện có, ẩn chúng. Các khối này chỉ là một đường viền trên và dưới được kẹp lại với nhau: Đường viền trên cùng tạo thành khoảng cách và đường viền dưới cùng tạo lại diện mạo của đường viền trên cùng ban đầu của các ô.
Lưu ý rằng nếu bạn có một đường viền xung quanh bảng cũng như các ô, bạn sẽ cần tăng thêm lề ngang của các 'khối' của mình. Vì vậy, đối với đường viền bảng 4px, thay vào đó, bạn sẽ sử dụng:
margin:-5px -12px 5px; /* 14px = original 10px + 2px for 'uncollapsed' part of table border */
Và nếu bảng của bạn sử dụng border-collapse:separate
thay vì border-collapse:collapse
, thì bạn sẽ cần (a) sử dụng chiều rộng đường viền bảng đầy đủ:
margin:-5px -14px 5px; /* 14px = original 10px + 4px full width of table border */
... Và cũng (b) thay thế chiều rộng gấp đôi của đường viền hiện cần xuất hiện bên dưới khoảng trống:
border-bottom:4px solid blue; /* i.e. 4px = cell top border + previous row's bottom border */
Kỹ thuật này dễ dàng thích ứng với phiên bản .gapafter, nếu bạn thích hoặc để tạo các khoảng trống dọc (cột) thay vì các khoảng trống hàng.
Đây là một codepen nơi bạn có thể thấy nó hoạt động: https://codepen.io/anon/pen/agqPpW