固定定位和表格标题

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费积分!

您无法将 position: sticky; 应用于 <thead>。也不能应用于 <tr>。但您可以将 position: sticky; 应用于 <th>,这意味着您 *可以* 在普通的 <table> 中创建固定标题。这很棘手,因为如果您不知道这个奇怪的怪癖,很难责怪您。将固定定位应用于表格标题等父元素比将固定定位应用于每行中的单个元素更有意义。

问题归结于这样一个事实,即粘性需要 position: relative 来工作,而 在 CSS 2.1 规范中不适用于 <thead><tr>

如果您需要实现固定表格标题,但不知道 <th> 的解决方法,那么对此有两种非常极端的反应。

  • 完全不要使用表格标记。 相反,使用不同的元素 (<div> 等) 和其他 CSS 布局方法来复制表格的样式,但不会被锁定在使用 position: relative 和创建 position: sticky 父元素。
  • 使用表格元素, 但使用新的 display 值完全删除所有默认样式。

第一个方法很危险,因为您没有使用语义化和可访问的元素来读取和导航内容。第二个方法几乎相同。您可以选择这条路线,但需要 非常小心地重新应用语义 角色。

无论如何,如果您坚持使用 <th> 元素的 sticky 值,那么所有这些都不重要。

查看示例
使用 CSS 的固定表格标题
by Chris Coyier (@chriscoyier)
CodePen 上。

在表格中间将表格标题作为一行可能有点奇怪,但这只是为了说明这个想法。我设想的是用不同颜色的标题栏来区分不同运动队的球员。

每当我想到数据表格时,我也会想到如何使它们具有响应性。幸运的是,有很多方法,所有方法都取决于以最佳方式对数据进行分组和探索。