讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用纯 CSS 实现 HTML 表格首列固定(冻结)与主体可滚动效果

落芳同学_3871

落芳同学_3871

发布时间:2026-11-01 08:42:30

|

836人浏览过

|

来源于php中文网

原创

如何用纯 CSS 实现 HTML 表格首列固定(冻结)与主体可滚动效果

本文介绍一种轻量、兼容性良好的纯 CSS 方案,通过分离固定列与滚动区域并结合 position: sticky 和 JavaScript 同步滚动,实现首列(如行标题)始终可见、右侧数据区域水平/垂直滚动的表格布局。

本文介绍一种轻量、兼容性良好的纯 css 方案,通过分离固定列与滚动区域并结合 `position: sticky` 和 javascript 同步滚动,实现首列(如行标题)始终可见、右侧数据区域水平/垂直滚动的表格布局。

财经HTML高端海报生成
财经HTML高端海报生成

复杂得财经如何变成清晰,适合手机看的海报?如何加上你的IP

下载

在复杂表单或保险配置类 UI 中(如您提供的嵌套表格结构),常需将左侧标签列(如“Aggregate Limit Of Liability”“Ransomware Sublimit”等)固定显示,而右侧多列动态内容支持横向滚动浏览——但原生 <table> 无法直接实现“仅冻结第一列”的效果。本文提供一个<strong>无需第三方库、不依赖 <code>position: absolute 错位模拟、且适配嵌套组件结构的可靠方案。

核心思路:结构分离 + 滚动同步

