Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • HTML

  • CSS

    • css 编码指南
    • CSS3 的 calc 使用
    • 表格固定表头的几种方法
      • el-table
      • 表格 HTML 结构部分分表头和表体两部分
    • nth-child 和 nth-of-type 的区别
    • 修改浏览器默认滚动条
    • 为什么两个宽度为父元素一半的子元素会超出父元素
  • 页面
  • CSS
Henry
2020-01-11
目录

表格固定表头的几种方法

后台管理的项目经常要用到 table 表格来做数据统计, 数据少时还好, 但如果表格中的数据是有滚动条的, 那么用户在滚动的时候会希望表格头是固定在上方, 否则没办法看出单元格数据对应的含义.

关于使用纯 CSS 实现固定表头的方法网上一大堆, 这里就不再一一介绍了, 着重挑几篇大家看看即可: 浅谈表格组件的实现:固定表头和固定列 - 知乎 (opens new window), 纯 CSS 实现表头固定 - 司徒正美 - 博客园 (opens new window), 纯 css 实现 table 的表头固定 tbody 内容显示垂直滚动条-码云笔记 (opens new window)

# el-table

Element 的 table 设置 height 即可实现

关于 height 的说明:

Table 的高度,默认为自动高度。如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。

就是说你如果想给 table 一个固定的高度, 那么直接设置 height 的值即可. 比如 200px 的高度, 那么 height="200", height="200px", :height="200" 都是可以的. 如果是要设置百分比的高度, 那必须保证父元素有高度. 比如一般后台管理页面, 上面是一排操作按钮, 下面是表格展示数据, 我就习惯给 el-table 套一个父元素, 利用绝对定位来自动沾满整个屏幕

.wrapper {
  position: absolute;
  top: 50px; /* 预留操作按钮的高度 */
  bottom: 0;
  left: 0;
  right: 0;
}
1
2
3
4
5
6
7

这样 el-table 设置 header="100% 即可

可以在这里查看效果: el-table-height (opens new window)

# 表格 HTML 结构部分分表头和表体两部分

结构类似下面这种的:

<div class="table-wrapper">
  <div class="table-header"></div>
  <div class="table-body"></div>
</div>
1
2
3
4

可以利用 position: sticky 来实现, 不过不支持 IE 这种妖艳贱货, 可以在 Can I use (opens new window) 查看支持情况

具体的介绍可以看看张鑫旭大佬的文章: 杀了个回马枪,还是说说 position:sticky 吧 « 张鑫旭-鑫空间-鑫生活 (opens new window)

咱们直接进入主题:

  1. 确保 table-wrapper 没有设置 overflow 属性, 如果设置了, 改为: overflow: visible
  2. 父级元素也不能设置固定的 height 高度值, 如果设置了, 改为: height: auto
  3. table-header 添加一下样式:
    .table-header {
      position: sticky;
      top: 0;
      z-index: 2; /* 防止被 body 遮挡 */
    }
    
    1
    2
    3
    4
    5

好了, 你的表格已经固定表头了, 又可以愉快的滚动了

当然, 这个方法也可以用在 el-table 没有设置 height 上. 不过对于设置了 border 的 el-table, 由于 .el-table 有一个 border-top, 导致滚动的时候表头有跳动错位, 需要小小的修改一下 table 样式.

.el-table {
  border-top: none;
}
.el-table__header-wrapper {
  border-top: 1px solid #ebeef5;
}
1
2
3
4
5
6
编辑 (opens new window)
#Css#Table
上次更新: 5/27/2023, 1:02:05 PM
CSS3 的 calc 使用
nth-child 和 nth-of-type 的区别

← CSS3 的 calc 使用 nth-child 和 nth-of-type 的区别→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式