避免不自然 word-break

Avoid unnatural word-break

我有一个<h1>标题,里面有一个很长的词,比如下面这个。浏览器宽度当然取决于设备,但我注意到在我的其中一台设备上,它看起来像这样:

这不是很好word-breaking。

如何要求浏览器改为执行“更好”的中断?

示例:Internationali-sation 或 -tion 或 -on 但不在下一行单独 n

这里是重现问题的方法(我在这里硬编码 260px 只是为了重现我在我的设备上看到的内容,但这并没有真正硬编码在我的代码中):

.a { width: 260px; background-color: yellow; }
h1 { word-wrap: break-word; }
<div class="a">
<h1>Internationalisation</h1>
</div>

好吧,你可以完全避免崩溃...

.a { width: 260px; background-color: yellow; }
h1 { white-space: nowrap; }
<div class="a">
<h1>Internationalisation</h1>
</div>

或者。在您的内容中设置跨度以表示应该发生中断的位置。这是一个大屁股词,而不是两个单独的词,所以浏览器是无能的,除非你教育它

.a { width: 260px; background-color: yellow; }
h1 { word-wrap: break-word; }
h1 span { display: inline-block; }
<div class="a">
<h1>International<span>isation</span></h1>
</div>

您可以手动插入仅在中断时可见的软连字符 &shy;。它建议浏览器可能会破坏该词的地方。它类似于 <wbr> 但带有连字符。像这样:

h1 { word-wrap: break-word; }
.small { width:260px; }
<h1 class="small">Internationali&shy;sation</h1>
<h1>Internationali&shy;sation</h1>

自动分词有很多问题,通常依赖于浏览器字典(hyhphens can be used) or external scripts. You can also read more about it in another questions like Is it possible to enable auto-hyphenation in HTML/CSS?

<wbr> 标签就是为此目的而存在的。

The HTML <wbr> element represents a word break opportunity—a position within text where the browser may optionally break a line, though its line-breaking rules would not otherwise create a break at that location.

.a { width: 260px; background-color: yellow; }
h1 { word-wrap: break-word; }
<div class="a">
<h1>Internationali<wbr>sation</h1>
</div>

或者,您也可以向单词添加 zero-width space,尽管这可能会在尝试复制字符串时导致奇怪的行为。 (我们在 Stack Overflow 上收到一些问题,其中代码不起作用,因为它包含隐藏的零宽度 space。)