如何实现头部固定的table表格

390 阅读1分钟

如何实现头部固定的table表格

image.png

日常开发中我经常会遇到table固定表头的功能,从来没系统性的记录过,导致每次开发的时候都会忘记,因此开了一篇帖子去记录下这次开发该功能的完整记录

代码结构如下

html

<table class="tableList">
    //表头
  <thead class="thead">
    <tr>
      <th></th>
    </tr>
  </thead>
  //表体可滚动部分
  <tbody class="tbody" ref="tbodys">
    <tr>
      <td></td>
    </tr>
    <tr>
      <td></td>
    </tr>
    <tr>
      <td></td>
    </tr>
    <tr>
      <td></td>
    </tr>
  </tbody>
</table>

css

.tableList {
    flex: 1;
    .tbody {
      background: unset;
      display: block;
      overflow: auto;
    }
    .tbody,.thead {
      background: linear-gradient(180deg, #204375 11%, rgba(6,18,24,0) 97%);
      opacity: 1;
      height: 72px;
      tr{
        width:100%;
        display: table;
        table-layout: fixed;/**表格列的宽度由表格宽度决定,不由内容决定*/
        height:36px;
        text-align: center;
        border-bottom: 1px dashed #4B73AC;
        background: #0A1A34;
        th,td{
          font-size: 12px;
          font-family: HarmonyOS Sans SC-Regular, HarmonyOS Sans SC;
          font-weight: 400;
          color: #FFFFFF;
        }
      }
    }
  }

tbody设置为块级元素后overflow: auto;才能奏效

如果将 table 标签的 display 属性设置为默认值 table,那么任何设置 overflow 属性可能会导致出现问题。这是因为表格的布局方式不同于其他块级元素,也不同于内联元素,会影响默认情况下 overflow  值如何应用到表格上。

补充说明,当 table 的 display 属性值为 table 时,overflow 属性值也可以应用到 td 标签上。但是,这可能会导致表格出现意外的滚动条,特别是在包含 colspan 或 rowspan 属性的单元格或跨行跨列时。

所以,将 table 标签的 display 属性设置为 block,然后将 overflow 属性设置为 auto,是一种更安全的方式,兼容主流浏览器,可以正确地控制表格内部的滚动条和溢出内容。