用CSS做长度超过长度显示‘...’,当鼠标放上时显示全部内容

本文深入探讨了HTML和CSS中的文本样式与布局属性,包括文本溢出处理、文本对齐方式、方向设置、文本换行策略等核心概念,通过实例展示了如何在网页中灵活运用这些属性以实现美观且功能丰富的文本展示。

<!DOCTYPE html>

<html>

<head>

<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />

<meta http-equiv="Content-Type" content="text/html; charset=GBK" />

<title>文本相关属性设置</title>

<style type="text/css">

/* 为div元素增加边框 */

div{

border:1px solid #000000;

height: 30px;

width: 200px;

}

</style>

</head>

<body>

text-overflow:ellipsis <tr><td style="overflow:hidden;white-space:nowrap

;text-overflow:ellipsis;"title="测试文字测试文字测试文字测试文字测试文字测试文字">测试文字测试文字测试文字测试文字测试文字测试文字</td></tr>

</body>

</html>

 

<!DOCTYPE html><html><head><meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /><meta http-equiv="Content-Type" content="text/html; charset=GBK" /><title>文本相关属性设置</title><style type="text/css">/* 为div元素增加边框 */div{border:1px solid #000000;height: 30px;width: 200px;}</style></head><body><!-- 缩进20pt -->text-indent:20pt <div style="text-indent:20pt">测试文字</div><!-- 缩进20pt -->text-indent:40pt <div style="text-indent:40pt">测试文字</div><!-- 居中对齐 -->text-align:center <div style="text-align:center">测试文字</div><!-- 居右对齐 -->text-align:right <div style="text-align:right">测试文字</div><!-- 文本从右边流入 -->direction:rtl <div style="direction:rtl">测试文字</div><!-- 文本从左边流入 -->direction:ltr <div style="direction:ltr">测试文字</div><!-- 强制不换行,直到遇到br标签 -->white-space:nowrap <div style="white-space:nowrap">测试文字,疯狂Java讲义,疯狂XML讲义</div><!-- 当文字溢出时,只是简单地裁切 -->text-overflow:clip <div style="overflow:hidden;white-space:nowrap;text-overflow:clip;">测试文字测试文字测试文字测试文字测试文字测试文字</div><!-- 当文字溢出时,裁切之后显示裁切标记 -->text-overflow:ellipsis <div style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;">测试文字测试文字测试文字测试文字测试文字测试文字</div>text-overflow:ellipsis <tr><td style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:200px;">测试文字测试文字测试文字测试文字测试文字测试文字</td></tr></body></html>

 

<think> 我们希望在`<el-form-item>`中显示`shopDetail.name`,当内容过长,使用`el-tooltip`组件实现鼠标悬停显示全部内容的效果。 由于在`<el-form-item>`中,默认的布局可能会因为内容过长而换行,我们可以通过以下步骤来实现: 1. 使用`el-tooltip`包裹显示内容的`span`,并设置`el-tooltip`的`content`为完整内容。 2.显示内容的`span`设置CSS样式,使其超出部分显示省略号,并防止换行。 具体操作如下: 修改模板代码: ```vue <el-form-item label="修理厂名称" label-width="100px"> <el-tooltip effect="dark" :content="shopDetail.name" placement="top"> <span class="shop-name-text">{{ shopDetail.name }}</span> </el-tooltip> </el-form-item> ``` 添加CSS样式(在组件的style部分): ```css .shop-name-text { display: inline-block; /* 设置为块级元素以控制宽度 */ width: 100%; /* 宽度100%以填充父容器 */ overflow: hidden; /* 隐藏溢出内容 */ text-overflow: ellipsis;/* 文本溢出显示省略号 */ white-space: nowrap; /* 禁止换行 */ } ``` 注意:这里设置`display: inline-block`是为了让span可以应用宽度,同设置`white-space: nowrap`确保不换行,`text-overflow: ellipsis`在溢出显示省略号。 这样,当文本内容过长,会显示省略号,并且鼠标悬停在文本上,会通过tooltip显示完整内容。 如果希望即使在文本没有溢出显示tooltip(即无论长短都显示tooltip),可以去掉条件判断,直接使用。但通常我们只在文本溢出才需要显示tooltip,那么我们可以通过判断文本是否溢出,来决定是否显示tooltip。不过,在Element UI中,`el-tooltip`组件有一个`disabled`属性,我们可以通过动态计算是否溢出,来设置`disabled`。 但是,由于动态计算文本是否溢出比较麻烦(需要比较scrollWidth和clientWidth),而且一般情况下,用户不会介意短文本也有tooltip,所以我们通常不这个判断。如果确实需要,可以自行封装一个指令或组件。 因此,我们可以采用上述简单方式。 另外,如果`<el-form-item>`的布局因为设置了`label-width`而固定,那么内容区域会自动分配剩余宽度,因此我们的`span`设置宽度100%就能自适应内容区域。 如果遇到样式不生效,可能是因为`<el-form-item>`内部结构,我们可以使用深度选择器来调整,或者检查是否有其他样式覆盖。 如果内容区域有最小宽度,导致省略号不出现,可以尝试添加`min-width: 0;`(在flex布局中,有需要这个来允许元素缩小)。 综上所述,我们使用`el-tooltip`结合CSS样式即可实现需求。 如果希望更精确的控制(比如只在文本溢出显示tooltip),可以使用自定义指令,但这里先给出简单方案。 相关问题: 1. 如何在Vue中动态判断文本内容是否溢出?(以便控制tooltip显示) 2. 在Element UI中,如何全局设置tooltip的样式? 3. 如何封装一个自动判断溢出显示tooltip的自定义指令? </think> 要实现当 `shopDetail.name` 内容过长导致换行鼠标悬停显示完整内容的 tip 效果,可以使用 Element UI 的 `el-tooltip` 组件结合文本截断样式。以下是完整解决方案: ### 实现步骤 1. **修改模板结构** - 使用 `el-tooltip` 包裹内容 2. **添加 CSS 样式** - 实现文本截断效果 3. **可选优化** - 添加动态判断逻辑 #### 完整代码实现 ```vue <template> <el-form-item label="修理厂名称" label-width="100px"> <el-tooltip effect="dark" :content="shopDetail.name" placement="top" :disabled="!isTextOverflowing" > <span class="truncate-text">{{ shopDetail.name }}</span> </el-tooltip> </el-form-item> </template> <script> export default { data() { return { shopDetail: { name: "非常长的修理厂名称..." }, isTextOverflowing: false }; }, mounted() { this.checkTextOverflow(); }, methods: { checkTextOverflow() { this.$nextTick(() => { const el = this.$el.querySelector('.truncate-text'); if (el) { this.isTextOverflowing = el.scrollWidth > el.clientWidth; } }); } } }; </script> <style scoped> .truncate-text { display: inline-block; max-width: 200px; /* 根据布局调整最大宽度 */ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; } </style> ``` ### 关键点说明 1. **`el-tooltip` 组件**: - `:content="shopDetail.name"` - 设置提示内容为完整名称 - `placement="top"` - 提示框显示在文本上方 - `:disabled="!isTextOverflowing"` - 仅在文本溢出显示提示 2. **文本截断样式**: ```css .truncate-text { display: inline-block; /* 必须设置为块级元素 */ max-width: 200px; /* 设置最大宽度 */ overflow: hidden; /* 隐藏溢出内容 */ text-overflow: ellipsis; /* 显示省略号 */ white-space: nowrap; /* 禁止换行 */ vertical-align: bottom; /* 垂直对齐 */ } ``` 3. **动态检测文本溢出**: ```js mounted() { this.checkTextOverflow(); }, methods: { checkTextOverflow() { this.$nextTick(() => { const el = this.$el.querySelector('.truncate-text'); if (el) { // 比较实际宽度和可视宽度 this.isTextOverflowing = el.scrollWidth > el.clientWidth; } }); } } ``` - 只在文本实际溢出显示提示框,避免短文本也有提示 ### 自适应宽度改进 如果希望宽度自适应父容器,可以使用 CSS Flex 布局: ```css ::v-deep .el-form-item__content { display: flex; min-width: 0; /* 关键属性,允许内容收缩 */ } .truncate-text { flex: 1; min-width: 0; /* 配合父元素防止溢出 */ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } ``` ### 响应式优化 在移动端可以考虑调整提示框位置: ```vue <el-tooltip effect="dark" :content="shopDetail.name" :placement="$store.state.isMobile ? 'bottom' : 'top'" > <span class="truncate-text">{{ shopDetail.name }}</span> </el-tooltip> ``` ### 效果说明 1. 当文本长度在限制范围内: - 正常显示完整文本 - 鼠标悬停无提示框 2. 当文本超出限制: - 显示省略号截断的文本 - 鼠标悬停显示完整内容提示框 - 提示框自动定位在文本上方 这种方法既保持了表单布局的整洁性,又提供了完整的用户体验,满足内容查看需求[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值