需求:使用原生H5 table 标签,完成固定两列且支持横向滚动的表格。
其中红色框出的区域是需要固定的列,绿色框出的区域是动态可横向滚动的多个列。
<style scoped>
table {
border-collapse: separate;
border-spacing: 0;
width: 100%;
table-layout: fixed
}
th, td {
border: 1px solid #999;
padding: 8px;
text-align: center;
}
th {
background-color: #f2f2f2;
}
.scrollable {
overflow-x: auto;
}
.sticky-th-1 {
position: sticky;
background-color: #f2f2f2;
z-index: 10;
left: 0;
}
.sticky-th-2 {
position: sticky;
background-color: #f2f2f2;
z-index: 9;
left: 50px;
}
.sticky-td-1 {
position: sticky;
background-color: white;
z-index: 8;
left: 0;
}
.sticky-td-2 {
position: sticky;
background-color: white;
z-index: 7;
left: 50px;
}
.sticky-td-3 {
position: sticky;
background-color: white;
z-index: 6;
left: 200px;
}
</style>
将table包裹于div中,且该div class为scrollable
,由于需要固定两列,且第二列除第一行外又分为两个子列,所以这里我们根据表头里指定的固定宽度(width)设置了多个sticky-td
和sticky-th
。
border-collapse: separate;
separate
模式下,每个 <td>
、<th>
的边框是“自己独立拥有”的;相邻单元格之间不再“共用一条边框”,而是靠 border-spacing
控制间距;border-spacing: 0
保证视觉上仍然是无间隙紧贴,但边框仍是独立渲染的;sticky 的单元格此时拥有完整的四个边框,不受“边框合并”的影响;所以,sticky 列的右侧边框能够正常渲染出来,不会因为 sticky 或滚动而“消失”。