小编典典

仅冻结 html 表格的第一行(固定表格标题滚动)

all

我想制作一个冻结顶行的 html 表(所以当你垂直向下滚动时,你总是可以看到它)。

有没有一种聪明的方法可以在没有 javascript 的情况下实现这一点?

请注意,我不需要冻结左列。


阅读 57

收藏
2022-08-20

共1个答案

小编典典

这称为固定页眉滚动。有许多记录在案的方法:

http://www.imaputz.com/cssStuff/bigFourVersion.html

如果没有 JavaScript,您将无法有效地实现这一目标……尤其是如果您想要跨浏览器支持。

您采取的任何方法都有许多问题,尤其是在跨浏览器/版本支持方面。

编辑:

即使不是你要修复的表头,而是第一行数据,概念还是一样的。我不是你所说的100%。

另外认为 我的公司委托我研究一种可以在 IE7+、Firefox 和 Chrome 中运行的解决方案。

经过数月的搜索、尝试和挫折之后,它真的归结为一个根本问题。在大多数情况下,为了获得固定的标题,您需要实现固定的高度/宽度列,因为大多数解决方案涉及使用两个单独的表,一个用于标题,它将浮动并停留在包含数据的第二个表上.

//float this one right over second table
<table>
  <tr>
    <th>Header 1</th>
    <th>Header 2</th>
  </tr>
</table>

<table>
//Data
</table>

另一种尝试的方法是利用 tbody 和 thead 标签,但这也是有缺陷的,因为 IE 不允许你在 tbody
上放置滚动条,这意味着你不能限制它的高度(太愚蠢的 IMO)。

<table>
  <thead style="do some stuff to fix its position">
  <tr>
    <th>Header 1</th>
    <th>Header 2</th>
  </tr>
  </thead>
  <tbody style="No scrolling allowed here!">
     Data here
  </tbody>
</table>

这种方法有很多问题,例如确保精确的像素宽度,因为表格非常可爱,不同的浏览器会根据计算以不同的方式分配像素,而您根本无法(AFAIK)保证分布在所有情况下都是完美的。如果您的表格中有边框,这将变得非常明显。

我采取了不同的方法并说螺旋表,因为您无法做出此保证。我用 div 来模拟表格。这也有定位行和列的问题(主要是因为浮动有问题,使用内联块不适用于
IE7,所以它真的让我使用绝对定位将它们放在适当的位置)。

那里有人制作了与我的方法非常相似的 Slick Grid,您可以使用一个很好的(尽管很复杂)示例来实现这一点。

https://github.com/6pac/SlickGrid/wiki

2022-08-20