すべてのブラウザでハイフンでの改行を防ぐ方法


104

CMSにckeditorがあります。私たちのエンドユーザーはそのckeditorを介していくつかの長い記事を入力します。それらの記事のハイフンでの改行を防ぐ方法が必要です。

とにかく、すべてのブラウザでハイフンでの改行を防ぐ方法はありますか?

またはckeditorはそれを防ぐオプションがありますか?


現在受け入れられている回答には非推奨のソリューションがあるため、受け入れられた回答を変更することを検討するかもしれません
inorganik

回答:


50

テキストを「単語」(空白で区切られた空白以外の文字のシーケンス)に分割し、nobrマークアップ内にハイフンを含む各「単語」をラップするよりも簡単に信頼できる方法はありません。したがって、のような入力データbla bla foo-bar bla blaはになりますbla bla <nobr>foo-bar</nobr> bla bla

nobr「単語」に文字と数字以外のものが含まれている場合は、マークアップを挿入することを検討することもできます。その理由は、一部のブラウザーは「2/3」や「f(0)」などの文字列を分割することさえあるためです(ブラウザーでの改行の奇妙さについての私のページを参照してください)。


35
このnobrタグは標準ではないため、W3Cでは推奨されていません。w3.org/TR/html5/obsolete.html#non-conforming-features
derekerdmannを

18
他のアプローチとは異なり、nobrマークアップはすべてのブラウザーで機能し、スタイルシートが無効になっていても機能し、特殊文字のサポートとは無関係に機能します。それには本当に問題がありますか?
Jukka K.Korpela、2012年

18
なぜ<span style = "white-space:nowrap"> </ span>ではないのですか?
Brendan Byrd 14

6
@ JukkaK.Korpelaそれの問題は、最新のブラウザがサポートを中止することを決定する可能性があることであり、HTML仕様に違反することなくそうすることができます。これは「推奨」機能であり、実装することをお勧めします。スタイルシートに関して、ユーザーがスタイルシートを無効にしている場合、ユーザーはスタイルがないと期待します
mirhagk

3
私は10年間サイトを開発してきましたが、ブラウザーでスタイルシートを無効にできるとは知りませんでした。それは実際に誰ですか(同じ日に、デフォルトでJavaScriptを無効にするという自主宣伝を同様に選択する人々は別として)?私たちが非常に柔軟である必要がある場合、提供されている代替ソリューションはどこにありますか?
John Rix

274

使用できるの は、Unicode NON-BREAKING HYPHEN(U + 2011)です。

HTML:&#x2011;または&#8209;

こちらもご覧ください:http : //en.wikipedia.org/wiki/Hyphen#In_computing


4
お返事ありがとうございます。ただし、エンドユーザーがすべてのコンテンツを入力するckeditorで改行を防ぐ必要があります。ユニコードの改行しないハイフンを入力するように全員に指示することはできません。改行を防ぐ他の方法はありますか?またはckeditorにはハイフンを自動的に変換するオプションがありますか?ありがとうございました
アラン

9
あなたは交換、単純な文字列の置換を行うことができます-
だます

14
参照、U + 2011に制限されたフォントのサポートの用心fileformat.info/info/unicode/char/2011/fontsupport.htmを
ユッカ・K. Korpela

7
理論的にはこれはnobr場所全体にタグを貼り付けるよりもエレガントですが、実際にはあまり機能しません。IEはそれをenダッシュとして表示し、Safariはその周囲に通常のダッシュよりも多くのスペースを追加し、ほとんどのテキストエディターはそれを疑問符またはボックスまたはその他の無意味な文字として表示します。
Tgr 2012

4
@jakev derekerdmann white-space: nowrapによって提案された通りに行きます。ところで、FF / Win7では、ターゲットアプリケーションがUnicode対応であっても、Firefoxの外にコピーして貼り付けると、内気なダッシュが通常のダッシュに変換されるようです。
Tgr

86

1つの解決策は、追加のspanタグとwhite-spaceCSSプロパティを使用することです。このようなクラスを定義するだけです:

.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


1
お返事ありがとうございます。ただし、テキストコンテンツはエンドユーザーがckeditorを介して入力します。単語の前後に<span>を追加するように全員に指示することはできません。それを達成する他の方法はありますか?とにかくありがとう
アラン

1
@Alan-彼らはどのような種類のコンテンツを追加していますか?タイトルまたはその他の要素が常に1行にある場合white-space: nowrapは、コンテナー全体に適用します。それ以外の場合は、そのままにします。1つ目は、一般的なコンテンツをハイフンで改行しないようにする理由がないこと、2つ目は、CKEditorをハックするつもりがない限り、探しているものを自動的に取得する方法がないことです。
derekerdmann、2012年

10
「F-1」のように、または「-42°」のようにハイフンが単項マイナスとして使用される場合など、ハイフンの後に改行が挿入される状況は数多くあります(そして、人々はそのように使用します)。彼らはマイナス記号について知らないからです)。
Jukka K.Korpela、2012年

これは機能しますが、ハイフンは空白ではないため、機能するという事実は直観的ではありません。<nobr>はるかに明確です。
Dave Burton

2

すべての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;
}

1
ハイフンが含まれている可能性のあるHTMLのすべてのビットを編集する必要がないため、ここでのアイデアが気に入っています。ただし、特に要素が多い場合は、このようにページ全体のすべてのテキストを処理するとパフォーマンスの問題が発生する可能性があります。
Sean the Bean

0

使用する単語建具の文字(&#8288;ハイフンを中心に)。IEでも動作します。

https://en.wikipedia.org/wiki/Word_joiner

特定のハイフンを修正...

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'));
}

-1

このCSSを試してください:

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

7
このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。また、説明コメントでコードを混雑させないようにしてください。これにより、コードと説明の両方が読みにくくなります。
Ashish Ahuja
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.