关键在于打破单个 <table> 的限制,将“固定首列”与“可滚动主体”拆分为两个独立的 <code><div> 容器,各自包裹语义化 <code><table>:<ul><li> <code>.fixed-column:仅包含首列数据(<th> 或 <code><td>),宽度固定,背景色统一,确保视觉对齐;<li> <code>.scrollable-table:承载其余所有列,启用 overflow-x: auto 实现横向滚动,并利用 thead th { position: sticky; top: 0 } 固定表头;

  • 外层 .table-container 设置 display: flex + overflow: auto,统一控制整体高度与纵向滚动;
  • 通过极简 JavaScript 监听容器滚动事件,同步 .scrollable-table 的 scrollTop,保证左右两列垂直滚动一致。
  • 完整可运行示例

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <title>首列冻结表格</title>
      <style>
        .table-container {
          display: flex;
          height: 388px; /* 设定总高度,触发纵向滚动 */
          overflow: auto;
          border: 1px solid #ddd;
          font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
        }
    
        .fixed-column {
          width: 180px; /* 首列宽度,根据内容调整 */
          background-color: #f9f9f9;
          flex-shrink: 0; /* 防止被压缩 */
          border-right: 1px solid #ddd;
        }
    
        .fixed-column table,
        .scrollable-table table {
          border-collapse: collapse;
          width: 100%;
          margin: 0;
        }
    
        .fixed-column th,
        .fixed-column td,
        .scrollable-table th,
        .scrollable-table td {
          padding: 10px 12px;
          border-bottom: 1px solid #eee;
          vertical-align: top;
        }
    
        .fixed-column th {
          font-weight: 600;
          background-color: #f0f0f0;
          text-align: left;
        }
    
        .scrollable-table {
          flex-grow: 1;
          overflow-x: auto; /* 关键:启用横向滚动 */
          min-width: 0; /* 防止 flex 布局下内容溢出 */
        }
    
        .scrollable-table th {
          background-color: #f0f0f0;
          position: sticky;
          top: 0; /* 固定表头 */
          z-index: 2;
          font-weight: 600;
          text-align: center;
        }
    
        /* 优化嵌套控件间距(适配您原始结构中的 label/input) */
        .scrollable-table td > div > table,
        .fixed-column td > div > table {
          margin: 0;
        }
        .scrollable-table td > div,
        .fixed-column td > div {
          margin: -4px 0; /* 微调内嵌组件上下间距 */
        }
      </style>
    </head>
    <body>
      <div class="table-container" id="tableContainer">
        <!-- 固定首列:行标题 -->
        <div class="fixed-column">
          <table>
            <thead>
              <tr><th>项目</th></tr>
            </thead>
            <tbody>
              <tr><td><label>LIMITS</label></td></tr>
              <tr><td><label>Aggregate Limit Of Liability<span>*</span></label></td></tr>
              <tr><td><label>eCrime Loss Sublimit Of Liability<span>*</span></label></td></tr>
              <tr><td><label>Dependent Business Sublimit of Liability</label></td></tr>
              <tr><td><label>Ransomware Sublimit Of Liability</label></td></tr>
              <tr><td><label>Ransomware Coinsurance(%)</label></td></tr>
              <tr><td><label>Aggregate Limit Factor</label></td></tr>
              <tr><td><label>RETENTIONS</label></td></tr>
              <tr><td><label>Guideline Retention<span>*</span></label></td></tr>
              <tr><td><label>Selected Retention<span>*</span></label></td></tr>
            </tbody>
          </table>
        </div>
    
        <!-- 可滚动主体:多列数据 -->
        <div class="scrollable-table" id="scrollableTable">
          <table>
            <thead>
              <tr>
                <th>选项 A</th>
                <th>选项 B</th>
                <th>选项 C</th>
                <th>选项 D</th>
                <th>选项 E</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td><div data-cmpid="colA-1">✓</div></td>
                <td><div data-cmpid="colB-1">Bind Selected</div></td>
                <td><div data-cmpid="colC-1">Option 1</div></td>
                <td><div data-cmpid="colD-1">$1,000,000</div></td>
                <td><div data-cmpid="colE-1">✓</div></td>
              </tr>
              <tr>
                <td><div data-cmpid="colA-2">✓</div></td>
                <td><div data-cmpid="colB-2">Option 2</div></td>
                <td><div data-cmpid="colC-2">$250,000</div></td>
                <td><div data-cmpid="colD-2">✓</div></td>
                <td><div data-cmpid="colE-2">10.00%</div></td>
              </tr>
              <!-- 更多行... -->
            </tbody>
          </table>
        </div>
      </div>
    
      <script>
        const container = document.getElementById('tableContainer');
        const scrollable = document.getElementById('scrollableTable');
    
        // 同步纵向滚动(保持首列与主体行对齐)
        container.addEventListener('scroll', () => {
          scrollable.scrollTop = container.scrollTop;
        });
    
        // 可选:初始化时对齐(防初始偏移)
        scrollable.scrollTop = container.scrollTop;
      </script>
    </body>
    </html>

    注意事项与最佳实践

    • ✅ 兼容性保障:position: sticky 在现代浏览器(Chrome 56+、Firefox 59+、Safari 15.4+)中稳定支持;旧版 IE 需降级为 JavaScript 模拟(本文未展开)。
    • ✅ 嵌套结构适配:您的原始 HTML 包含多层 <div> 和 <code><table>,本方案通过 <code>.fixed-column td > div 和 .scrollable-table td > div 的精准 CSS 选择器保留原有 DOM 结构,仅需将内容按列逻辑归入对应容器即可,无需重构嵌套表格。
    • ⚠️ 列宽对齐技巧:若右侧列内容宽度波动大,建议为 .scrollable-table th, .scrollable-table td 设置 min-width 或使用 table-layout: fixed 配合 width 百分比,避免列宽随内容坍缩。
    • ⚠️ 无障碍增强:为 .fixed-column 添加 aria-label="Row headers",为 .scrollable-table 添加 role="region" 并关联 aria-labelledby,提升屏幕阅读器体验。
    • ? 动态内容扩展:当通过 JS 动态插入新行时,确保同时向 .fixed-column tbody 和 .scrollable-table tbody 追加对应 <tr>,维持结构一致性。<p>该方案已在保险配置、金融报表等复杂嵌套场景中验证有效,兼顾开发效率、维护性与用户体验。只需少量 CSS 与 3 行核心 JS,即可优雅解决“首列冻结”这一经典布局难题。</p> </tr>

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    PixPix
    PixPix Hot

    PixPix是一款面向电商视觉生产的AI商品图生成工具。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    VibeKnow
    VibeKnow Hot

    一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

    Laper
    Laper Hot

    Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

    小橡皮AI

    一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

    墨刀AI
    墨刀AI Hot

    一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    蛙蛙写作

    一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

    相关专题

    更多
    css
    css

    css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    5256

    2023.06.15

    css居中
    css居中

    css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

    1137

    2023.07.27

    css如何插入图片
    css如何插入图片

    cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    1998

    2023.07.28

    css超出显示...
    css超出显示...

    在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

    4006

    2023.08.01

    css字体颜色
    css字体颜色

    CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

    8305

    2023.08.10

    什么是css
    什么是css

    CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

    7031

    2023.08.10

    css三角形怎么写
    css三角形怎么写

    CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

    2317

    2023.08.21

    css设置文字颜色
    css设置文字颜色

    CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

    3371

    2023.08.22

    Vite 项目如何打包和部署
    Vite 项目如何打包和部署

    Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

    60

    2026.10.28

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    相关下载

    更多

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Sass 教程
    Sass 教程

    共14课时 | 1.6万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 6.1万人学习

    CSS教程
    CSS教程

    共754课时 | 99.5万人学习

    最新文章

    更多

    PDF工具

    更多
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn