`

HTML — FIREFOX / IE Word-Wrap:Word-Break问题

阅读更多

长单词自动换行一直是浏览器中的一个问题。对于中文没有这个问题,每个中文字符之后都可以换行。对于正常的英文也没有这个问题,比如:i love big breasts. 每个代词后面都可以插入换行。但是对于所谓的“长单词”,如200个a,aaaaaaa......,就有了问题,浏览器会认为切断一个本来应该连在一起的单词是不道德的,所以他们拒绝自动截断这种单词换行。于是这出现了一个问题:这个段落所在的元素,或者说容器(container)可能是有一个固定宽度的,比如200px,太长的单词将破环这个格式。

IE中有一个很好用的属性:

word- wrap:break-word;


有了这个属性之后,IE就会在适当的地方,截断长单词,自动换行了。可惜的是,firefox、opera等浏览器却没有这个好用的属性,于是产生了很多解决方案,比如

overflow:hidden;


这个是将超出容器部分的单词隐藏,它基于这样一个认识:超长的单词通常是无意义的,可能是用户的胡乱输入的值,所以,我们仍然让他们在一行内显示,只是隐藏超出容器宽度的部分。这带来一些问题,因为有一些东西是长而有意义的,比如某些密码,比如一个url网址,比如一个文件的序列化后的内容。

于是有了另外一些解决方案,如<wbr />和&#8203;和&shy;,在ppk上面有比较详细的介绍 。简单来说,这些解决方案的意思就是:对容器中的html进行处理,在每个字符之后(或每隔数个字符)加入<wbr />标签(告诉浏览器,这里可以换行),或者是&#8203;字符(浏览器不可见字符,或让浏览器把一个长单词识别为若干短单词),或者是&sky;(短横线,在不换行的时候不可见,换行的时候显示为短横线,就像英文书籍印刷的时候使用的)。

这些解决方案都有一些问题,最主要的就是改变了容器内部html的内容,如果是纯文本就没有关系,但是如果内部有html内容,html格式的内容会因为插入的字符而混乱。

最新的解决方案是用mozilla系列浏览器的 document.createTreeWalker 方法解决,这个方法接受4个参数,分别是rootNode, whatToShow, filterFunction,entityRefExpansion,其中第二个参数设置为SHOW_TEXT后,可以只遍历文本结点。详细介绍看这里这里

最后是一个比较完善的解决方案,来自hedger

//aka makeDesignerHappy(dEl);
function breakWord(dEl){
 
 
  if (!dEl || dEl.nodeType !== 1 ){
   
    return false ;
 
  } else if (dEl.currentStyle && typeof dEl.currentStyle.wordBreak === 'string' ){
   
    //Lazy Function Definition Pattern, Peter's Blog
    //From http://peter.michaux.ca/article/3556
   
    breakWord = function (dEl){
      //For Internet Explorer
      dEl.runtimeStyle.wordBreak = 'break-all' ;
      return true ;
    }
   
    return breakWord(dEl);
  
  }else if (document .createTreeWalker){
 
    //Faster Trim in Javascript, Flagrant Badassery
    //http://blog.stevenlevithan.com/archives/faster-trim-javascript
   
    var trim = function   (str) {
      str = str.replace(/^\s\s*/ , '' );
      var ws = /\s/ ,
      i = str.length;
      while (ws.test(str.charAt(-- i)));
      return str.slice(0 , i + 1 );
    }
   
    //Lazy Function Definition Pattern, Peter's Blog
    //From http://peter.michaux.ca/article/3556
   
    breakWord = function (dEl){
     
      //For Opera, Safari, and Firefox
      var dWalker = document .createTreeWalker(dEl, NodeFilter.SHOW_TEXT, null , false );
      var node,s,c = String .fromCharCode('8203' );
      while (dWalker.nextNode())
      {
        node = dWalker.currentNode;
        //we need to trim String otherwise Firefox will display
        //incorect text-indent with space characters
        s = trim( node.nodeValue ) .split('' ).join(c);
        node.nodeValue = s;
      }
      return true ;
    }
   
    return breakWord(dEl);
   
   
  }else {
    return false ;
  }
}


例子:

//Break All Words
void function (){
  var aEl = document .getElementsByTagName('div' );
  var dEl,i;
  var sName = "break-word" ;
  var oReg =   new RegExp ('(\\s|^)' + sName + '(\\s|$)' );
  for (i= 0 ;dEl = aEl[i];i++ ){
    if (dEl.className.match(oReg)){
      breakWord(dEl);
    }
  }
}()
http://stauren.net/log/f39qg7msu.html
分享到:
评论

相关推荐

    word-break:break-all和word-wrap:break-word区别总结

    值得注意的是,`word-break` 属性在某些浏览器中可能存在问题,如Opera和Firefox可能不支持,这时可以考虑使用 `white-space:normal` 作为替代方案。此外,使用空格分隔单词而不是使用` `(非破折号空格)也是确保...

    css中强制换行word-break、word-wrap、white-space区别实例说明

    在IE6、IE7、IE8和Firefox浏览器中,同一属性的处理结果可能会有所不同。因此,如果要考虑到跨浏览器的兼容性,需要做额外的兼容性处理或者使用兼容性更好的方法来处理文本换行问题。在实际开发中,应该根据具体的...

    css之自动换行.pdf

    对于连续的英文字符和阿拉伯数字,IE浏览器支持使用`word-wrap: break-word;`或`word-break: break-all;`来强制换行。例如: ```css #wrap { word-break: break-all; /* 或者word-wrap: break-word; */ width: ...

    css word-break word-wrap 前台显示自动换行

    这意味着在这种设置下,只有当设置了`word-wrap`为`break-word`时,中文才可能换行,否则即使容器宽度不足以容纳整个中文单词,也不会换行。 2. **`word-break` 属性** - `word-break` 控制的是单词在什么情况下...

    CSS 文字自动换行

    - **Firefox**:直接使用标准的 `word-break` 属性即可。 综上所述,通过合理地使用 CSS 的 `white-space`、`word-wrap` 和 `word-break` 属性,我们可以有效地控制页面上的文本换行行为,并且考虑到不同浏览器的...

    CSS属性探秘系列(一):word-break与word-wrap

    - break-all:在IE、Firefox、Chrome和Safari中都支持。 实例代码展示了几种不同的换行规则: ```css .box{width:100px;height:100px;border:2px solid #f00;color:#333;font:12px arial;margin-bottom:10px;} ....

    CSS word-wrap同word-break的区别

    虽然不同的场景可能需要不同的解决方案,但一般而言,使用`word-wrap: break-word; overflow: hidden;`可以有效解决长串英文溢出的问题,并且在大多数浏览器中表现良好。在实际应用中,开发者应该根据具体的布局和...

    css 自动换行 强制换行属性 (firefox+ie)

    例如,Firefox 和 Internet Explorer 都支持这两个属性,但早期版本的 IE 可能需要使用私有属性 `-ms-word-wrap` 和 `-ms-word-break` 来实现相同的效果。在实际应用中,通常建议结合使用 `word-wrap: break-word;` ...

    html中表格td内容自动换行

    在 Firefox 中不支持 `word-break` 属性,所以我们需要加 `overflow: hidden;` 来解决。 属性介绍 在这里,我们介绍了三种属性: * `white-space`:空白的处理方式,有两个属性值:normal 和 nowrap。在 IE6 中只...

    css之自动换行.docx

    在示例代码中,可以看到针对IE的特定解决方案,如使用`word-wrap:break-word`和`word-break:break-all`。 总的来说,理解并熟练运用CSS的`white-space`、`word-break`和`word-wrap`属性,以及`table-layout`和`...

    使用word-wrap来防止文字溢出

    对于不支持 `word-wrap` 的浏览器,如 Firefox 3.0 和 Opera,可以使用 `overflow-x:hidden` 来隐藏溢出的内容。然而,这种方法虽然解决了溢出的问题,但也可能导致部分内容无法被用户看到。因此,为了更好的跨...

    CSS自动换行

    `和`word-wrap: break-word;`或`word-break: normal;`。 - 示例代码: ```css td { white-space: nowrap; word-wrap: break-word; width: 100px; } ``` ### 总结 以上介绍的自动换行策略覆盖了从基本的...

    兼容多浏览器,兼容 div、p、td 的强制不换行及强制换行.

    2. **Firefox** 不支持 `word-break: break-all` 属性。在这种情况下,可以使用 `overflow: hidden` 来防止内容撑大容器,但这样做可能会导致内容被裁剪。 **深入理解CSS属性** - **`white-space`**: 控制空白符和...

    css实现连续的英文或数字自动换行的方法

    复制代码代码如下:#wrap{word-break:break-all;width:200px;}”wrap”&gt;ddd1111111111111111111111111111111111&lt;/div&gt; 效果:可以实现换行 2.(Firefox浏览器)white-space:normal; word-break:break-all;overfl

    支持IE和FF同时自动换行

    本文将详细介绍一种通过使用`&lt;table&gt;`标签结合特定CSS属性的方式,来实现文本在Internet Explorer (IE) 和 Firefox (FF) 等浏览器中的自动换行效果。 #### 二、核心概念和技术背景 ##### 2.1 CSS自动换行相关属性 ...

    多浏览器支持CSS 容器内容超出(溢出)支持自动换行

    需要注意的是,IE8及更早版本的IE浏览器需要使用`word-wrap: break-word;`来达到相同的效果。 3. **`white-space` 属性** - 作用:控制空白符的处理方式以及换行行为。 - 可选值: - `normal`: 合并空白符序列...

    firefox,IE 都兼容字符强制换行

    标题提到的"firefox,IE 都兼容字符强制换行"是指在Firefox和Internet Explorer(IE)这两种主流浏览器上实现文本强制换行的技术。虽然这两款浏览器在处理某些HTML和CSS特性时可能存在差异,但可以通过一些方法来实现...

    CSS强制性换行的方法区别详解

    - `word-break:break-all` 在IE5以上版本得到支持,但Opera和Firefox可能不支持。可以使用 `white-space:normal` 替代 `word-break` 在Firefox和IE下达到类似效果。然而,这样做可能会影响百度快照的展示,且需要...

    css 英文换行 css(word-wrap/break)使纯英文数字自动换行

    在网页设计中,有时我们遇到一个问题,即当容器内的文本包含纯英文或纯数字时,浏览器(如IE和Firefox)可能会让容器扩展以适应这些内容,而不是自动换行。特别是当英文或数字与汉字混合时,换行通常会在汉字处发生...

Global site tag (gtag.js) - Google Analytics