elementUI table fixed设置后,表格无法对齐,滚动条被覆盖(亲测有用)

本文介绍了解决 ElementUI 中 table 使用 fixed 功能时出现的滚动条被覆盖及行不对齐的问题。提供了 CSS 样式的调整方法,包括设置固定列高度自适应、解决表格内容挤占空间以及调整滚动条样式。

elementUI table fixed设置后,表格无法对齐,滚动条被覆盖

elementUI table fixed设置后,表格无法对齐,滚动条被覆盖
element中的table表格功能是非常好用的一款功能,但是在实际使用中发现了两个问题:

1、table开启fixed功能后底部滚动条被覆盖:
在这里插入图片描述

滚动条被覆盖,导致被覆盖部分没办法拖动

解决方法:

设置公共样式,将被遮罩部分减少
// 让固定列的高自适应,且设置!important覆盖ele-ui的默认样式
// 20px 为滚动条的高度
.el-table__fixed, .el-table__fixed-right{
height: calc(100% - 20px) !important;
}

上面代码写完后,会遇到另外一个问题,但没有滚动条的时候,内容会给挤上去,如图所示

image.png

这时候就需要加上另外一个代码了

// 当表格没有滚动条时
.el-table__body-wrapper.is-scrolling-none.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-none.el-table__fixed{
height: 100% !important;
box-shadow: none !important;
}

ps:个人项目实际测试过程中,其实只要
.el-table__fixed-body-wrapper {
height:100 !import;
}

就行

2、table开启fixed功能后,上下滚动行无法对齐

如图所示:
在这里插入图片描述

表格滑动到最后一行后出现无法对齐的情况,这个问题主要是滚动条的原因,因为你设置了::-webkit-scrollbar{ width:1px; height:10px; },即:滚动条的width和height不一致导致的,设置成一样的就好了。

解决方法:

通过css样式,修改表格样式
.el-table__fixed-body-wrapper .el-table__body {
padding-bottom: 20px; // 滚动条高度
}

ps:这个高度并不是20px,而是你::-webkit-scrollbar的height多高,你就最好写多高,这样差异是最小的

复制代码
如果没有生效注意使用deep穿透改样式,或者加上!important

注:本项目所有的el-table表格的滚动条都增加了高度,故解决方法都是写在全局样式里面,请根据实际情况,修改相应的样式

个人结论:
.el-table_fixed, el-table__fixed-right {
height:100% !important;
}
.el-table__fixed-body-wrapper {
height:100 !import;
}
.el-table__fixed-body-wrapper .el-table__body {
padding-bottom: 20px; // 滚动条高度
}

参考文献:
https://link.juejin.cn/?target=https%3A%2F%2Fwww.cnblogs.com%2Fsixrookie%2Fp%2F14777274.html
https://link.juejin.cn/?target=https%3A%2F%2Fblog.youkuaiyun.com%2Fnick_king%2Farticle%2Fdetails%2F109583883

本文转载地址
https://juejin.cn/post/7124568180881621000

