【发布时间】:2019-09-04 12:46:00
【问题描述】:
考虑如下表结构:
<table border="1px">
<thead>
<tr>
<td rowspan="2">Item No</td>
<th colspan="2">Store ABC</th>
<th colspan="2">Store DEF</th>
</tr>
<tr>
<th>Baskets</th>
<th>Customers</th>
<th>Baskets</th>
<th>Customers</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
我想让表格标题保持粘性,以便在向下滚动表格时保持可见。
只有一个标题行时很容易。但是,如果有两个,事情就会变得棘手。我想出了以下CSS:
thead th, thead td {
position: sticky;
top: 0;
background: #eee;
}
它“几乎”可以工作,除了滚动表格时,两个标题行有点“滑动”到相同的位置,第二行位于第一行的顶部。
如何在向下滚动表格时不改变外观的方式使两个标题行保持粘性(即整个标题仍然是一个“块”并且它的两个不同的行保持在原位)?
强制 jsFiddle:http://jsfiddle.net/juyvcLd6/3/
--- 更新
分别用class="first"和class="second"标识两个标题行,并添加以下css:
thead tr.first th, thead tr.first td {
position: sticky;
top: 0;
background: #eee;
}
thead tr.second th, thead tr.second td {
position: sticky;
top: 17px;
background: #eee;
}
具有在滚动表格时将标题行保持在一起的效果。但是,top: 17px 元素在很大程度上取决于行的实际呈现大小。例如,如果用户的浏览器呈现不同的文本大小,那么一切都会失败。
另外,这种方法的缺点是会以一种非常奇怪的方式去除标题边框。
滚动表格时如何确保:
- 第二行的
top: xxx规则实际上反映了第一行的真实高度? - 边框与表格未滚动时的外观保持一致?
查看更新的 jsFiddle:http://jsfiddle.net/juyvcLd6/4/
【问题讨论】:
-
您的 tr.first 和 tr.second 方法挽救了这一天。谢谢!
-
在大多数情况下,接受一些标题单元格的固定高度是完全可行的,这种类型的解决方案就像一个魅力,不需要粗暴的 JS hack。
标签: html css html-table sticky