css 如何在所有浏览器中防止连字符处换行

5kgi1eie  于 2023-07-01  发布在  其他
关注(0)|答案(7)|浏览(162)

我们在CMS中有CKEditor。我们的最终用户将通过CKEditor输入一些长文章。我们需要一种方法来防止那些文章中连字符处的断行。
有没有办法在所有浏览器中防止连字符处的换行符?
还是CKEditor有一个选项来防止这种情况?

7z5jn7bk

7z5jn7bk1#

您可以使用,它是Unicode非中断连字符(U+2011)。
HTML:‑‑
另见:http://en.wikipedia.org/wiki/Hyphen#In_computing

roqulrg3

roqulrg32#

一种解决方案是使用额外的span标记和white-space CSS属性。像这样定义一个类:

.nowrap {
    white-space: nowrap;
}

然后用这个类在连字符的文本周围添加一个span。

<p>This is the <span class="nowrap">anti-inflammable</span> model</p>

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

k2fxgqgv

k2fxgqgv3#

恐怕没有比将文本拆分为“单词”(由空格分隔的非空格字符序列)并将每个包含连字符的“单词” Package 在nobr标记中更可靠的方法了。因此,像bla bla foo-bar bla bla这样的输入数据将被转换为bla bla <nobr>foo-bar</nobr> bla bla
您甚至可以考虑在“单词”包含字母和数字以外的任何内容时插入nobr标记。原因是一些浏览器甚至可能会中断字符串,如“2/3”或“f(0)”(参见我的oddities of line breaking in browsers页面)。

ztyzrc3y

ztyzrc3y4#

如果不编辑每个HTML示例,则无法执行此操作。因此,我写了一些JavaScript代码来替换它们:
jQuery:

// Replace hyphens with non-breaking ones
$txt = $("#block-views-video-block h2");
$txt.text( $txt.text().replace(/-/g, '‑') );

Vanilla JavaScript:

function nonBrHypens(id) {
    var str = document.getElementById(id).innerHTML;
    var txt = str.replace(/-/g, '‑');
    document.getElementById(id).innerHTML = txt;
}
wgx48brx

wgx48brx5#

在连字符周围使用 word joiner 字符(&#8288;)。它也可以在Internet Explorer中运行。
修复特定连字符...

function fixicecream(text) {
    return text.replace(/ice-cream/g, 'ice&#8288;-&#8288;cream'));
}

或者一切...

function fixhyphens(text) {
    return text.replace(/(\S+)-(\S+)/g, '$1&#8288;-&#8288;$2'));
}
hiz5n14c

hiz5n14c6#

试试这个CSS:

word-break: break-all; 
-webkit-hyphens:none;
-moz-hyphens: none; 
hyphens: none;
c0vxltue

c0vxltue7#

您可以使用CSS line-break属性:

line-break: anywhere;

尽管文档中说它只适用于中文、日文和韩文(CJK)语言,但它也禁用了英语文本中连字符的换行符。我在Firefox(Win10),Chrome(Win10),Edge(Win10)和Safari(OSX)中进行了测试,它非常适合持有长授权密钥的文本区域。替换表单域中的连字符需要在每次提交表单时替换它们,因此不是理想的选择。

相关问题