我希望防止在连字符之后出现换行符-在与所有浏览器兼容的情况下。

例子:

我有这个文本:3-3/8"在HTML中是这样的:3-3/8”

问题是,在接近一行的末尾,由于连字符,它会中断并换行到下一行,而不是将其视为一个完整的单词……

3-
3/8"

我已经尝试插入“零宽度无间断字符”,运气不好……

3-3/8”

我在Safari中看到了这一点,并认为在所有浏览器中都是一样的。

下面是我的文档类型和字符编码…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

有什么方法可以防止这些断行后连字符?我不需要任何解决方案,适用于整个页面…只是一些我可以在需要时插入的东西,比如“零宽度无中断字符”,除了一个有效的字符。

这是一个演示。只要使框架变窄,直到在连字符处断线。

http://jsfiddle.net/RagKH/


当前回答

迟到了,但我觉得这其实是最优雅的。使用WORD JOINER Unicode字符&#8288;在连字符、破折号或任何字符的两侧。

所以,就像这样:

&#8288;—&#8288;

这将把两端的符号连接到它的邻居(不添加空格),并防止断行。

其他回答

使用word joiner unicode字符的JSX解决方案示例:

<div>{`This is JSX-${'\u2060'}related example`}</div>

迟到了,但我觉得这其实是最优雅的。使用WORD JOINER Unicode字符&#8288;在连字符、破折号或任何字符的两侧。

所以,就像这样:

&#8288;—&#8288;

这将把两端的符号连接到它的邻居(不添加空格),并防止断行。

遵循@den的有用的JSX解决方案,这对我来说很有效:

<h2>{props.name.replace('-', '-\u2060')}</h2>

IE8/9使CanSpice回答中提到的不间断连字符比典型的连字符长。它是连字符的长度,而不是典型的连字符。这种显示上的差异让我无法接受。

由于我不能使用Deb指定的CSS答案,我转而选择使用无中断标记。

<nobr>e-mail</nobr>

此外,我还发现了导致IE8/9在连字符上出错的特定场景。

字符串包含由不间断空格分隔的单词- &nbsp; 宽度有限 包含破折号

IE渲染成这样。

下面的代码重现了上面所示的问题。我不得不使用一个元标签来强制渲染到IE9,因为IE10已经修复了这个问题。没有小提琴,因为它不支持元标签。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=9" />
        <meta charset="utf-8"/>
        <style>
            body { padding: 20px; }
            div { width: 300px; border: 1px solid gray; }
        </style>
    </head>
    <body>
        <div>      
            <p>If&nbsp;there&nbsp;is&nbsp;a&nbsp;-&nbsp;and&nbsp;words&nbsp;are&nbsp;separated&nbsp;by&nbsp;the&nbsp;whitespace&nbsp;code&nbsp;&amp;nbsp;&nbsp;then&nbsp;IE&nbsp;will&nbsp;wrap&nbsp;on&nbsp;the&nbsp;dash.</p>
        </div>
    </body>
</html>

您还可以用

<span style="white-space: nowrap;"></span>