`
xhgrid
  • 浏览: 14688 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

完美实现溢出文本省略

阅读更多
文本溢出展示省略号的需求经常都会用到,而对于新式的浏览器,这完全不是问题,因为css3里面已经有实现text-overflow:ellipsis,但是最新w3c文档中却移除了这个属性,即使这样,也有不少浏览器实现了这个特性。其浏览器支持情况如下:

IE Firefox Opera Safari Chrome
6+ - 11.0+ 3.0+ 1.0+
可以看到,只有firefox和opera11一下的版本不支持这个浏览器,以此也可以放心大胆的用了。但是遇到要求高的产品经理时(╮(╯_╰)╭),就不得不考虑firefox等不支持的浏览器了,唯有使用js进行字符截断。

比较简单的截断方式就是按字符个数截断,以一个中文宽度等于两个英文宽度为前提,根据给定字符个数进行截取。但是字符在页面显示的时候,其宽度并不是一定的,会根据不同的字体和字体大小的不同而不同,更何况字母i和A的宽度是不一样的,存在bug且不够精确。


这里使用一种方法,通过给需要截取字符的节点附加一个兄弟节点(使用同样的class和style),通过计算各个字符在这个兄弟节点里面所占的宽度来限制字符个数。

代码如下:

双击选中源代码

var ellipsis = function(element){
    var limitWidth = element.clientWidth;
    var ellipsisText = '…';
    var temp = element.cloneNode(true);
    temp.id = 'checkTextLengthNode';
    temp.className = 'check-text-length-node';
    element.parentNode.appendChild(temp);
    var realWidth = temp.clientWidth;
    if(realWidth <= limitWidth){
        return;
    }
    temp.innerHTML = ellipsisText;
    var elliWidth = temp.clientWidth;

    var str = element.innerHTML;
    str = str.replace(/\s+/g, ' ');
    var s, totalWidth = 0;
    for(var i = 0, len = str.length; i < len; i++){
        s = str.charAt(i);
        temp.innerHTML = (s === ' ' ? '&nbsp;' : s);
        totalWidth += temp.clientWidth ;
        if(totalWidth + elliWidth > limitWidth){
            str = str.substr(0, i);
            break;
        }
    }
    element.innerHTML = str + ellipsisText;
    temp.parentNode.removeChild(temp);
}
处理字符的时候需要注意的两个个地方就是:

在页面中连续的空格是会被当成一个空格处理的,因此要把连续的空格合并成一个;
直接给innerHTML赋值空格’ ‘,其是不会占宽度的,因此要转换成html的空格表示。
通过不断添加新字符并监测添加后的宽度,就可以做到自适应不同的字体和字体大小了。具体例子点击这里查看,这个demo对text-overflow的支持进行了检测,如果支持ellipsis,就直接使用css的,毕竟js计算能省一点是一点。检测css属性及其支持情况可以查看这篇文章。


http://www.alloyteam.com/2011/10/js-text-overflow/
分享到:
评论

相关推荐

    CSS--文本溢出完美样式

    2. **隐藏溢出文本**:最简单的处理方式是隐藏溢出的文本。CSS提供了`overflow`属性来实现这一点。例如,`overflow: hidden;`可以裁剪超出容器边界的任何内容,使用户看不到它们。 3. **使用 ellipsis**:有时我们...

    FF下文本溢出的text-overflow完美解决方方案

    本文将详细介绍在Firefox下如何完美解决文本溢出的问题,并提供相关的解决方案。 首先,我们需要理解`text-overflow`属性的基本用法。`text-overflow`属性通常与`overflow`和`white-space`一起使用,以决定当内容...

    无js实现text-overflow: ellipsis; 完美支持Firefox

    在前端开发中,文本溢出处理是一个常见的需求,特别是当我们在设计网页时,希望限制某段文字的显示长度,超出部分用省略号(...)表示。`text-overflow: ellipsis;` 是 CSS3 提供的一个样式属性,用于处理溢出的文本...

    jQuery 和 CSS 的文本特效插件集锦

    13. **Ellipsis - Jquery Ellipsis Plugin**:自动添加省略号以适应有限的空间,常用于多行文本溢出处理。 14. **FresherEditor**:基于jQuery的富文本编辑器,提供多种格式化选项,方便用户编辑内容。 15. **Demo...

    Gridview72绝技gridview常用用法

    - **详细说明**:通过CSS控制文本溢出和换行行为,保证界面整洁美观。 #### 13. GridView显示隐藏某一列 - **核心知识点**:动态显示或隐藏Gridview中的某一列。 - **详细说明**:利用Visible属性可以轻松控制列的...

    使用html2canvas实现浏览器截图的示例代码

    它可能无法完全精确地复制所有CSS样式,尤其是对于一些复杂的布局和特定的CSS属性,比如多行文本溢出省略(text-overflow: ellipsis)等,可能无法正确处理。此外,它对某些CSS3特性支持有限,可能导致截图与实际...

    适合新手的CSS网页布局小技巧整理

    本文整理了多个适用于新手的CSS布局技巧,涵盖从基本布局到兼容性调整,再到文本和链接处理的全方位知识。 1. ul标签默认样式差异 在不同浏览器中,ul标签的默认样式存在差异。例如,Mozilla浏览器中的ul标签默认...

Global site tag (gtag.js) - Google Analytics