<think>问题分析:当修改了el-table滚动条宽度后,设置fixed出现高度差。这是因为ElementUI的固定列实现机制中,固定列和主体表格是分开的两个独立滚动区域,修改滚动条宽度会导致两个区域的高度计算不一致。解决方案:需要同调整固定列区域的滚动条宽度,确保高度一致。###解决步骤1.**同步修改固定列的滚动条样式**:在原有滚动条样式基础上,增加对固定列区域的样式覆盖2.**关键CSS代码**:```css/*主体表格滚动条调整*/ .el-table__body-wrapper::-webkit-scrollbar {width:12px; /*与固定列一致*/ }/*固定列区域滚动条调整 */.el-table__fixed-right, .el-table__fixed {height:100%!important; /*确保高度继承*/ }.el-table__fixed-body-wrapper::-webkit-scrollbar{width:12px;/*必须与主体表格滚动条宽度相同*/height:0!important; /*隐藏水平滚动条(固定列不需要)*/ }``` ###完整示例```css/*统一设置滚动条宽度*/ .el-table__body-wrapper::-webkit-scrollbar,.el-table__fixed-body-wrapper::-webkit-scrollbar {width:12px;} /*隐藏固定列的水平滚动条*/ .el-table__fixed-body-wrapper::-webkit-scrollbar:horizontal{height:0!important; }/*修复高度差:确保固定列容器高度100% */.el-table__fixed-right,.el-table__fixed {height: calc(100% -12px)!important; /*减去滚动条宽度 */} ```###注意事项-**高度计算**:如果滚动条宽度为12px,固定列容器高度需减去该值(`calc(100% -12px)`)避免溢出-**浏览器兼容**:同样需考虑Firefox等非WebKit浏览器```css/* Firefox兼容 */.el-table__fixed-right,.el-table__fixed {scrollbar-width: thin; /*与主体表格一致 */}```- **动态场景**:当表格数据动态变化,可能需要调用`doLayout`方法刷新表格布局```javascriptthis.$nextTick(()=> {this.$refs.tableRef.doLayout();});```§§相关问题§§1.如何解决el-table固定列和表头同使用出现的样式错位?2.el-table中如何实现固定列的自定义滚动条样式同步? 3.el-table滚动条宽度改变后如何动态调整布局? 4.如何修复el-table固定列在数据更新后出现的滚动条位置偏移? 5.在移动端如何隐藏el-table的固定列滚动条但保持功能?</think>当在 Element UI 的 `<el-table>` 中修改滚动条宽度后设置列固定(`fixed`)属性出现高度差,这是因为固定列和滚动区域的布局计算不一致导致的。以下是完整解决方案: ### 问题原因 1. **布局机制冲突**: - 固定列使用独立渲染层(`position: sticky`) - 滚动条宽度变化影响表格主体容器高度计算 2. **默认样式限制**: - 固定列区域高度默认未包含滚动条高度 - 滚动条宽度改变后高度差 = 新滚动条高度 - 原始滚动条高度(6px) ### 解决方案 ```css /* 核心修复方案 */ .el-table { /* 关键:统一滚动条宽度 */ --scroll-width: 12px; /* 自定义宽度 */ } /* 修复固定列高度 */ .el-table__fixed, .el-table__fixed-right { height: calc(100% - var(--scroll-width)) !important; } /* 同步滚动条宽度 */ .el-table__body-wrapper::-webkit-scrollbar { width: var(--scroll-width); height: var(--scroll-width); /* 水平滚动条高度 */ } /* 修复表头对齐 */ .el-table__header-wrapper { padding-right: var(--scroll-width) !important; } ``` ### 完整示例 ```css /* 全局修复方案 */ .el-table { --scroll-bar-width: 12px; /* 自定义宽度 */ } /* 修复固定列高度 */ .el-table__fixed, .el-table__fixed-right { height: calc(100% - var(--scroll-bar-width) + 1px) !important; top: auto !important; /* 解除默认定位 */ } /* 调整表头对齐 */ .el-table__header { width: calc(100% - var(--scroll-bar-width)) !important; } /* 同步滚动条 */ .el-table__body-wrapper::-webkit-scrollbar { width: var(--scroll-bar-width); height: var(--scroll-bar-width); } /* 修复Firefox */ @supports (scrollbar-width: auto) { .el-table__body-wrapper { scrollbar-width: auto; } .el-table__fixed { height: calc(100% - 12px) !important; /* 对应自定义宽度 */ } } ``` ### 动态调整方案(Vue) ```html <template> <el-table ref="myTable" :data="tableData"> <el-table-column prop="date" label="日期" fixed></el-table-column> <!-- 其他列 --> </el-table> </template> <script> export default { mounted() { this.$nextTick(() => { // 动态设置CSS变量 const scrollWidth = 12; this.$refs.myTable.$el.style.setProperty('--scroll-bar-width', `${scrollWidth}px`); // 强制重排布局 this.$refs.myTable.doLayout(); }); } } </script> ``` ### 注意事项 1. **计算精度问题**:使用 `calc(100% - Npx)` 建议增加 1px 冗余值 2. **浏览器兼容**:需同处理 Webkit 和标准滚动条 3. **响应式场景**:窗口缩放后需调用 `doLayout()` 方法刷新表格 4. **多级表头**:复杂表头需额外调整 `.el-table__header-cell` 的宽度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值