我需要div中的文本来保存和包装。到目前为止,我很难找到解决方案。我能找到的最佳解决方案并不适用于所有浏览器。
以下适用于Chrome和IE6 +,但在Firefox中,文字不包装。
white-space: pre;
word-wrap: break-word;
我发现无论出于何种原因,文本都不会在带有white-space:pre的Firefox中换行。并且-moz-pre-wrap在Firefox 3.5中不起作用(为什么??),只是预先换行。但是当我在列表中添加预包装时,IE 6和7不起作用。非常令人沮丧。
代码:
.introsub {
position: relative;
top: 30px;
left: 25px;
width: 550px;
font-weight: normal;
line-height: 1.5em;
overflow: auto;
margin: 0;
padding: 1.5em;
white-space: pre;
word-wrap: break-word;
}
答案 0 :(得分:30)
CSS3属性并不总是像我们希望的那样工作:)。
尽管如此,我认为混合white-space:pre
和word-wrap:break-word
没有意义。
除非遇到<br />
标记,否则前者不会包装文本。第二个将做相反的事情:即使在一个单词的中间,也可以在必要时打破单词。它们似乎存在冲突,并且最明显的答案是为什么不同的浏览器对这些属性的反应不同是
(我不能确定,我不是这里的专家)。
我建议您仔细查看this和this,然后决定在特定情况下应该使用什么。
[编辑]
您可能想尝试这个(应该适用于所有浏览器):
white-space: -moz-pre-wrap; /* Firefox */
white-space: -pre-wrap; /* ancient Opera */
white-space: -o-pre-wrap; /* newer Opera */
white-space: pre-wrap; /* Chrome; W3C standard */
word-wrap: break-word; /* IE */
我没有测试过这个,但我相信它应该为你做到这一点。
答案 1 :(得分:24)
我知道这是一个非常古老的问题,但由于我刚刚遇到它,我觉得有回答的冲动。
我的解决方案是:
使用white-space: pre-wrap;
,因为它与white-space: pre;
几乎相同,只是添加了换行符。 (参考:http://www.quirksmode.org/css/whitespace.html)
然后我会使用条件注释(参考:http://www.quirksmode.org/css/condcom.html)或浏览器特定的css hacks(http://paulirish.com/2009/browser-specific-css-hacks/)专门针对 old-ie 。
第二种方法的一个例子:
.introsub {
position: relative;
top: 30px;
left: 25px;
width: 550px;
font-weight: normal;
line-height: 1.5em;
overflow: auto;
margin: 0;
padding: 1.5em;
white-space: pre-wrap;
word-wrap: break-word;
}
/* IE6 and below */
* html .introsub { white-space: pre }
/* IE7 */
*:first-child+html .introsub { white-space: pre }
这足以迫使它包裹。