【vue/js】文字超长悬停显示的几种方式

方法一:::after伪元素+content

  1. CSS 修改
    样式添加悬停提示效果,当鼠标悬停在文本上时显示完整内容:
js 复制代码
.grid-item-value {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 60%;
  user-select: text;
  position: relative;
  
  // 创建伪元素作为工具提示
  &::after {
    content: attr(data-full-text);  // 使用 data-full-text 属性的内容
    position: absolute;
    bottom: 100%;                   // 显示在元素上方
    left: 50%;
    transform: translateX(-50%);
    background-color: #333;         // 深色背景
    color: white;                   // 白色文字
    padding: 4px 8px;               // 内边距
    border-radius: 4px;             // 圆角
    white-space: normal;            // 允许换行
    word-break: break-all;          // 强制换行
    max-width: 200px;               // 最大宽度
    z-index: 100;                   // 确保显示在最上层
    opacity: 0;                     // 默认隐藏
    pointer-events: none;           // 不响应鼠标事件
    transition: opacity 0.2s;       // 渐显动画
  }
  
  // 悬停时显示完整文本
  &:hover::after {
    opacity: 1;
  }
}
  1. 模板修改
    更新模板代码,将完整文本存储在 data-full-text 属性中:
html 复制代码
<div 
  class="grid-item-value" 
  :data-full-text="consoleStore.activeRobot[item.value] == undefined ? '--' : consoleStore.activeRobot[item.value]"
>
  {{
    consoleStore.activeRobot[item.value] == undefined
      ? '--'
      : consoleStore.activeRobot[item.value]
  }}
</div>

你说得对,当前的定位确实有问题。现在的 tooltip 是相对于整个 .grid-item-value 元素定位的,但我们需要让它相对于父容器(.grid-info.content)正确定位。让我帮你调整一下实现方式。

有两种更好的解决方案:

方法二:使用 Element Plus 的 Tooltip 组件

html 复制代码
<template>
  <div v-if="props.pannel.type === 'robot'" class="grid-info">
    <div v-for="(item, index) in consoleStore.robotData" :key="index" class="grid-item">
      <div class="grid-item-title">{{ item.title }}</div>
      <el-tooltip 
        :content="consoleStore.activeRobot[item.value] == undefined ? '--' : consoleStore.activeRobot[item.value]" 
        placement="top"
        :disabled="!consoleStore.activeRobot[item.value] || consoleStore.activeRobot[item.value].length <= 10"
      >
        <div class="grid-item-value">
          {{
            consoleStore.activeRobot[item.value] == undefined
              ? '--'
              : consoleStore.activeRobot[item.value]
          }}
        </div>
      </el-tooltip>
    </div>
  </div>
</template>

方法三:使用原生 HTML title 属性(最简单)

html 复制代码
<div 
  class="grid-item-value" 
  :title="consoleStore.activeRobot[item.value] == undefined ? '--' : consoleStore.activeRobot[item.value]"
>
  {{
    consoleStore.activeRobot[item.value] == undefined
      ? '--'
      : consoleStore.activeRobot[item.value]
  }}
</div>

大家可以根据自身项目情况,选择最合适方案。

相关推荐
灵感__idea3 小时前
Hello 算法:贪心的世界
前端·javascript·算法
GreenTea5 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd6 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌7 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈7 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫7 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝7 小时前
svg图片
前端·css·学习·html·css3
橘子编程7 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇8 小时前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧8 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint