'text-overflow:ellipsis' 会引起兼容性问题(来源于网络)

标准参考

‘text-overflow‘ 是 CSS3 中的新特性,处于草案阶段;该特性可以作用于块级元素、行内元素和单元格,当其值是 ‘ellipsis‘ 时,被剪除的文本将用省略号表示。

关于 ‘text-overflow‘ 特性的详细信息,请参照 W3C CSS3 规范草案 ‘text-overflow‘

问题描述

‘text-overflow‘ 特性是 CSS3 中的新特性,处于草案阶段,各浏览器对 ‘text-overflow:ellipsis‘ 的支持情况各不相同。 其中,IE 支持的最好,Webkit 浏览器只支持不包含块级元素的元素,Firefox 彻底不支持。

造成的影响

当意图使用 ‘text-overflow:ellipsis‘ 将溢出的内容使用省略号替代时,由于各浏览器对 ‘text-overflow‘ 特性支持程度不同,导致应用了该特性的元素显示效果产生差异。

受影响的浏览器

所有浏览器

问题分析

对于此问题,我们通过以下的测试用例来说明。

分析以下代码:

<div id="DIV1" style="width:100px; overflow:hidden; text-overflow:ellipsis; border:1px solid red;">
    XXXXXXXXXXXXXXXXXXXXXXXXX
    <span style="">
        <span>XXXXXXXXXXXXXXXXXXXXXXXXX</span>
    </span>
</div>
<br/>
<div id="DIV2" style="width:100px; overflow:hidden; text-overflow:ellipsis; border:1px solid red;">
    XXXXXXXXXXXXXXXXXXXXXXXXX
    <div>XXXXXXXXXXXXXXXXXXXXXXXXX</div>
    <span style="">
        <span>XXXXXXXXXXXXXXXXXXXXXXXXX</span>
    </span>
</div>
  • DIV1 和 DIV2 的内容用 XXXXXXXXXXXXXXXXXXXXXXXXX,因为它是一个不可折行的字符串;
  • DIV1 和 DIV2 的宽度都是 100px,小于其中文本的宽度;
  • DIV1 中只包含行内元素和文本,DIV2 内含有一个 DIV(块级元素)。

根据草案,DIV1 和 DIV2 中的文本,被剪除的部分都应该用省略号表示。

这段代码在不同的浏览器环境中表现如下:1

IE6 IE7 IE8(Q) IE8(S) Chrome Safari Firefox

注1:忽略 ‘text-overflow:ellipsis‘ 对背景色的影响。

可见:

  1. Firefox 彻底不支持 ‘text-overflow:ellipsis‘;
  2. Webkit 浏览器中,在元素只包含行内元素和文本时,‘text-overflow:ellipsis‘ 对其本身包含的文本及子孙元素包含的文本同样有效。当包含块级元素时,则完全失去效果;
  3. IE 对 ‘text-overflow:ellipsis‘ 支持的良好,而且在 IE6 IE7 IE8(Q) 中,对其子孙元素中的文本同样有效;
  4. 在 IE8(S) 中有个特殊情况,‘text-overflow:ellipsis‘ 对其块级子元素内的文本没有作用。

另外,在 Webkit 浏览器中,‘:after‘ 伪元素如果被设置成一个块级元素,‘text-overflow:ellipsis‘ 会失效。

分析以下代码:

<style type="text/css">
    #block:after {
        content: "after";
        display: block;
    }

    #inline:after {
        content: "after";
        display: inline;
    }
</style>
<div id="block" style="width:100px; overflow:hidden; text-overflow:ellipsis; border:1px solid red;">
    BLOCKBLOCKBLOCKBLOCKBLOCKBLOCK
</div>
<div id="inline" style="width:100px; overflow:hidden; text-overflow:ellipsis; border:1px solid red;">
    INLINEINLINEINLININLINEINLINE
</div>
  • DIV[id="block"] 和 DIV[id="inline"] 的内容分别为 ‘BLOCKBLOCKBLOCKBLOCKBLOCKBLOCK‘ 和 ‘INLINEINLINEINLININLINEINLINE‘ ,它们都是不可折行的字符串。
  • 两个 DIV 的宽度小于文本字符串宽度。
  • 两个 DIV 的 ‘:after‘ 伪元素向其后增加了一个块级的 ‘after‘ 文本。

根据草案,两个 DIV 中的文本,被剪除的部分都应该用省略号表示。

这段代码在不同的浏览器环境中表现如下:2

IE6 IE7 IE8(Q) IE8(S) Chrome Safari Firefox

注2:IE6 IE7 IE8(Q) 不支持 :after 伪元素,所以没有 ‘after‘ 的文本。

可见:

在 Webkit 浏览器中,如果元素的 :after 伪元素是一个块级元素,会使该元素的 ‘text-overflow:ellipsis‘ 失效。

