今天遇到了一个elementui的表格el-table,右侧“操作”一列设定fixed后,当拖动的过程中,前一列边框偶发不展示的问题。说实话,解决的很费劲,原本以为1个小时搞定,磨磨蹭蹭,搞了3个小时。

原因:网上SB真是多

        是谁我就不直说了,自己看吧,反正不是你

        傻帽1号吧先说,

        

elementui设置table字体颜色_elementui

你知不知道你这么写:last-child这个选择器是不能生效的,你到底用了没有

傻帽2号:

        

elementui设置table字体颜色_elementui_02

 

你说你这博客写的,别说你的不好使,就是好使,我也不想看,更何况,哎,不想说了,我只想说目前互联网上别说云存储了,你们再这么胡乱写下去,天存储也得让装满了 

傻帽3号:

elementui设置table字体颜色_优先级_03

你说你到底用了没有,试了没有,还要转载别人的文章,你把他转到你这里就好使了?

傻帽4号:

 

elementui设置table字体颜色_vue.js_04

好明显啊,你是在这里做DEMO玩呢,你知道last-child前面设置了not(.is-hidden)以后会怎么样吗?好使吗?而且,你倒是把解决了以后的再截个图啊。

傻帽5号:(也就是我自己)

 竟然看了你们的文章,还按照你们的不断尝试,结果呢,别说这代码升不生效的问题,我直接把这个right:-1px;写到浏览器那个元素身上去,都不好使,不是这里少个线,就是那里少跟线。我也真是服了,你们就真的好使了?

elementui设置table字体颜色_前端_05

elementui设置table字体颜色_vue.js_06

 

elementui设置table字体颜色_vue.js_07

 据说elementui要停止维护了,哎,我的天哪,是不是玩不起!!!

二、我的解决方案

        1、出现问题的背景:

        一旦你设置了右侧“操作列”的fxed浮动,那么其实这个table和往常不同了,他又添加了一个对应的table内容,只是我们看到的真是表格里的内容呢,第一个表格是真实内容,第二个也包含了相应的内容,但是都没有展示,只有浮动的fixed的那一列展示出来了,如图:

elementui设置table字体颜色_elementui_08

 看,上面真是内容那里,其实“操作” 那一列是is-hidden掉的,而下面这个表格呢,除了“操作”那一列,其他都是is-hidden的,所以其实操作那一列,可浮动的那一列,跟真实数据根本就不在一个表格里。分离开的。

        2、为什么拖动的时候,前一列的边框会不见?

        因为右侧操作这一列是position:absolute的,也就是脱离了文档流的,而我们拖动浏览器,放大或者缩小呢,table的整体宽度会变,也就是实时来计算,而每一列呢,也都会重新计算宽度,所以边框可能跟不上宽度的改变。这就是操作改变dom,哪怕机器的内核内存再牛逼,也会有慢有延迟的情况。所以,在这过程中,再计算款的过程中,边框跟不上的情况下,右侧那个操作那一列,positon:absolute的那一列,脱离文档流了,说白了就想一杯水,有点晃动,然后把前一列盖z住了那么一点点。我们把右侧操作那一列删了,看一下:直接就出来了,说明就是position:absolute,层级较高,把前面覆盖住了一点,

elementui设置table字体颜色_优先级_09

        3、怎么解决呢?

        把前一列的优先级调回来不就行了。让前一列保持在操作这一列的上一层,不就盖不住了。但是也不能一直保持z-index优先级在上面,因为最后这一列既然是设定了fixed浮动,那么肯定是表格过长,要出现滚动条的,如果一直保持优先级较高,就会把操作列盖住:

elementui设置table字体颜色_javascript_10

通过观察我们发现,出现滚动条后,会有这样一个样式:el-table--scrollable-x,而没有滚动条的时候呢,就没有这个样式

elementui设置table字体颜色_vue.js_11

 所以在vue的数据依赖那里可以给前一列动态加入自定义样式,然后通过el-table--scrollable-x下的这个自定义样式来控制这一列的z-index即可,代码中的fixed-pre-first-field就是给那一列动态加的样式类

<style lang="scss" scoped>
    ::v-deep .fixed-pre-first-field {
        z-index: 4;
    }
    ::v-deep .el-table--scrollable-x{
      .fixed-pre-first-field {
        z-index: 0;
      }
    }
</style>

小结:

        网上其实有很多有用的文章,也有很多没用的文章,希望多一些有用的,少一些杂乱的。