如何在DIV中强行换行?


417

好吧,这真的让我感到困惑。我在div中有一些内容,例如:

<div style="background-color: green; width: 200px; height: 300px;">

Thisisatest.Thisisatest.Thisisatest.Thisisatest.Thisisatest.Thisisatest.

</div>

但是,由于“单词”太长,内容溢出了DIV(如预期的那样)。

如何在必要时强制浏览器“破坏”单词以适合其中的所有内容?


Answers:


609

采用 word-wrap:break-word;

它甚至可以在IE6中使用,这真是令人惊喜。


word-wrap: break-word已被替换为overflow-wrap: break-word;可在所有现代浏览器中使用。IE,作为一个失效的浏览器,将永远依赖不推荐使用的非标准版本word-wrap

word-wrap今天,它的现有用法仍然有效,因为它是overflow-wrap该规范的别名。


75
实际上,自动换行是IE的一项发明。因此,它在IE中工作并不奇怪:)
Savas Vedova 2012年

1
为了table-layout: fixed;
使它

28
word-wrap: break-word不适用于我,但word-break: break-word正如下面的@rahul所建议的那样。
伊夫2015年

1
注意:仅当您在IE中的父div中给它(而不是div内的内部范围)时,此方法才有效。
短信,2016年

125

我不确定浏览器的兼容性

word-break: break-all;

您也可以使用<wbr>标签

<wbr>(断字)表示:“浏览器可以根据需要在此处插入换行符。” 如果浏览器认为不需要换行,则什么也不会发生。


23
要注意断字:全力以赴;如果仍然可以将一行中的任何字符与其他单词匹配,则中间的单词将被打断,这可能不是期望的结果。将单词移到新行,并且仅在单词太长而无法完全适合容器中其自己的行时才打断单词。范例:jsfiddle.net/4AKhn/1
alexteg 2013年

一切皆有可能。可以与仅具有长URL等的特定类一起使用,而不能与BODY或P一起使用
Upendra 2014年

当您试图在日志表单元格中显示诸如请求URI之类的内容,并且需要它停止用一个巨大的长单元格破坏整个表时,这绝对是(并且是理想的)可接受的。想要在“单词”中间打断;)虽然公认的答案在这方面并不蹲下。
IncredibleHat

@ Skelly1983没有IE12之类的东西
TylerH

@TylerH我知道这一点,感谢您在3年后向我指出。在w3schools浏览器支持图表上列出了wbr标签,该标签将支持列为“ Internet Explorer / Edge”,并且版本号列为12.0,实际上这是Edge的第一个版本。
Skelly1983

98

可以将其添加到“跨浏览器”解决方案的公认答案中。

资料来源:

.your_element{
    -ms-word-break: break-all;
    word-break: break-all;

 /* Non standard for webkit */
     word-break: break-word;

    -webkit-hyphens: auto;
       -moz-hyphens: auto;
        -ms-hyphens: auto;
            hyphens: auto;
}

我在Chrome / Opera和Safari上获得了它,但在Firefox和IE上仍然没有得到它。有了这个,我解决了Firefox,但是IE仍然遍历容器(我的文件名很长,只有字母数字字符)。
Kamafeather 2014年

1
嗨,Kamafeather,我不确定,但是如果您试图破坏文件名,那么整个上下文(浏览器,html-css代码)可能会帮助您进一步发展。也许,您可以根据自己的情况提出另一个问题。
Milche Patern 2014年

请注意,这在不合语法的地方打断了单词。

@ user1322720什么是“不合语法”的地方?
TylerH

31

我只是在谷歌搜索同一问题,然后在此处发布我的最终解决方案。这也与这个问题有关。

您可以通过为div赋予样式来轻松地做到这一点word-wrap: break-word(并且您可能还需要设置其宽度)。

div {
    word-wrap: break-word;         /* All browsers since IE 5.5+ */
    overflow-wrap: break-word;     /* Renamed property in CSS3 draft spec */
    width: 100%;
}

但是,对于表,您还需要应用:table-layout: fixed。这意味着列的宽度不再是固定的,而是仅基于第一行中列的宽度(或通过指定的宽度)定义。在这里阅读更多

样例代码:

table {
    table-layout: fixed;
    width: 100%;
}

