Gecko と Webkit の word-break:break-all; ってこれでいいの?

2012年10月20日 土曜日 takafumi

私は Firefox をメインのブラウザとして使っているんですが、最近おかしな表示が目につくようになりました。行頭に句読点や音引きが表示されることがあるんです。

普通はこういった場合、句読点をはみ出させたり早めに改行したりして行頭に句読点などが来ないように自動で調整されます。これを禁則処理と言いますが、この禁則処理が行われていないようです。

見た目の話なので CSS だよねー、と確認してみたところ word-break:break-all; が設定されていると禁則処理が行われなくなる様子。

ググってみると、この word-break プロパティは Firefox15(2012/8/28リリース)で実装されたとのこと。

Firefox 15.0 リリースノート

そして word-break プロパティの説明はこうなっています。

break-all
CJK (中国語、台湾語、日本語、韓国語)以外のテキストに於いて、単語中などでの文字の改行に関する禁則処理を解除し、どの文字の間でも改行するようにします。

via: word-break – CSS | MDN

日本語では禁則処理が解除されないように読めるんですが…どうなんでしょう。

念のため英語版も確認してみます。

break-all
Word breaks may be inserted between any character for non-CJK (Chinese/Japanese/Korean) text.

via: word-break – CSS | MDN

やっぱり日本語は適用外なんじゃないかなぁ。というわけで仕様書!

‘break-all’
In addition to ‘normal’ soft wrap opportunities, lines may break between any two letters (except where forbidden by the ‘line-break’ property). Hyphenation is not applied. This option is used mostly in a context where the text is predominantly using CJK characters with few non-CJK excerpts and it is desired that the text be better distributed on each line.

via: CSS Text Module Level 3 (CSS3 Text)

通常の改行位置に加えてどんな文字の間でも改行してよい。とは書いてありますが(line-break プロパティで禁止されている場合を除く)と但し書きがされています。

そして line-break プロパティの内容は、といきたいところですが line-break プロパティのサポートはオプション扱いらしいです。

Support for this property is optional. It is recommended for UAs that wish to support CJK typography and strongly recommended for UAs in the Japanese market.

via: CSS Text Module Level 3 (CSS3 Text)

というわけで line-break プロパティがオプションである以上どう扱ってもいいはずだ!という逃げ道はあるものの、禁則処理が完全に外れてしまうのはおかしいんじゃ?もしくは「p とか全称セレクタとかに設定すんな」というお話しでした。

とはいえ禁則処理が完全に外れるって…誰得?

ちなみに Webkit というか Chrome は line-break プロパティ(相当部分)が基本的に normal レベルになっているようです。Gecko は strict。あと両者共通で break-all 状態でもなぜかカンマが行頭に来るのだけは回避されます。ピリオド(FULL STOP)は行頭に現れるのに。不思議不思議。

さらに余談ですが、これまでまるで触れてない IE。こちらは仕様どおり、完璧に動作します。そもそもこの辺は IE の独自実装が発端なので当然といえば当然?

実は Microsoft が使ってる日本語処理コードの根っこは 98 時代の NEC が書いたんだけどね…なんてオチはさすがにないか。

2012/11/23 追記

さらにいろいろ調べたところ仕様のバージョン違いのようです。

break-all
Lines may break between any two grapheme clusters within words. Hyphenation is not applied. This option is used mostly in a context where the text is predominantly using CJK characters with few non-CJK excerpts and it is desired that the text be better distributed on each line.

via: CSS Text Level 3

このバージョンでは line-break で禁止されている場合を除く、に相当する部分がありません。W3C Working Draft 14 August 2012 から変更になっているようです。

修正入ってくれるかなぁ?

カテゴリー:パソコン・インターネット

コメントを残す

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