长单词自动换行一直是浏览器中的一个问题。对于中文没有这个问题,每个中文字符之后都可以换行。对于正常的英文也没有这个问题,比如:i love big breasts. 每个代词后面都可以插入换行。但是对于所谓的“长单词”,如200个a,aaaaaaa......,就有了问题,浏览器会认为切断一个本来应该连在一起的单词是不道德的,所以他们拒绝自动截断这种单词换行。于是这出现了一个问题:这个段落所在的元素,或者说容器(container)可能是有一个固定宽度的,比如200px,太长的单词将破环这个格式。
IE中有一个很好用的属性:
word- wrap:break-word;
有了这个属性之后,IE就会在适当的地方,截断长单词,自动换行了。可惜的是,firefox、opera等浏览器却没有这个好用的属性,于是产生了很多解决方案,比如
overflow:hidden;
这个是将超出容器部分的单词隐藏,它基于这样一个认识:超长的单词通常是无意义的,可能是用户的胡乱输入的值,所以,我们仍然让他们在一行内显示,只是隐藏超出容器宽度的部分。这带来一些问题,因为有一些东西是长而有意义的,比如某些密码,比如一个url网址,比如一个文件的序列化后的内容。
于是有了另外一些解决方案,如<wbr />和​和­,在ppk上面有比较详细的介绍 。简单来说,这些解决方案的意思就是:对容器中的html进行处理,在每个字符之后(或每隔数个字符)加入<wbr />标签(告诉浏览器,这里可以换行),或者是​字符(浏览器不可见字符,或让浏览器把一个长单词识别为若干短单词),或者是&sky;(短横线,在不换行的时候不可见,换行的时候显示为短横线,就像英文书籍印刷的时候使用的)。
这些解决方案都有一些问题,最主要的就是改变了容器内部html的内容,如果是纯文本就没有关系,但是如果内部有html内容,html格式的内容会因为插入的字符而混乱。
最新的解决方案是用mozilla系列浏览器的 document.createTreeWalker 方法解决,这个方法接受4个参数,分别是rootNode, whatToShow, filterFunction,entityRefExpansion,其中第二个参数设置为SHOW_TEXT后,可以只遍历文本结点。详细介绍看这里 和这里 。
最后是一个比较完善的解决方案,来自hedger
function breakWord(dEl){
if (!dEl || dEl.nodeType !== 1 ){
return false ;
} else if (dEl.currentStyle && typeof dEl.currentStyle.wordBreak === 'string' ){
breakWord = function (dEl){
dEl.runtimeStyle.wordBreak = 'break-all' ;
return true ;
}
return breakWord(dEl);
}else if (document .createTreeWalker){
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 );
}
breakWord = function (dEl){
var dWalker = document .createTreeWalker(dEl, NodeFilter.SHOW_TEXT, null , false );
var node,s,c = String .fromCharCode('8203' );
while (dWalker.nextNode())
{
node = dWalker.currentNode;
s = trim( node.nodeValue ) .split('' ).join(c);
node.nodeValue = s;
}
return true ;
}
return breakWord(dEl);
}else {
return false ;
}
}
例子:
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` 属性在某些浏览器中可能存在问题,如Opera和Firefox可能不支持,这时可以考虑使用 `white-space:normal` 作为替代方案。此外,使用空格分隔单词而不是使用` `(非破折号空格)也是确保...
在IE6、IE7、IE8和Firefox浏览器中,同一属性的处理结果可能会有所不同。因此,如果要考虑到跨浏览器的兼容性,需要做额外的兼容性处理或者使用兼容性更好的方法来处理文本换行问题。在实际开发中,应该根据具体的...
对于连续的英文字符和阿拉伯数字,IE浏览器支持使用`word-wrap: break-word;`或`word-break: break-all;`来强制换行。例如: ```css #wrap { word-break: break-all; /* 或者word-wrap: break-word; */ width: ...
这意味着在这种设置下,只有当设置了`word-wrap`为`break-word`时,中文才可能换行,否则即使容器宽度不足以容纳整个中文单词,也不会换行。 2. **`word-break` 属性** - `word-break` 控制的是单词在什么情况下...
- **Firefox**:直接使用标准的 `word-break` 属性即可。 综上所述,通过合理地使用 CSS 的 `white-space`、`word-wrap` 和 `word-break` 属性,我们可以有效地控制页面上的文本换行行为,并且考虑到不同浏览器的...
- break-all:在IE、Firefox、Chrome和Safari中都支持。 实例代码展示了几种不同的换行规则: ```css .box{width:100px;height:100px;border:2px solid #f00;color:#333;font:12px arial;margin-bottom:10px;} ....
虽然不同的场景可能需要不同的解决方案,但一般而言,使用`word-wrap: break-word; overflow: hidden;`可以有效解决长串英文溢出的问题,并且在大多数浏览器中表现良好。在实际应用中,开发者应该根据具体的布局和...
例如,Firefox 和 Internet Explorer 都支持这两个属性,但早期版本的 IE 可能需要使用私有属性 `-ms-word-wrap` 和 `-ms-word-break` 来实现相同的效果。在实际应用中,通常建议结合使用 `word-wrap: break-word;` ...
在 Firefox 中不支持 `word-break` 属性,所以我们需要加 `overflow: hidden;` 来解决。 属性介绍 在这里,我们介绍了三种属性: * `white-space`:空白的处理方式,有两个属性值:normal 和 nowrap。在 IE6 中只...
在示例代码中,可以看到针对IE的特定解决方案,如使用`word-wrap:break-word`和`word-break:break-all`。 总的来说,理解并熟练运用CSS的`white-space`、`word-break`和`word-wrap`属性,以及`table-layout`和`...
对于不支持 `word-wrap` 的浏览器,如 Firefox 3.0 和 Opera,可以使用 `overflow-x:hidden` 来隐藏溢出的内容。然而,这种方法虽然解决了溢出的问题,但也可能导致部分内容无法被用户看到。因此,为了更好的跨...
`和`word-wrap: break-word;`或`word-break: normal;`。 - 示例代码: ```css td { white-space: nowrap; word-wrap: break-word; width: 100px; } ``` ### 总结 以上介绍的自动换行策略覆盖了从基本的...
2. **Firefox** 不支持 `word-break: break-all` 属性。在这种情况下,可以使用 `overflow: hidden` 来防止内容撑大容器,但这样做可能会导致内容被裁剪。 **深入理解CSS属性** - **`white-space`**: 控制空白符和...
复制代码代码如下:#wrap{word-break:break-all;width:200px;}”wrap”>ddd1111111111111111111111111111111111</div> 效果:可以实现换行 2.(Firefox浏览器)white-space:normal; word-break:break-all;overfl
本文将详细介绍一种通过使用`<table>`标签结合特定CSS属性的方式,来实现文本在Internet Explorer (IE) 和 Firefox (FF) 等浏览器中的自动换行效果。 #### 二、核心概念和技术背景 ##### 2.1 CSS自动换行相关属性 ...
需要注意的是,IE8及更早版本的IE浏览器需要使用`word-wrap: break-word;`来达到相同的效果。 3. **`white-space` 属性** - 作用:控制空白符的处理方式以及换行行为。 - 可选值: - `normal`: 合并空白符序列...
标题提到的"firefox,IE 都兼容字符强制换行"是指在Firefox和Internet Explorer(IE)这两种主流浏览器上实现文本强制换行的技术。虽然这两款浏览器在处理某些HTML和CSS特性时可能存在差异,但可以通过一些方法来实现...
- `word-break:break-all` 在IE5以上版本得到支持,但Opera和Firefox可能不支持。可以使用 `white-space:normal` 替代 `word-break` 在Firefox和IE下达到类似效果。然而,这样做可能会影响百度快照的展示,且需要...
在网页设计中,有时我们遇到一个问题,即当容器内的文本包含纯英文或纯数字时,浏览器(如IE和Firefox)可能会让容器扩展以适应这些内容,而不是自动换行。特别是当英文或数字与汉字混合时,换行通常会在汉字处发生...