文本在具有空格的元素之间没有正确换行:nowrap

gil*_*ly3 5 css webkit google-chrome blink

如果我给一个元素的所有子元素white-space: nowrap,空白不会在 webkit 中应该出现的元素之间中断(并闪烁):

jsfiddle.net/VJyn2

.pairs {
    width: 180px;
    overflow: hidden;
}
.pairs > span {
    white-space: nowrap;
}
Run Code Online (Sandbox Code Playgroud)
<div class="pairs">
    <span>
        <strong>bread:</strong>
        <em>crust</em>
    </span>
    <span>
        <strong>watermelon:</strong>
        <em>rind</em>
    </span>
    ...
</div>
Run Code Online (Sandbox Code Playgroud)

CSS 的目的是将单词对保持在一起,但允许文本在<span>元素之间断开。这在 IE 和 FireFox 中按预期工作。

在 IE 和 FF 中按预期工作

但是,在基于 Webkit 的浏览器(safari、chrome、opera)中,不是将太长的跨度推到下一行,而是被剪短。

文本在 webkit 中被剪切

这是 webkit 中的一个错误(并闪烁),对吗?有解决方法吗?

gil*_*ly3 4

截至今天(Chrome v42),这个错误不再是问题。Chrome 已经修复了渲染错误,因此不再需要以下解决方法。

这里没什么好看的,离开。


有几种方法可以解决此错误。这里有三个选项:

CSS技术

使用float: left。除了使其正确换行之外,这还会折叠跨度之间的空白,因此margin-right还要添加 a。

.pairs > span {
    white-space: nowrap;
    float: left;
    margin-right: 0.5em;
}
Run Code Online (Sandbox Code Playgroud)

jsfiddle.net/VJyn2/3

HTML技术

在每个之间添加零宽度空格( ) :U+200b<span>

<div class="pairs">
    <span>
        <strong>bread:</strong>
        <em>crust</em>
    </span>
    &#x200b;
    <span>
        <strong>watermelon:</strong>
        <em>rind</em>
    </span>
    &#x200b;
    <span>
        <strong>banana:</strong>
        <em>peel</em>
    </span>
    ...
</div>
Run Code Online (Sandbox Code Playgroud)

jsfiddle.net/VJyn2/2

更好的 HTML 技术

事实证明,要使其正常工作所需要做的就是将 span 元素放在 HTML 中的同一行上:

<div class="pairs">
    <span><strong>bread:</strong> <em>crust</em></span>
    <span><strong>watermelon:</strong> <em>rind</em></span>
    <span><strong>banana:</strong> <em>peel</em></span>
    ...
</div>
Run Code Online (Sandbox Code Playgroud)

jsfiddle.net/VJyn2/7