Bug 4449 word-spacingが に描画時のみ適用される
初回投稿日時: 2006年03月10日01時15分36秒
カテゴリ: CSS Mozilla Core
SNS:
Tweet (list)
修正完了。このバグでディスカッションした結果、word-spacing
は以下のように仕様変更となる。
- 単語の区切り文字一文字ごとにword-spacing値分、空白の幅を追加する
- 単語の区切り文字は、U+0020(半角スペース)、U+00A0(NBSP)、U+3000(全角スペース)の三文字
CSS3では前者の定義が覆されかけたが、結局この仕様に落ち着いている。前者の仕様の明確化により<length>値の基準となる文字の大きさは、word-spacing
指定時のfont-size
が参照されることになる。
例えば以下のような例を考えてみる。
<ol style="font-size: 20px; word-spacing: 0.1em;"> <li>word word</li> <li style="font-size: 2em;">word word</li> <li style="font-size: 2em; word-spacing: 0.1em;">word word</li> </ol>
この場合、ol要素のword-spacing
の算出値は2ピクセルとなるので、一つ目のリストアイテムの空白に追加される幅は2ピクセルとなる。また、二つめのリストアイテムの文字の大きさは倍の40ピクセルになっているが、word-spacing
は計算結果を継承するので、このリストアイテム内で空白に追加される幅は2ピクセルのままである。最後のみword-spacing
が再度指定されているのでその文字の大きさから計算され、20ピクセル × 2 × 0.1 = 4ピクセルとなる。
まあ、おそらくCSS2の仕様をきちんと理解していればここは明文化されただけなので違和感は何もないと思うが、整形済みテキストで出現する可能性のある空白文字の連続はCSS2でどう対処すれば良いのか定義されてなかったのでこの明文化には意味があることに注意して欲しい。
ただし、(今回修正するコードの問題ではなかったため)今回は踏み込まなかったが、次のような例は非現実的ではあるが問題が残っている。
word<span style="word-spacing: 1px;"> </span><span style="word-spacing: 2px;"> </span>word
この例でどちらの値を採用するかは今のところ実装依存である。(最も、この問題はword-spacing
に限った話ではなく、background
等でもどうなるのかという問題がある。)
その次は完全に新しい情報。まだCSS2.1の仕様書にも反映されていないが、概ね本決まりの模様。CSS2では単語の区切りとなる文字に関して明確な定義が行われていなかったが、上記の三文字と定義するということで話が落ち着いている。これ以外の空白(例えば、enスペースや、emスペース、ゼロ幅スペース等)はword-spacing
の適用される語の区切り文字とはならない。
ただし、今回の修正では全角スペースには対応していない。これは仕様書に明文化されてから作業することになっているためで、現在は半角スペースと、NBSPのみが区切り文字として認識される。
次はletter-spacing
について作業しようかと考えている。これの仕様の曖昧さは実に酷い。