从TABLE布局切换到DIV布局以来,一个普遍的问题仍然存在:
问题 :您用动态文本填充DIV,并且不可避免地会有一个超长单词延伸到div列的边缘,使您的网站看起来不专业。
复古 :这 从未 发生过表布局。一个表格单元格总是可以很好地扩展到最长单词的宽度。
严重性 :我什至在大多数主要站点上都 遇到了 这个问题,尤其是在德国站点上,这些站点甚至连“限速”之类的通用词都非常长(“ Geschwindigkeitsbegrenzung”)。
有人对此有可行的解决方案吗?
您可以通过插入软连字符(­)来告诉浏览器在哪里拆分长字:
­
averyvery­longword
可能呈现为
veryverylongword
要么
每个 字
一个好的正则表达式可以确保除非必要,否则您不会插入它们:
/([^\s-]{5})([^\s-]{5})/ → $1­$2
浏览器和搜索引擎足够聪明,可以在搜索文本时忽略该字符,而Chrome和Firefox(尚未测试其他字符)在将文本复制到剪贴板时会忽略该字符。
<wbr>
另一个选择是注入<wbr>,它是以前的IE-ism,现在是HTML5:
averyvery<wbr>longword
无连字符:
每个 长字
您可以使用零宽度的空格字符​(或​)来实现相同的目的。
​
​
仅供参考,最新的IE,Firefox和Safari(但当前不支持Chrome)也支持CSShyphens:auto
hyphens:auto
div.breaking { hyphens: auto; }
但是,连字基于连字字典,因此不能保证打破长字。但是,它可以使有道理的文本更漂亮。
<table>布局不好,但display:table在其他元素上很好。它会像老式桌子一样古怪(又富有弹性):
<table>
display:table
div.breaking { display: table-cell; }
overflow和white-space: pre-wrap下面的答案也很好。
overflow
white-space: pre-wrap