CSS文字溢出显示省略号,且出现title或者tooltip

4,117 阅读1分钟

背景

当文字溢出时显示省略号是每一个前端开发工程师必备技能之一,但是文字溢出省略号显示后就无法看到完整内容了,这个时候就可以用到标签的title属性,或者一些UI组件库的tooltip组件,当鼠标移入元素则出现提示气泡,显示完整内容。

前端工程师常见的作法就是让提示气泡一直存在,不管文字是否溢出,鼠标移入都会出现提示气泡。但是有些场景下,需求方要求文字未溢出时鼠标移入不显示提示气泡,文字溢出时才显示提示气泡。

需求总结

文字未溢出时,鼠标移入不出现提示气泡,文字溢出时,鼠标移入显示提示气泡。

实现原理

  1. 获取到包裹文字元素的宽度
  2. 给元素添加鼠标移入事件
  3. 每次鼠标移入时,判断元素宽度是否符合要求
  4. 如果不符合,则添加气泡,否则不添加

实现代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS文字溢出显示提示title或者tooltip</title>
    <style>
        div {
            width: 100px;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
    </style>
</head>

<body>
    <div>
        <span>我是一段没有用的废话!</span>
    </div>
</body>
<script>
    let dDom = document.getElementsByTagName('div')[0];
    let sDom = document.getElementsByTagName('span')[0];

    let dDomWidth = sDom.parentNode.offsetWidth;
    let sDomWidth = sDom.offsetWidth;
    sDom.addEventListener('mouseover', function () {
        if (sDomWidth > dDomWidth) {
            sDom.title = '我是一段没有用的废话!'
        }
    })
</script>

</html>

总结

实现该种需求的重点就是获取到元素宽度,以及合理的判断宽度。