Element Plus组件库el-table单元格内容超出时tooltip显示优化

前情


公司有经常需要做一些后台管理页面,我们选择了Element Plus,它是基于 Vue 3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个 Vue 3 UI 框架 | Element Plus,对于在使用el-table的时候,设置show-overflow-tooltip,当单元格内容超出宽度的时候显示省略号同时当鼠标移入会通过tootip显示单元格全内容。

坑位


在使用show-overflow-tooltip显示全内容的时候,发现tips的宽度你是没有可配置项的,它默认会在一行显示全内容直到铺满整个屏幕,非常影响观感体验,示例图如下:

Why?


特意看了一下el-tooltip的页面上结构,发现它是通过inset和transform来控制位置的,并没有限制宽度的地方,如果去掉transform它就是fixed左边left为0,右边right为auto,当内容足够多,它会一直到占满整屏,所以才出现了上面的超长提示框问题,关键代码如下:

<div 
class="el-popper is-dark " 
style="z-index: 2035; position: fixed; inset: auto auto 0px 0px; margin: 0px; transform: translate(551px, -370px);" 
data-popper-escaped="" 
data-popper-placement="top"
>
	提示内容...
	<div 
		class="el-popper__arrow" 
		style="position: absolute; left: 0px; transform: translate(222px, 0px);"
	></div>
</div>

解决方案1

对于后台项目,对UI和交互一直都不是特别严格的,既然它自带的el-tooltip有问题,那我们就干脆摒弃它,html有个自带的属性可以同样实现鼠标移入提示效果,那就是title属性,关键代码如下:

<template>
  <el-table :data="list" border>
  	<el-table-column label="内容">
      <template v-slot={ row }>
				<div :title="row.process" class="oneLine">{{ row.process }}</div>
      </template>
    </el-table-column>
	</el-table>
</template>

解决方案2


自带的不香,又想要el-tooltip效果,那我们自己针对单元格内容使用el-tooltip,不使用表格默认的,关键代码如下:

<template>
  <el-table :data="list" border>
  	<el-table-column label="内容">
      <template v-slot={ row }>
        <el-tooltip effect="dark" placement="top">
          <template #content>
	          <p>{{row.process}}</p>
          </template>
          <div class="oneLine">
            {{ row.process }}
          </div>
        </el-tooltip>
      </template>
    </el-table-column>
	</el-table>
</template>

解决方案3

其实表格的show-overflow-tooltip工作基本是正常的,只是在宽度上不尽如人意,那我们为什么不想办法调整它的宽度了,于是想到我们可以通过重写样式来达到自己满意的结果,关键代码如下:


 .smstemplate-config {
  ::v-deep(.el-popper) {
    max-width: 640px;
    word-break: break-all;
  }
}

总结

个人推荐使用第三种,侵入性小,修改工作量也是最小的,也是我用的方式,当然上面三种方式都能解决问题,可以根据自己的实际情况来决定使用哪一种方式,解决此的方法也绝不止上面三种,如果你有更好的解决方案欢迎留言一起讨论。

posted @ 2024-12-05 21:08  !win !  阅读(101)  评论(0编辑  收藏  举报