el-table 滚动条(固定列)问题

4,913 阅读3分钟

当前的需求时 表格里最后一列是冻结的情况,如果还想默认直接展示滚动条。

问题一:表格滚动。

使用el-table自带的max-height:'200'属性,当然height也可以动态计算。

image.png

问题二:显示滚动条。

默认是不显示滚动条的,我们需要设置一下滚动条样式 ::-webkit-scrollbar 滚动条就出来了。

table的父盒子加个class="table"
.table {
    padding: 20px;
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar {
      width: 6px; // 横向滚动条
      height: 6px; // 纵向滚动条
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
      background-color: #dde;
      border-radius: 3px;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track{
      background: white;
      border-radius:2px;
    }
  }

问题三:滚动条占据了盒子的空间。

当滚动条出来之后 滚动条占据了盒子的宽高 会挤压表格导致最后一行或者右侧一列挤压表格样式。 设置overflow: overlay;使滚动条悬浮起来。

.table {
    padding: 20px;
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar {
      width: 6px; // 横向滚动条
      height: 6px; // 纵向滚动条
    }
    ::v-deep  .el-table__body-wrapper{
      overflow: overlay;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
      background-color: #dde;
      border-radius: 3px;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track{
      background: white;
      border-radius:2px;
    }
  }

如果您的没有固定列 到这里问题应该都已经解决了 但是如果有固定列 固定列是浮动起来的 会遮挡滚动条,那该怎么办呢?那就挪动固定列。

问题四:纵向滚动条看不见。

右侧有固定列,导致纵向滚动条被遮挡住了,想法就是对固定列的盒子进行挪动 因为滚动条的宽度是6px 那就把固定列向左移动6px.同理固定列的底部也遮挡了滚动条 那也往上移动6px;

.table {
    padding: 20px;
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar {
      width: 6px; // 横向滚动条
      height: 6px; // 纵向滚动条
    }
    ::v-deep  .el-table__body-wrapper{
      overflow: overlay;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
      background-color: #dde;
      border-radius: 3px;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track{
      background: white;
      border-radius:2px;
    }
    ::v-deep .el-table__fixed-right{
      right:6px!important;
      bottom: 6px!important;
    }
  }

问题五:表头左右移动 固定列右侧有个6px的间隙 表头滚动的时候 会看的见其他表头。

那就补盒子 定位补盒子,把盒子补到这个间隙里。在table父盒子下新增子盒子class="supplement" (因为表头都有底部边框,补的盒子也得有)。

.table {
    padding: 20px;
    position: relative;
    .supplement{
      position: absolute;
      top: 20px;
      right: 19.5px;
      z-index: 10;
      width: 7px;
      height: 54px;
      box-sizing: border-box;
      background: #FAFAFA;
      border-bottom: 1px solid #dfe6ec;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar {
      width: 6px; // 横向滚动条
      height: 6px; // 纵向滚动条 必写
    }
    ::v-deep  .el-table__body-wrapper{
      overflow: overlay
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
      background-color: #dde;
      border-radius: 3px;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track{
      background: white;
      border-radius:2px;
    }
    ::v-deep .el-table__fixed-right{
      right:6px!important;
      bottom: 6px!important;
    }
  }

问题六:当页面左右不滚动的时候,固定列最后一行有条线。

其实这个时候 已经很完美了 但是当页面不左右滚动的时候 也就是底部没横向滚动条了,但是当页面滚动到最底部的时候 会有一条线。

.table {
    padding: 20px;
    position: relative;
    .supplement{
      position: absolute;
      top: 20px;
      right: 19.5px;
      z-index: 10;
      width: 7px;
      height: 54px;
      box-sizing: border-box;
      background: #FAFAFA;
      border-bottom: 1px solid #dfe6ec;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar {
      width: 6px; // 横向滚动条
      height: 6px; // 纵向滚动条 必写
    }
    ::v-deep  .el-table__body-wrapper{
      overflow: overlay
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
      background-color: #dde;
      border-radius: 3px;
    }
    ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track{
      background: white;
      border-radius:2px;
    }
    // 问题六
    ::v-deep .el-table__fixed-right::before{
      background: #FFFFFF!important;
    }
    ::v-deep .el-table__fixed-right{
      right:6px!important;
      bottom: 6px!important;
    }
  }