ChatGPT解决这个技术问题 Extra ChatGPT

如何在 DIV 中的长单词中强制换行?

好吧,这真的让我很困惑。我在 div 中有一些内容,如下所示:

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

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

</div>

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

如何强制浏览器在必要的地方“打破”单词以适应所有内容?

&shy; 用连字符分隔单词。

T
TylerH

使用 word-wrap:break-word;

它甚至可以在 IE6 中运行,这是一个惊喜。

word-wrap: break-word 已替换为适用于所有现代浏览器的 overflow-wrap: break-word;。 IE,作为一个死的浏览器,将永远依赖已弃用和非标准的 word-wrap

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


实际上,自动换行是 IE 的一项发明。所以毫不奇怪它在 IE 中工作:)
要在表格中使用此功能,您可能需要将 table-layout: fixed; 应用于表格
word-wrap: break-word 对我不起作用,但 @rahul 在下面建议的 word-break: break-word 有效。
注意:只有在 IE 的父 div 中提供它(而不是 div 内的内部跨度)时,这才有效。
@Yves 或 overflow-wrap: anywhere 在表中对我有用,但不确定其他所有内容是否与想要的相同
T
TylerH

我不确定浏览器的兼容性

word-break: break-all;

您也可以使用 <wbr> 标签

(分词)意思是:“如果浏览器愿意,可以在这里插入一个换行符。”如果浏览器认为不需要换行,则什么也不会发生。


注意那个断词:break-all;如果它仍然可以将任何字符与之前的其他单词放在一行中,它将在中间中断单词,这可能不是理想的结果,而 word-wrap: break-word;将单词移动到新行,并且仅在单词太长而无法完全放入容器中自己的行时才中断单词。示例:jsfiddle.net/4AKhn/1
break-all 打破一切。可以与仅具有长 URL 等的特定类一起使用,但不能与 BODY 或 P 一起使用
当您尝试在日志表单元格中显示诸如请求 URI 之类的内容时,这绝对是完全(也是理想的)可以接受的,并且需要它来停止用一个巨大的长单元格破坏整个表。需要在“单词”中间打断;)虽然在这方面接受的答案并没有蹲下。
@Skelly1983 没有 IE12 这样的东西
@TylerH 我知道这一点,感谢您在 3 年后向我指出这一点。这在 wbr 标记的 w3schools 浏览器支持图表上列出,该图表将支持列为“Internet Explorer/Edge”,版本号列为 12.0,这实际上是 Edge 的第一个版本。
T
TylerH

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

资料来源:

http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/

http://css-tricks.com/snippets/css/prevent-long-urls-from-break-out-of-container/

.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,我不确定,但是如果您尝试破坏的文件名,整个上下文(浏览器、html-css 代码)可能有助于进一步帮助您。也许,您可以针对您的情况提出另一个问题。
请注意,这会在不合语法的地方打断单词。
@user1322720 什么是“不合语法”的地方?
这似乎是这里最好的答案。不要在不需要时断词。
T
TylerH

我只是在谷歌上搜索同样的问题,并发布了我的最终解决方案 HERE。这也与这个问题有关。

您可以通过为 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。这意味着列宽不再是可变的,而是仅基于第一行中列的宽度(或通过指定的宽度)定义。 Read more here

示例代码:

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 */
}

感谢您提供表格解决方案;)但是,我不太明白为什么断词不能与自动布局一起使用。有什么建议吗?
@ondObno 是的,我不确定技术原因,但一些浏览器似乎表现得这样。也许是因为超长的单词会影响确定每列宽度所需的所有计算。
设置 width: 100%; 是让它在 FF 和 chrome 上为我工作的唯一方法!
d
davidcondrey

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


非常好的提示!只是为了补充: &#8203; 的优先级低于空白(即,如果附近有一个,则该行将改为在空白中换行)。
似乎是我正在寻找的 <wbr/> unicode 等效项
T
TylerH

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

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

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

需要注意的另一件事是使用 &nbsp; 作为间距的文本可能会导致换行符出现在单词中间。


这正是我所需要的。其他解决方案不适用于宽度:100%。需要注意的一点: word-break:break-word;应该是分词:break-all;
T
TylerH

空白由浏览器保留。文本将在必要时换行,并在换行符处

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

演示

td { 断字:断字;空白:预包装; -moz-white-space:预包装; } 表格 { 宽度:100px;边框:1px纯黑色;显示:块; }

list 1.longtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtext 2.breaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreakline


B
Babiker

CSS word-wrap:break-word;在 FireFox 3.6.3 中测试


T
TylerH

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

实施:

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

它解决了我在 Fomanti-UI (categoy>name) 中的搜索结果的一个巨大问题
T
Thadeu Esteves Jr.

我用下面的代码解决了我的问题。

display: table-caption;

C
Community

MDN

overflow-wrap CSS 属性指定浏览器是否应在单词中插入换行符以防止文本溢出其内容框。与 word-break 相比,overflow-wrap 只会在整个单词不能放在它自己的行上而不溢出的情况下才会创建一个 break。

所以你可以使用:

overflow-wrap: break-word;

Can I use


T
TylerH

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

#sampleDiv{ 宽度:80%;自动换行:断词; }

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

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


D
David de Beer

正如@davidcondrey 的回复中提到的,不仅有 ZWSP,还有 SHY &#173; &shy;,可以用很长的构造词(想想德语或荷兰语),必须当场打破 you< /strong> 希望如此。不可见,但它会在需要时给出连字符,从而最大限度地保持单词连接和行填充。

这样,luchthavenpolitieagent 这个词可能会被记为 lucht&shy;haven&shy;politie&shy;agent,它给出的部分比这个词的音节长。
虽然我从未读过任何关于它的官方消息,但这些软连字符设法获得更高的优先级在浏览器中,而不是在构造的单个单词中的官方连字符(if 他们有一些扩展名)。
实际上,没有浏览器能够自己打破了这么长的,构造的词;在较小的屏幕上会产生一个新的行,或者在某些情况下甚至是一个单词行(例如当其中两个构造单词跟随时)。

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


M
Matoeil

word-break: normal 似乎比 word-break: break-word 更好用,因为 break-word 会破坏首字母,例如 EN

word-break: normal

V
Vigneshwaran Chandrasekaran
.word-break {
   word-break: keep-all;
   word-wrap: break-word;
}

S
Shams

您可以为此使用网格系统。

<div class="container" style="background-color: green; width: 200px; height: 300px;">
   <div class="row">Thisisatest.Thisisatest.Thisisatest.</div>
   <div class="row">Thisisatest.Thisisatest.Thisisatest.</div>
 </div>

A
Ashish Ahuja

做这个:

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

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

B
Benjamin Fuentes

试试我们的风格

white-space: normal;

大多数情况下,跨多个问题重复答案是不受欢迎的。在这种情况下,这两个问题的答案似乎都是错误的。 normal 是默认的 white-space 值。我认为添加它对问题中的示例没有影响。如果我错了,请纠正我。
这取决于 CSS 所做的覆盖。就我而言,我不得不在我的 JSF 组件中的“样式”上重新声明它,以覆盖不是“空白:正常”的默认 CSS 样式;