当前位置: 首页 > news >正文

text-overflow:ellipsis溢出显示省略号兼容所有浏览器的解决办法

我想大家在做项目的时候都遇到这样的需求:对于一些列表文本过长溢出显示省略号,我们可以text-overflow:ellipsis很简单地达到效果,很遗憾不能兼容火狐浏览器。

text-overflow被列入了CSS3属性,火狐对于标准的实现一向都很好,很郁闷为什么没有实现这个(FireFox 7.0貌似已经实现了)。

有三种办法可以实现:

方法1:用css实现 text-overflow:ellipsis

HTML代码:

复制代码
<h3>用CSS解决</h3>
<ul class="ellipsis">
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
</ul>
复制代码

CSS代码:

复制代码
.ellipsis li{
    -moz-binding: url('ellipsis.xml#ellipsis');/*相对当前html的路径*/
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    width:200px;
}
复制代码

你可能也注意到了,兼容火狐浏览器的关键代码 -moz-binding: url('ellipsis.xml#ellipsis'); 就是加载了一个XML文件。

ellipsis.xml代码:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<bindings
 xmlns="http://www.mozilla.org/xbl"
 xmlns:xbl="http://www.mozilla.org/xbl"
 xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
    <binding id="ellipsis">
        <content>
            <xul:description crop="end" xbl:inherits="value=xbl:text">
                <children/>
            </xul:description>
        </content>
    </binding>
</bindings>
复制代码

不要问我为什么,这些是浏览器的bug,我想不必深究。了解的大神们也可以科普一下。

方法2:用js截取字符串

实现代码:

复制代码
<h3>用JS截取字符串</h3>
<ul class="list">
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
    <li><a href="##" title="text-overflow:ellipsis引起兼容性问题解决办法">text-overflow:ellipsis引起兼容性问题解决办法</a></li>
</ul>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
$(function (){
    var list = $(".list li a");
    list.each(function(index, element) {
        var str = $(this).text();
        $(this).text(cutStr(str,34)+'...');
    });
    
});
//截取中英字符串
function cutStr(str,cutLen){
    var returnStr = '',    //返回的字符串
        reCN = /[^\x00-\xff]/,    //中文字符
        strCNLen = str.replace(/[^\x00-\xff]/g,'**').length;//一个中文字符算2个字节
    if(cutLen>=strCNLen){
        return str;
    }
    for(var i=0,len=0;len<cutLen;i++){
        returnStr += str.charAt(i);
        if(reCN.test(str.charAt(i))){
            len+=2;
        }else{
            len++;
        }
    }
    return returnStr;
}
</script>
复制代码

哥偷懒了,没有封装好,还用了个jquery框架,因为已经有插件了—— jQuery ellipsis plugin 

方法3:后台控制字符串

我很喜欢这个方法,如果后台的同事们没意见的话。

如果读者还有其他更好的方法,希望能够分享一下,欢迎加入web前端交流群(75701468) 分享您我的经验.

转载于:https://www.cnblogs.com/yuanxianlai/archive/2012/09/19/2694100.html

相关文章:

  • 场景中的物体显示 为BoundingBox
  • PHP程序员最常犯的11个MySQL错误
  • css书写顺序
  • 创建Metro风格的WPF界面
  • java command
  • [转载]详解Cassandra配置文件配置项
  • 编写一个函数比较两个整数大小,但不能使用任何比较操作符
  • gridControl控件显示交叉表
  • linux 的 sem 参数
  • iOS 6编程-在iPhone和iPad上运行的通用应用程序
  • UVA 993 Product of digits
  • 黑马程序员-6 泛型
  • Pair Project 总结 Part1
  • poj 1149(最大流,构图)
  • Guava 6-字符串处理:分割,连接,填充
  • 07.Android之多媒体问题
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Angular 响应式表单 基础例子
  • JAVA SE 6 GC调优笔记
  • java 多线程基础, 我觉得还是有必要看看的
  • Logstash 参考指南(目录)
  • SpiderData 2019年2月25日 DApp数据排行榜
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • TCP拥塞控制
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 推荐一个React的管理后台框架
  • 06-01 点餐小程序前台界面搭建
  • 《码出高效》学习笔记与书中错误记录
  • 【云吞铺子】性能抖动剖析(二)
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #define
  • #Java第九次作业--输入输出流和文件操作
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core控制台应用程序初识
  • .net 流——流的类型体系简单介绍
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET命令行(CLI)常用命令
  • .net中应用SQL缓存(实例使用)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @ComponentScan比较
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [AutoSAR 存储] 汽车智能座舱的存储需求