el-tooltip多行显示/限制字数显示

文章展示了如何在Vue.js应用中使用CSS和组件el-tooltip来实现文本溢出时的省略显示,并在鼠标悬停时显示完整内容。同时,文中提到了自定义过滤器用于处理时间戳转换和内容的截断。
.cell-ellipsis {
  display:-webkit-box;
  text-overflow:ellipsis;
  overflow:hidden;
  -webkit-line-clamp: 2;
  -webkit-box-orient:vertical;
}

//cell-ellipsis 展示表格文字的div不能有兄元素,只能有子元素

<template slot-scope="{row}">
    <el-tooltip class="item" effect="dark" placement="top-start">
        <template slot="content">
            <p style="max-width:500px">{{row.role_api_name}}</p>
        </template>
         <div class="cell-ellipsis">        
           <div class="" v-for="(v,index) in row.stock_info" :key="index*20">        
             {{v.stock_name+' '+v.stock_code}}
           </div>
    </el-tooltip>
</template>

//给el-table-column设置show-overflow-tooltip鼠标移入展示

el-tooltip限制字数显示

import Vue from 'vue'

// 时间戳转日期
Vue.filter('dateFormat', (dataStr, format = "yyyy-MM-dd HH:mm:ss") => {
    if (dataStr === '0' || !dataStr) {
        return '--'
    }
    return new Date(dataStr * 1000).format(format);
})
// 有无内容信息
Vue.filter('changeValue', value => {
    if (value === 0) {
        return value
    } else if (value === '0') {
        return value
    } else if (value) {
        return value
    } else {
        return '--'
    }
})
// 多出部分添加省略号
Vue.filter('ellipsis', (dataStr, num) => {
    if (dataStr === '0' || !dataStr) {
        return '--'
    }
    if (dataStr.length > num) {
        return dataStr.slice(0, num) + '...'
    }
    return dataStr
})

//main.js里
import '@/util/filter' // 过滤器


<el-table-column
    prop="content"
    label="内容"
    width="300"
>
  <template slot-scope="scope">
    <el-tooltip v-if="scope.row.content.length > 40" class="item" effect="dark"
      :content="scope.row.content" placement="top">
      <div>{{ scope.row.content | ellipsis(40) }}</div>
    </el-tooltip>
    <div v-else-if="scope.row.content.length <= 0">
      <span>--</span>
    </div>
    <div v-else>
      <span>{{ scope.row.content }}</span>
    </div>
  </template>
</el-table-column>

### 配置 `el-tooltip` 实现多行文本提示 为了使 `el-tooltip` 支持多行文本显示,可以利用 CSS 和 JavaScript 来调整其行为。由于原生的 `el-tooltip` 不直接支持按需自适应宽度[^1],因此需要额外处理。 #### 使用 CSS 控制 Tooltip 宽度 通过设置特定类名下的样式规则,可以让工具提示框自动换行并保持合适的宽度: ```css .el-tooltip__popper { max-width: 300px; white-space: normal !important; } ``` 这段代码确保了当内容超出指定的最大宽度时能够正常换行而不是被截断[^4]。 #### 动态控制 Tooltip 显示逻辑 对于仅在文本溢出时才显示的情况,在 Vue 组件内部可以通过监听 DOM 变化来判断是否应该激活 tooltip 效果[^2]: ```javascript export default { data() { return { showTooltip: false, }; }, mounted() { this.checkOverflow(); window.addEventListener('resize', this.checkOverflow); }, beforeDestroy() { window.removeEventListener('resize', this.checkOverflow); }, methods: { checkOverflow() { const el = this.$refs.textContainer; if (el.scrollWidth > el.offsetWidth || el.scrollHeight > el.offsetHeight) { this.showTooltip = true; } else { this.showTooltip = false; } }, }, }; ``` 上述方法会在组件挂载完成后立即执行一次检测,并且每当窗口大小发生变化时也会重新评估是否需要显示 tooltip。 #### HTML 结构示例 结合前面提到的技术点,完整的模板结构可能如下所示: ```html <template> <div ref="textContainer"> <!-- 当前元素 --> <span :class="{ 'overflow-hidden': !showTooltip }">{{ text }}</span> <!-- 工具提示 --> <el-tooltip v-if="showTooltip" effect="dark" :content="text" placement="top-start"> <span>{{ text }}</span> </el-tooltip> </div> </template> ``` 在这个例子中,如果文本未发生溢出,则不会渲染 `el-tooltip`;反之则会启用它以提供更详细的说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值