解决方案

不要在包含块级元素的元素上使用 ‘text-overflow:ellipsis‘,并且当使用 :after 伪元素时,确保伪元素不是块级元素。Firefox 中可以通过 XUL 实现 ‘text-overflow:ellipsis‘ 的效果。

针对 Firefox 使用 XUL 实现 ‘text-overflow:ellipsis‘ 效果的参考代码如下:

定义专用在 Firefox 下名为 ‘ellipsis‘ 的 class :

.ellipsis {
    -moz-binding: url(‘ellipsis.xml#ellipsis‘);
}

使用 Firefox 的 XUL 实现 ‘text-overflow:ellipsis‘ 的 ellipsis.xml :

<?xml version="1.0"?>
<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>

测试代码:

<div class="ellipsis" style="width:100px;border: 1px solid red;overflow:hidden;">
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
</div>

在 Firefox 中表现如下:

'text-overflow:ellipsis' 会引起兼容性问题(来源于网络)

时间: 2024-10-28 10:33:57

'text-overflow:ellipsis' 会引起兼容性问题(来源于网络)的相关文章

通用js函数集锦&lt;来源于网络&gt; 【二】

通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json方法10.extend方法11.类型判断的方法 数组方法集 Angela.array = { //# 数组方法 // index, 返回位置! 不存在则返回 -1: index: function (t, arr) { //# 返回当前值所在数组的位置 if (arr.indexOf) { return ar

通用js函数集锦&lt;来源于网络/自己&gt; 【一】

通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用户设备来源7.JS验证邮件地址是否合法8.JS获取字符串长度(区分中英文) 中文算2个字,英文一个9.检查手机号码是否合法10.验身份证号码是否正确11.删除cookie12.数组是否包函字符串元素13.后退14.向上滚动到指定位置15.判断是否为身份证16.判断是否为2~15字姓名17.修复IE中 inpu

概述 &nbsp; 一切来源于生活,一切来源于网络

第一次听说网站之类的东西是在2011年左右的事,是一位荣新的招生老师打来电话,询问并邀请我参加荣新的学习.当时我通过自学考过了教育部的三级网络技术与四级网络工程师,感觉老师给我介绍培训内容的时候,整个脑袋是一片空白(对网站无从知道),第一感觉就是她介绍荣新培训学员的工作和工资时,深深的打动我,就是工资挺高的(一个荣新学员不到半年的时间吧,工资超过七千),我就是通过这个工资才了解到网站和下定决心学习的.大家不要笑,学习这东西,有时候就有"商业行为",并不是都那么说的那意思. 当然我有商业

Hessian学习总结(一)——Hessian入门 (来源于网络分享)

Hessian学习总结(一)——Hessian入门 一.远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http . tcp . udp 等等, http . tcp . udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协议,网络 IO ,主要有 bio . nio . aio 三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应

Nginx简单配置,部分来源于网络

nginx.conf listener监听端口 server_name监听域名 location{}是用来为匹配的 URI 进行配置,URI 即语法中的“/uri/”.location  / { }匹配任何查询,因为所有请求都以 / 开头. root指定对应uri的资源查找路径,这里html为相对路径,完整路径为/opt/ opt/nginx-1.7.7/html/ worker_connections表示每个工作进程的最大连接数 server{}块定义了虚拟主机 index指定首页index文

Bootstrap 模态对话框只加载一次 remote 数据的解决办法(来源于网络)

1. Bootstrap 模态对话框和简单使用 1 2 3 4 5 6 7 8 9 10 11 12 13 <div id="myModal" class="modal hide fade">     <div class="modal-header">         <button type="button" class="close" data-dismiss="

linux关机命令大全 来源于网络

在linux下一些常用的关机/重启命令有shutdown.halt.reboot.及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的. Linux centos重启命令: 1.reboot 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 10 过10分钟自动重启(root用户使用) 4.shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设置重启的话,可以用shut

Powershell 脚本判断制定路径下文件是否存在(来源于网络-转载)

$filelist=gc "file.txt" #获取要检查的文件列表 $csvs= new-object collections.arraylist #创建一个arraylist对象 foreach($file in $filelist){ $csv=new-psobject|select yes,no if([io.Directory]::Exists($file)){ #判断文件是否存在 $csv.yes=$file }else{ $csv.no=$file } $null=$c

Windows下安装jmeter图文教程(来源于网络)

这篇文章主要介绍了Windows下安装jmeter图文教程,JMeter是Apache软件基金会的产品,用于对静态的和动态的资源性能进行测试,需要的朋友可以参考下 JMeter是Apache软件基金会的产品,用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java 对象,数据库和查询,FTP服务器等等)的性能进行测试.是一款很方便的测试软件.系统:windows xp 需要的软件包:jdk-6u34-windows-i586.exe apache-jmeter-2.7.zip1.下