table td {
    word-wrap: break-word;         /* All browsers since IE 5.5+ */
    overflow-wrap: break-word;     /* Renamed property in CSS3 draft spec */
}

1
谢谢您提供表格解决方案;)但是,我不太明白为什么不能在自动布局中使用断字。有什么建议吗?
ondObno 2014年

@ondObno是的,我不确定技术原因,但是一些浏览器似乎是这种方式。也许是因为超长单词干扰了确定每列宽度所需的所有计算。
西蒙东部,

设置width: 100%;是让它在FF和chrome上为我工作的唯一方法!
Putzi San

27

&#8203;是称为零宽度空格(ZWSP)的Unicode字符的HTML实体,该字符为不可见字符,用于指定换行符。同样,连字符的目的是在单词边界内指定换行符。


1
很好的提示!只是为了补充:&#8203;优先级低于空格(即,如果附近有空格,则该行将改为空格)。
CPHPython

似乎是<wbr/>我想要的unicode等效项
-Xenos

20

发现在使用flexbox并依赖时,使用Firefox可以在除Firefox(v50.0.2)之外的大多数主要浏览器(Chrome,IE,Safari iOS / OSX)上使用width: auto

.your_element {
    word-wrap: break-word;   
    overflow-wrap: break-word;
    word-break: break-word;
}

注意:如果您不使用自动前缀,则可能需要添加浏览器供应商前缀。

要注意的另一件事是&nbsp;用于空格的文本可能会导致中间单词断行。


5
这正是我所需要的。其他解决方案不适用于宽度:100%。需要注意的一件事:断字:断字;应该是断字的:全力以赴;
jscul



5

删除white-space: nowrap(如果有)。

实行:

white-space: inherit;
word-break: break-word;

3

空白由浏览器保留。文本将在必要时自动换行并换行

.pre-wrap {
    white-space: pre-wrap;
    word-break: break-word;
}

演示

td {
   word-break: break-word;
   white-space: pre-wrap;
   -moz-white-space: pre-wrap;      
}

table {
    width: 100px;
    border: 1px solid black;
    display: block;
}
<table>
<tr><th>list</th>
<td>
1.longtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtext
2.breaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreakline
</td>
</tr>
</table>


2

MDN

overflow-wrapCSS属性指定是否在浏览器应该字中插入换行符,以防止文本溢出其内容框。

与相比word-breakoverflow-wrap仅当无法将整个单词放在自己的行而不溢出的情况下,才会产生中断。

因此,您可以使用:

overflow-wrap: break-word;

我可以使用吗?


2

首先,您应该确定元素的宽度。例如:

#sampleDiv{
  width: 80%;
  word-wrap:break-word;
}
<div id="sampleDiv">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

这样,当文本达到元素宽度时,它将被分解为几行。


2

正如@ davidcondrey的答复中提到,有不只是ZWSP,还害羞的&#173; &shy;,可以在很长的使用,构建字(德国认为荷兰或)有当场被打破,你希望它是。不可见,但在需要时提供连字符,从而使单词始终保持连接和线条填充。

这样,单词luchthavenpolitieagent可能会被注释为lucht&shy;haven&shy;politie&shy;agent比单词的音节更长的部分。
尽管我从没有读过任何官方的相关内容,但是在结构的单个单词中,这些软连字符在浏览器中的优先级要高于官方的连字符(如果它们有扩展名的话)。
实际上,没有浏览器能够自行破解如此长的构造单词。在较小的屏幕上会产生一个新行,或者在某些情况下甚至会变成一个单词行(例如,当其中两个构造单词跟随时)。

仅供参考:机场警察是荷兰人


0

断字:正常使用似乎比断字:断字更好,因为断字会打乱诸如EN之类的首字母

word-break: normal

-3

做这个:

<div id="sampleDiv">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

#sampleDiv{
   overflow-wrap: break-word;
}

-4

只是尝试我们的风格

white-space: normal;

1
大多数情况下,对多个问题重复答案的做法是不受欢迎的。在这种情况下,似乎对这两个问题的回答都不正确。normal是默认white-space值。我认为添加它不会对问题中的示例产生影响。如果我弄错了,请纠正我。
杰里米·班克斯

这取决于CSS进行的覆盖。就我而言,我不得不在我的JSF组件中的“样式”上重新声明它,以覆盖非“空白:正常;”的默认CSS样式。
本杰明·富恩特斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.