经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTMLCSS » CSS » 查看文章
判断文本是否溢出/hover显示全部
来源:cnblogs  作者:迪迪的博客  时间:2018/11/9 10:59:24  对本文有异议

前言

在工作中我们经常会遇到,文字过多,需要用省略号,并且鼠标hover的时候 还需要 显示全部的文字的需求。

正文

  1. 文字过多需要用省略号的实现:上代码啦
    1. .ellipsis {
    2. width: 100%;
    3. text-overflow: ellipsis;
    4. overflow: hidden;
    5. white-space: nowrap;
    6. display: inline-block //块级标签不需要
    7. }

     

  2.  如何得知这个是否溢出呢?关键词:clientWidth 和scrollWidth: 代码奉上:

    1. // 我是在react中实现
    2. componentDidMount () { // 在did mount 中判断是否溢出
    3. const node = this.ref.current // 判断的dom节点,使用ref
    4. const clientWidth = node.clientWidth
    5. const scrollWidth = node.scrollWidth
    6. if (clientWidth < scrollWidth) {
    7. this.setState({ // 把是否溢出的状态存在state中,之后从state中拿值使用
    8. overflow: true
    9. })
    10. }
    11. } // 在普通js中实现,方法一样,取到dom,判断clientWidth 和scrollWidth
  3. 判断完溢出,一般会需要处理,我这里的需求是hover时候再显示全部。方法两种,第一,使用伪类,第二,包裹一个标签,该标签hover时候显示。

     重点坑: 有省略号的标签,我们使用了overflow:hidden来实现了,那么这个就是一个BFC,hover时候显示的提示框,超出bfc的就显示不了了。。。

    方法一 : 伪类实现:代码上html

  1. <span className={`${styles.detail} ${styles.ellipsis}`} ref={this.departmentRef} data-customer={overflow ? department : null}>{department}</span>
  2. // 关注data-customer 属性,这个属性在有溢出时候赋值,无溢出时候为null。 还记得ref的作用不?就是第二步中确定是否溢出用的。
  1. .ellipsis { // 第一步溢出的代码
  2. display: inline-block;
  3. text-overflow: ellipsis;
  4. white-space: nowrap;
  5. overflow: hidden;
  6. width: 255px;
  7. }
  8. .ellipsis[data-customer]:hover::after { // 关键代码,伪类实现
  9. content: attr(data-customer);
  10. position: absolute;
  11. background: #F2F2F2;
  12. border: 1px solid #E5E5E5;
  13. box-shadow: 0 2px 4px 0 rgba(56,62,71,0.10);
  14. border-radius: 2px;
  15. padding: 2px 6px;
  16. font-size: 13px;
  17. color: #202332;
  18. top:106px; // 设置位置
  19. left: 10px; // 设置位置
  20. max-width: 90%;
  21. word-break: break-word; // 如果一个单词太长,则截断  CSS 属性 word-break 指定了怎样在单词内断行。
  22. white-space: normal;// 可以换行 white-space CSS 属性是用来设置如何处理元素中的空白。
  23. }

 

    方法二:在hover标签A 内部再包裹一个标签B,B标签在hoverA时显示。代码走你

  1. <span ref={this.ref} style={{display: 'inline-block'}} className={overflow ? 'overFlowText' : ''}>
    {tableTitle}
  2. {overflow ? (<span className='overflowSpan'>{tableTitle}</span>) : null}
  3. </span>
  4. // 关键代码是那个三元~

 

  1. .overflow{
  2. position: relative
  3. }
  4. .overflow .overflowSpan {
  5. display: none
  6. }
  7. .overflow:hover .overflowSpan{
  8. display: block;
  9. position: absolute;
  10. top: 10px;
    left: 0px;
  11. }

参考链接: https://stackoverflow.com/questions/2011142/how-to-change-the-style-of-the-title-attribute-inside-an-anchor-tag

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号