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 }
scrollWidth和clienWidth是DOM元素的两个常用属性,常用于判断内容是否超过容器、是否需要滚动条等。
clienWidth 元素内容区域的可视宽度宽度(包含内边距,不包含滚动条、边框、外边距)
scrollWidth 元素内容的总高度,包含溢出不可见部分

浙公网安备 33010602011771号