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

完美实现溢出文本省略

css 
阅读更多
文本溢出展示省略号的需求经常都会用到,而对于新式的浏览器,这完全不是问题,因为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/
分享到:
评论

相关推荐

    BInyLU#blognews#CSS实现单行、多行文本溢出显示省略号(…)1

    实现方法:效果如图:但是这个属性只支持单行文本的溢出显示省略号,如果我们要实现多行文本溢出显示省略号呢。实现方法:效果如图:适用范围:该方法适用范围广,但文字未

    CSS实现单行、多行文本溢出显示省略号(…)

    CSS实现单行、多行文本溢出显示省略号(…)示例文档,自行下载查看

    CSS实现单行、多行文本溢出显示省略号的实现方法.pdf

    这里我们将详细介绍如何使用CSS实现单行和多行文本溢出时显示省略号。 首先,我们来看单行文本溢出的实现。当需要对单行文本进行截断时,可以使用以下CSS样式: ```css { width: xxpx; /* 定义一个宽度 */ ...

    CSS实现单行、多行文本溢出显示省略号的实现方法.docx

    以下是对"CSS实现单行、多行文本溢出显示省略号的实现方法"的详细说明: **单行溢出** 单行溢出的实现主要是通过限制文本的换行,让其在固定宽度内显示,超出的部分用省略号替换。以下是一种常见的实现方式: ```...

    文本溢出时显示省略标记

    此外,对于源码和工具方面,一些前端框架(如Bootstrap)提供了内置的类来实现文本溢出省略,开发者可以通过引入这些库简化工作。而在编程实践中,有时我们还需要处理文本截断的逻辑,例如在数据库存储或API交互时,...

    使用text-overflow:ellipsis实现溢出文本省略号显示无需js

    总的来说,利用CSS的 `text-overflow: ellipsis` 以及相关的 `white-space` 和 `overflow` 属性,我们可以轻松地在不使用JavaScript的情况下实现文本溢出时的省略号显示,提高网页的性能和用户体验。同时,对于多行...

    多行文本溢出显示省略号

    多行文本溢出显示省略号

    纯CSS实现“文本溢出截断省略”的几种方法

    总结来说,纯CSS实现文本溢出截断省略有多种策略,每种都有其特定的应用场景和局限性。开发者需要根据项目需求和目标用户的浏览器兼容性来选择合适的实现方式。单行截断简单实用,适合大多数情况;多行截断则需要...

    vue实现移动端项目多行文本溢出省略

    在Vue项目中,可以通过编写一个封装好的Vue组件来实现文本溢出省略的效果。这个组件可以通过传入的属性值,如最大显示行数来动态渲染文本内容。在模板中可以使用`v-html`或`v-bind:class`绑定相应的CSS样式。 例如...

    css实现文本溢出显示省略号

    本知识点介绍如何使用CSS实现文本溢出显示省略号的效果。这种方法不仅能够保持页面的整洁性,还可以避免因文本溢出而造成用户界面的混乱。在CSS中,我们可以通过组合几个属性来实现这一效果,包括`white-space`、`...

    兼容火狐的溢出省略号

    可以兼容火狐的溢出变省略号可以兼容火狐的溢出变省略号可以兼容火狐的溢出变省略号可以兼容火狐的溢出变省略号

    bootstrap-ellipsis:为溢出文本添加省略号的快速方法

    引导省略号为溢出文本添加省略号的快速方法版本 1.0.0 这个插件基于 [dobiatowski] ( ) 的这个项目。 请参阅的性能演示。 ####Dependencies: [jQuery] ( ) 如果你想使用工具提示,那么也 [twitter-bootstrap] ( ) #...

    jQuery文字溢出显示省略号插件.zip

    它基于一款名为"dotdotdot.js"的JavaScript插件,旨在帮助开发者优雅地处理文字溢出的情况,使长文本在指定区域内以省略号的形式简洁展示。 jQuery是一种广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画...

    html文本溢出显示省略字符的两种常用解决方法

    方法一:使用CSS实现文本溢出显示省略字符 这是通过纯CSS实现的方法,适用于单行文本的溢出显示。实现这一效果,需要使用到几个CSS属性,分别是`display`, `white-space`, `overflow`, `text-overflow`和`-webkit-...

    网页文字溢出显示省略号jQuery插件代码

    网页文字溢出显示省略号是一个常见的需求,尤其是在有限的空间内展示大量文本时。jQuery的dotdotdot.js插件提供了一种优雅的解决方案,能够帮助开发者处理这种情况。这个插件适用于单行和多行文本,当内容超出指定...

    文字溢出显示省略号小插件

    文件为jquery简单封装方法,需要先引入jquery,调用方法: $(function(){ $('.test').wordLimit(30) })

    CSS--文本溢出完美样式

    "CSS--文本溢出完美样式"这一主题聚焦于解决一个常见的问题:当文本内容过多,超出其容器的边界时,如何优雅地处理这种情况。以下是对这个知识点的详细讲解: 1. **文本溢出的基本概念**:在HTML元素中,如果文本...

    兼容IE和FF的单行溢出文本显示省略号

    本文主要讲解如何实现一个兼容Internet Explorer(IE)和Firefox(FF)的单行溢出文本显示省略号的效果。这种方法可以让过长的文本在单行内显示,并在超出部分以省略号代替,从而提高用户体验。 首先,我们需要一个...

Global site tag (gtag.js) - Google Analytics