Answers:
恐怕没有比将文本分割成“单词”(由空格分隔的非空白字符序列)并包装每个在nobr
标记内包含连字符的“单词”更可靠的方法了。因此,输入数据bla bla foo-bar bla bla
将变为bla bla <nobr>foo-bar</nobr> bla bla
。
您甚至可以考虑nobr
在“单词”包含字母和数字以外的任何内容时插入标记。原因是某些浏览器甚至可能破坏诸如“ 2/3”或“ f(0)”之类的字符串(请参阅我的页面有关浏览器中的换行奇数)。
nobr
标签不是标准的,W3C强烈建议不要使用。参见w3.org/TR/html5/obsolete.html#non-conforming-features
nobr
标记可在所有浏览器上使用,即使禁用样式表也可使用,并且独立于特殊字符的支持而工作。是否有一个真正与它的问题?
您可以使用 ‑
Unicode不间断连字符(U + 2011)。
HTML:‑
或‑
-
用‑
。
nobr
,这比在各处贴上标签更优雅,但在实践中效果并不理想。IE将其显示为破折号,Safari在其周围添加的空间比普通破折号更多,并且大多数文本编辑器将其显示为问号或方框或其他无意义的字符。
white-space: nowrap
按照derekerdmann的建议去。顺便说一句,在FF / Win7上,即使在目标应用程序支持Unicode的情况下,在Firefox外部复制粘贴时,害羞的破折号也似乎会转换为常规破折号。
一种解决方案是使用额外的span
标记和white-space
CSS属性。只需定义一个这样的类:
.nowrap {
white-space: nowrap;
}
然后在带连字符的文本周围添加带有该类的跨度。
<p>This is the <span class="nowrap">anti-inflammable</span> model</p>
这种方法在所有浏览器中都应该可以正常工作-此处列出的错误实现是针对该white-space
属性的其他值的:http : //reference.sitepoint.com/css/white-space#compatibilitysection
white-space: nowrap
整个容器。否则,随它去吧;首先,没有理由防止在常规内容中使用带连字符的换行符,其次,除非您愿意在CKEditor上使用,否则您将无法自动获得所需的内容。
<nobr>
更清晰。
如果不编辑每个HTML实例,就无法做到这一点。因此,我写了一些JS替换它们:
jQuery的:
//replace hypens with no-breaking ones
$txt = $("#block-views-video-block h2");
$txt.text( $txt.text().replace(/-/g, '‑') );
香草JS:
function nonBrHypens(id) {
var str = document.getElementById(id).innerHTML;
var txt = str.replace(/-/g, '‑');
document.getElementById(id).innerHTML = txt;
}
在连字符周围使用单词joiner character(⁠
)。它也可以在IE中使用。
https://zh.wikipedia.org/wiki/Word_joiner
修复特定的连字符...
function fixicecream(text) {
return text.replace(/ice-cream/g,'ice⁠-⁠cream'));
}
或一切...
function fixhyphens(text) {
return text.replace(/(\S+)-(\S+)/g,'$1⁠-⁠$2'));
}
试试这个CSS:
word-break: break-all;
-webkit-hyphens:none;
-moz-hyphens: none;
hyphens: none;