如何防止所有浏览器上的连字符断行

Ala*_*lan 92 html css

我们的CMS上有一个ckeditor.我们的最终用户将通过该ckeditor输入一些长篇文章.我们需要一种方法来防止这些文章上的连字符断行.

无论如何都要防止所有浏览器上的连字符换行?

或者ckeditor可以选择防止这种情况吗?

dec*_*eze 245

你可以使用 ?哪种是Unicode NON-BREAKING HYPHEN(U + 2011).

HTML:‑‑

另见:http://en.wikipedia.org/wiki/Hyphen#In_computing

  • 请注意U + 2011的字体支持有限,请参阅http://www.fileformat.info/info/unicode/char/2011/fontsupport.htm (14认同)
  • 虽然这在理论上肯定更优雅,然后在整个地方抹上"nobr"标签,但它在实践中并不能很好地工作.IE将其显示为短划线,Safari在其周围添加的空间比普通短划线更多,并且大多数文本编辑器将其显示为问号或框或其他无意义的字符. (7认同)
  • 你可以做一个简单的字符串替换,用`-`替换`-`. (6认同)
  • 非常感谢您的回复.但我们需要做的是防止ckeditor上的换行符,最终用户将输入所有内容.我们不能告诉大家输入unicode非破坏连字符.有没有其他方法来防止换行?或者ckeditor可以选择自动转换连字符吗?再次感谢 (4认同)
  • @jakev我会按照derekerdmann建议的`white-space:nowrap`去.在FF/Win7上,即使目标应用程序具有Unicode感知功能,在Firefox外部复制和粘贴时,害羞的破折号似乎会转换为常规破折号. (3认同)
  • 天哪,这真是可怕的做法。将表示与语义分开的“目的”是使Web内容可维护。将其与数字unicode实体混合使用完全相反。 (2认同)

der*_*ann 77

一种解决方案可能是使用额外span标记和white-spaceCSS属性.只需定义一个这样的类:

.nowrap {
    white-space: nowrap;
}
Run Code Online (Sandbox Code Playgroud)

然后在您的带连字符的文本周围添加该类的跨度.

<p>This is the <span class="nowrap">anti-inflammable</span> model</p>
Run Code Online (Sandbox Code Playgroud)

这种方法在所有浏览器中都可以正常工作 - 这里列出的错误实现是针对white-space属性的其他值:http://reference.sitepoint.com/css/white-space#compatibilitysection

  • 在连字符错误或非常错误之后的许多情况下,如"F-1"或连字符被用作一元减号,如"-42°"(并且人们以这种方式使用,因为他们不知道减号). (10认同)

Juk*_*ela 46

我担心没有比将文本拆分为"单词"(由空格分隔的非空格字符序列)并在nobr标记中包含每个包含连字符的"单词"更简单的方法.所以输入数据就像bla bla foo-bar bla bla转向bla bla <nobr>foo-bar</nobr> bla bla.

nobr每当"单词"包含除字母和数字之外的任何内容时,您甚至可以考虑插入标记.原因是某些浏览器甚至可能会破坏"2/3"或"f(0)"之类的字符串(请参阅我的页面,了解浏览器中的断线特征).

  • `nobr`标签不是标准的,W3C强烈反对.请参见http://www.w3.org/TR/html5/obsolete.html#non-conforming-features (34认同)
  • 与任何其他方法不同,`nobr`标记适用于所有浏览器,即使在禁用样式表时也能正常工作,并且独立于对特殊字符的支持.它有*真正的*问题吗? (17认同)
  • 为什么不<span style ="white-space:nowrap"> </ span>? (15认同)
  • @ JukkaK.Korpela的问题是,现代浏览器可能决定放弃对它的支持,并且可以在不违反HTML规范的情况下这样做.这是一个"应该"的功能,这只是一个建议的实现.对于样式表,如果用户已禁用样式表,则他们希望没有任何样式 (6认同)
  • 我已经开发了10年的网站,甚至不知道你可以在你的浏览器中禁用样式表.是谁真的做到了(除了那些同样会选择在这个时代默认禁用JavaScript的自我诽谤的人)?如果我们需要如此迂腐,那么提供的替代解决方案在哪里? (2认同)

Chr*_*ppy 6

如果不编辑每个 HTML 实例,您就无法做到这一点。因此,我编写了一些 JavaScript 代码来替换它们:

\n

jQuery:

\n
// Replace hyphens with non-breaking ones\n$txt = $("#block-views-video-block h2");\n$txt.text( $txt.text().replace(/-/g, \'\xe2\x80\x91\') );\n
Run Code Online (Sandbox Code Playgroud)\n

普通 JavaScript:

\n
function nonBrHypens(id) {\n    var str = document.getElementById(id).innerHTML;\n    var txt = str.replace(/-/g, \'\xe2\x80\x91\');\n    document.getElementById(id).innerHTML = txt;\n}\n
Run Code Online (Sandbox Code Playgroud)\n