You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox中Table Sticky Header失焦后消失问题求助

Firefox下CSS粘性表头失焦消失的修复方案

问题背景

我想用纯CSS实现表格表头的粘性效果,当前代码在滚动时表头能固定在顶部,但在Firefox浏览器中,光标移出表格或元素失焦后,粘性表头会消失,只有继续滚动才会重新出现。

原有代码

CSS代码

table {
  border:1px solid black;
  border-collapse:collapse;
  width: 600px
}

th {
  border:1px solid green;
  padding: 6px 10px;
  background: green;
  color: #FFF
}

td {
  border-bottom: 1px solid green;
  border-left: 1px solid green;
  padding: 6px 10px;
}

tr.sticky {
    z-index: 99;
    position: sticky;
    top: 0;
}

HTML代码

<table>
<tr class="sticky">
  <th>Th1</th>
  <th>Th2</th>
  <th>Th3</th>
</tr>
<tr>
    <td>td1</td>
    <td>td2</td>
    <td>td3</td>
</tr>
<tr>
    <td>td1</td>
    <td>td2</td>
    <td>td3</td>
</tr>
<!-- 省略重复表格行 -->
<tr>
    <td>td1</td>
    <td>td2</td>
    <td>td3</td>
</tr>
</table>

修复方案

该问题源于Firefox对表格元素上position: sticky的渲染bug,以下两种纯CSS方案可解决:

方案一:给表格添加table-layout: fixed

给<table>元素添加固定布局属性,强制浏览器采用统一的表格渲染规则,修复粘性表头的失焦消失问题:

table {
  border:1px solid black;
  border-collapse:collapse;
  width: 600px;
  table-layout: fixed; /* 新增属性 */
}

/* 其余样式保持不变 */

方案二:将粘性定位移至<th>元素

把position: sticky从表格行转移到表头单元格上,绕过Firefox对表格行的粘性渲染bug:

th {
  border:1px solid green;
  padding: 6px 10px;
  background: green;
  color: #FFF;
  position: sticky; /* 移至th元素 */
  top: 0;
  z-index: 99;
}

/* 移除tr.sticky相关样式 */

以上两种方案均能让表头在光标失焦或停止滚动时保持粘性,且完全基于CSS实现。

内容的提问来源于stack exchange,提问作者Jay.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:13:20