Firefox の改行位置がちょっと不自然な件と、その対処方法

ブラウザの幅に応じて文章は自動的に改行 (折り返し) されます。その位置はレンダリングエンジン、単語の切目、書体、文字サイズ、文字間など様々な影響を受けます。ブラウザ間で改行の位置を揃えたり、読みやすいように位置をコントロールするのは容易ではありません。泥臭い方法ですが、どうしても改行位置をコントロールしなければならない場合の解決案を 1つご紹介します。

gecko_br

上図は Firefox で『位置』と『:』ではなく
『位』と『置:』の間で改行される様子です。

ブラウザ幅、単語の切目、書体、文字サイズ、文字間など、
テキストの改行位置は様々な要因から自動で決定されます。
そのため、文節と改行位置にこだわりがある場合は、
改行位置を細かくコントロールする工夫が必要です。

上記の動画は OS X 10.9 + Firefox 38 で
ブラウザの幅を縮めた場合の改行位置の変化です。

上下に同じテキストを並べています。
上側はブラウザの自動レイアウトに任せたもので、
『位置:』の切れ目がちょっと不自然になります。
下側は改行位置を細かくコントロールしたもので、
幾分不自然さが緩和されていると思います。

英文であれば単語の区切りが明快であるため、
ブラウザの基本動作として単語単位で自然な改行が可能です。
それでも長大な単語だけは見切れたり、横スクロールが
発生する可能性があるため、そのような単語に対しては、
例外として、単語中での改行を許可することもできます。
これは以下のように CSS のみで設定可能です。


* { word-wrap: break-word; }

これにより、見切れること無く、それでいて
英文に対する改行を自然な形にすることができます。

ところが、日本語ではそのようなことはできません。
単語の境界を機械的かつ明確に判別できないため、
ブラウザや CSS のみでは自然な改行が難しいのです。

英文同様に改行位置を自然にするためには、
単語の境界を HTML 内で示す必要があります。
動画の下側では文章を3つのワードに分けています。
ワードの境目が改行の目安として機能します。


.words {
float: left;
max-width: 100%;
word-wrap: break-word;
}


<div>
<div class="words">Firefoxのレンダリングエンジンの自動改行</div><div class="words">位置:</div><div class="words">Hello Firefox</div>
<div class="clearfix"></div>
</div>

例えば、上記のように CSS と HTML を書きます。

『float: left;』によって、なるべく少ない
行数になるようにワードを詰めていきます。

『max-width: 100%;』によって、横スクロールが
発生しないようにワードの最大幅を制限します。

『word-wrap: break-word;』によって、
横スクロールが発生しないように、ラテン文字や
アラビア数字が連続する長大な文字列は途中改行を許可します。

細部まで改行の目安 (=ワード) を明記
することは現実的ではありませんから、
長文に適用できる方法ではありません。

本来は文章の折り返し位置がドコであっても良い
ような構成を考えるべきなのですが、
どうしても、改行位置をコントロールしたい
という場面ではこのような方法で解決できるかもしれません。

どうしても、ブラウザ間で折り返し位置を揃えたり
読みやすい位置で改行したい場合など
解決のヒントになれば幸いです。

ちなみに、
『Firefoxのレンダリングエンジンの自動改行位置:Hello Firefox』
を表示したブラウザを動画のように幅縮小していくと
Firefox とその他のブラウザでは改行位置がそろいません。

お問い合わせについて

業務として技術コンサルティングやシステム設計・開発を行っております。
気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
ご契約前のコメントやメールでのやりとりは無料です。

お問い合わせフォーム

お急ぎの場合など、ただちに業務対応が必要な場合は、こちらのお問い合わせフォームをご利用ください。かきしちカンパニーお客様窓口が直ちに対応いたします。
※窓口へのお問い合わせ、お見積もりは無料です。


お名前 (必須)

メールアドレス (必須)

題名

メッセージ本文 (必須)

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*