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

如何实现仅tbody滚动时th与td宽度一致(含滚动条宽度适配)

双表格实现tbody滚动、表头宽度对齐且背景覆盖滚动条区域方案

核心调整逻辑

  • 新增公共父容器统一管控两个表格的总宽度
  • 启用table-layout: fixed强制表格按设定列宽渲染,不受内容长度影响
  • 内容表格主动减去滚动条宽度,表头表格保持100%宽度实现背景铺满整个顶部区域(含滚动条上方位置)
  • 强制tbody内的tr保持表格行布局,匹配列宽规则

调整后代码

HTML代码

<div class="table-wrap">
  <!-- 头部表格 -->
  <table class="table-head">
    <thead>
      <tr>
        <th class="red">Header 1</th>
        <th class="red">Header 2</th>
        <th class="red">Header 3</th>
        <th class="red">Header 4</th>
        <th class="red">Header 5</th>
      </tr>
    </thead>
  </table>
  <!-- 内容表格 -->
  <table class="table-body">
    <tbody>
      <tr>
        <td class="red">Content 1</td>
        <td class="red">Content 2</td>
        <td class="red">Content 3</td>
        <td class="red">Content 4</td>
        <td class="red">Content 5</td>
      </tr>
      <tr>
        <td class="red">Content 1</td>
        <td class="red">Content 2</td>
        <td class="red">Content 3</td>
        <td class="red">Content 4</td>
        <td class="red">Content 5</td>
      </tr>
      <tr>
        <td class="red">Content 1</td>
        <td class="red">Content 2</td>
        <td class="red">Content 3</td>
        <td class="red">Content 4</td>
        <td class="red">Content 5</td>
      </tr>
      <tr>
        <td class="red">Content 1</td>
        <td class="red">Content 2</td>
        <td class="red">Content 3</td>
        <td class="red">Content 4</td>
        <td class="red">Content 5</td>
      </tr>
      <tr>
        <td class="red">Content 1</td>
        <td class="red">Content 2</td>
        <td class="red">Content 3</td>
        <td class="red">Content 4</td>
        <td class="red">Content 5</td>
      </tr>
    </tbody>
  </table>
</div>

CSS代码

/* 公共容器 可自定义总宽度 */
.table-wrap {
  width: 600px;
}
/* 统一表格布局规则 合并边框避免错位 */
table {
  table-layout: fixed;
  border-collapse: collapse;
  width: 100%;
  border:1px solid red;
}
/* 表头背景直接铺满整个顶部 包含滚动条上方区域 */
.table-head th {
  background: red; /* 替换为你需要的表头背景色即可 */
}
/* 内容表格宽度减去滚动条默认宽度(约17px) */
.table-body {
  width: calc(100% - 17px);
}
/* 滚动配置 */
.table-body tbody {
  display: block;
  height: 50px;
  overflow-y: scroll;
}
/* 强制tbody内的tr按表格行布局 占满内容表格宽度 */
.table-body tbody tr {
  display: table;
  width: 100%;
}
/* 统一列宽 5列的话每列设20%即可 也可自定义固定px值 */
th.red, td.red {
  width: 20%;
  border:1px solid red;
}

可选跨浏览器兼容方案

如果需要适配不同浏览器的滚动条宽度差异,可添加以下JS动态计算滚动条宽度,替换固定的17px值:

const getScrollbarWidth = () => {
  const div = document.createElement('div')
  div.style.width = '100px'
  div.style.height = '100px'
  div.style.overflowY = 'scroll'
  div.style.position = 'absolute'
  div.style.top = '-9999px'
  document.body.appendChild(div)
  const scrollbarWidth = div.offsetWidth - div.clientWidth
  document.body.removeChild(div)
  return scrollbarWidth
}
document.querySelector('.table-body').style.width = `calc(100% - ${getScrollbarWidth()}px)`

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:39:02