el-table同时开启固定列和展开行时,水平滚动的内容截断问题

Demo预览:

https://sunzsh.github.io/vue-demos/#/table-cols-fixed

代码 / 文件:

https://github.com/sunzsh/vue-el-demo/blob/master/src/views/table-cols-fixed.vue

如果el-table同时使用这种固定列和

展开行的时候

大家看被展开的区域

在滚动的时候就会被截断

那今天呢

就给大家分享一个用纯CSS

来解决的思路

只是呢他有一点不完美的地方就是

被展开的这块区域

就只能是一个固定高度了

这个高度值你可以设置

只是呢

他不能动态的被称高或者缩小了

我们首先啊

需要让这一块展开的区域

用这个absolute来脱离目前的文档流

目的呢就是让它不受这个滚动的影响

脱离之后呢

我们把它锚定在

el-table这个组件

的最外层的那个容器上

这样的话里边的table这么滚动

它就不动了

那我们怎么做

能让它锚定在

最外层的那个el-table的容器里边呢

因为它中间还有很多层级的dom结构

所以呢这就要用到子绝父相了

我们呀要把中间的这几层的DOM节点

都给它改成这个默认的static

比如说从这

一直到最外层的el-table

中间这些层级的dom节点

他们的position不能等于relative

也就是说不能改动,就得是默认值的static

所以呢我在样式里边写了一个

这个其实就是两个元素会影响他

一个是这个

TD、一个是这个body的wrapper

它俩

在el-table里是relative的

它会影响我们去找到最外层的el-table

所以呢我们把它改成static

这样的话呢

这个div就会跳过

它俩一直找到最外层的这个div

然后呢我们再把里边展开的区域啊

设成absolute

然后把z-index调高一点

这样的话呢

就能盖住左右两边固定的列了

然后为什么要设一个背景颜色呢

大家看如果不设背景颜色的话呢

他左右两边滚动的时候

这他这个阴影不好看

所以呢我们用背景颜色把阴影盖住

然后呢还有一个问题需要解决

就是因为我们把它脱离文档流了

所以

它就不会再撑高原来的那个容器了

所以呢我们要想办法让它

在脱离文档流的同时

还能有办法让它撑高原原来的容器

那怎么办呢

我就想了一个办法

(哎?不是这个)

在这

大家看

这个就是脱离了文档流的那个容器

然后下边写了一个空的div

然后样式怎么写呢

我们让这个这个是脱离文档流的容器

和跟他相邻的

大家看 这个加号跟他相邻的后边这个div

的高度一起设置

要么是120啊要么是

这个都可以

打开设置完以后呢

他就一起变高了

最后呢为什么下面还有一个padding呢

大家看如果不写padding的话呀

他在滚动的时候这个阴影盖不全

他上面还有一部分有阴影下边也有

所以呢我们加一个padding

这样的话呢能把这个阴影盖住

需要再有空隙的话呢

我们可以自己在这个Div里面

再设padding

这个代码等一下我把它提交到demo里

大家未来如果碰到这种需求

可以自己来找一下

最后更新于