回答:
テキストを「単語」(空白で区切られた空白以外の文字のシーケンス)に分割し、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 NON-BREAKING HYPHEN(U + 2011)です。
HTML:‑
または‑
こちらもご覧ください:http : //en.wikipedia.org/wiki/Hyphen#In_computing
-
し‑
。
nobr
場所全体にタグを貼り付けるよりもエレガントですが、実際にはあまり機能しません。IEはそれをenダッシュとして表示し、Safariはその周囲に通常のダッシュよりも多くのスペースを追加し、ほとんどのテキストエディターはそれを疑問符またはボックスまたはその他の無意味な文字として表示します。
white-space: nowrap
によって提案された通りに行きます。ところで、FF / Win7では、ターゲットアプリケーションがUnicode対応であっても、Firefoxの外にコピーして貼り付けると、内気なダッシュが通常のダッシュに変換されるようです。
1つの解決策は、追加の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
は、コンテナー全体に適用します。それ以外の場合は、そのままにします。1つ目は、一般的なコンテンツをハイフンで改行しないようにする理由がないこと、2つ目は、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;
}
使用する単語建具の文字(⁠
ハイフンを中心に)。IEでも動作します。
https://en.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;