el-table-column设置show-overflow-tooltip后,文字过长时tooltip离得太远

 分析:这是Element Plus中<el-table-column>show-overflow-tooltip的一个已知限制,当内容超过单元格后,tooltip的弹出位置默认是基于DOM布局自动计算的,若内容是自定义模板内容或者嵌套层级复杂(如你用<el-popover>包着<span>),tooltip可能会偏移较远。

解决方案:使用el-popover + 手动定位触发点

 1 <el-table-column label="姓名" prop="realName" width="200">
 2   <template #default="scope">
 3     <el-popover
 4       placement="top"
 5       trigger="hover"
 6       :width="300"
 7       popper-class="custom-popover"
 8     >
 9       <!-- Popover 内容 -->
10       <template #default>
11         <div>
12           <p>岗位:{{ scope.row.position }}</p>
13           <p>电话:{{ scope.row.tel }}</p>
14           <p>手机:{{ scope.row.phone }}</p>
15           <p>邮箱:{{ scope.row.email }}</p>
16         </div>
17       </template>
18       
19       <!-- 触发区域(注意不要被裁剪)-->
20       <div
21         class="trigger-text"
22         @mouseenter="checkOverflow($event, scope.row)"
23       >
24         <span v-if="scope.row._showPopover" class="ellipsis">{{ scope.row.realName }}</span>
25         <span v-else>{{ scope.row.realName }}</span>
26       </div>
27     </el-popover>
28   </template>
29 </el-table-column>

样式建议(保证布局正常)

 1 .trigger-text {
 2   display: inline-block;
 3   max-width: 100%;
 4   white-space: nowrap;
 5   overflow: hidden;
 6   text-overflow: ellipsis;
 7   cursor: pointer;
 8 }
 9 .custom-popover {
10   white-space: normal;
11   word-break: break-all;
12 }

方法:只在内容溢出时才显示popover

1 checkOverflow(event, row) {
2   const el = event.currentTarget;
3   row._showPopover = el.scrollWidth > el.clientWidth;
4 }

 scrollWidthclienWidth是DOM元素的两个常用属性,常用于判断内容是否超过容器、是否需要滚动条等。

clienWidth 元素内容区域的可视宽度宽度(包含内边距,不包含滚动条、边框、外边距)

scrollWidth 元素内容的总高度,包含溢出不可见部分

posted @ 2025-05-29 10:56  借晚风叙旧  阅读(741)  评论(0)    收藏  举报