この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2006年8月)

2006年8月14日

URLの折り返し問題はGecko(Firefox)のバグなのか?
初回投稿日時: 2006年08月14日03時32分35秒
最終更新日時: 2006年08月14日03時42分40秒
カテゴリ: CSS HTML Mozilla Core XHTML
SNS: (list)

URLの折り返し問題はGecko、つまりブラウザで言えばFirefoxのバグなのか。この辺をよく理解できていない方がいるようなので私見を書いておこうと思う。

現時点で、Web表示、つまりレイアウト時における文字列折り返しに標準仕様は無い。つまり、Geckoは間違えた実装をしている訳ではない。(CSS3のテキストモジュールでline-breakプロパティがあるが、まだ標準仕様と考えるには時期尚早だと思われるし、ここで厳密な処理が定義されている訳でも無いことに注意が必要である。)

では、現在のGeckoの表示は適切か、と聞かれれば、答えはシンプルに適切ではないと言い切れる。明らかに一部のレイアウトとの相性が良くないためだ。これは仕様云々の話ではない。

つまり、Geckoは間違えた実装をしている訳ではないが、まだまだベターな実装はあるはずである、という状況である。そこで、GeckoはUAX#14をベースとした実装を追加しようとしている。

では、UAX#14とはなんなのか。あれは、Unicodeの仕様である。しかし、CSS3の草案でもこれの利用が推奨されているのみで、これの厳密実装はブラウザは行うべきではないと私は考えている。

何故か。その理由はシンプルで、これだけでブラウザに期待される表示はおそらく不可能である。おそらくUAX#14は通常の自然言語を前提にした仕様と思われる(まだ仕様書を読破できていないので断言はできない)。

そう、よく問題に上げられるURLという書式は単なる記号としての文字の羅列であって、これに自然言語のルールを当てはめてもうまく行かないケースが出てくるはずである。このため、UAX#14はWebデザインのための標準仕様としては力不足の側面がある。

私はこの問題がブラウザ間で完全に互換性がとれる日は来ないと思う。そもそも改行処理の定義は難しい。UAX#14の問題から分かるように、どこで改行すれば人間にとって期待通りになるかという問題はそのテキストのコンテキスト、つまり文脈等に依存する。そう、あらゆる文脈で通用する仕様を定義するか、あらゆる文脈向けに仕様を作るか、このどちらかが実現しなくては標準化ができないが、どちらもまず無理だろう。百歩譲って、それが実現したとしても、今度は文脈を判定するというとんでもなく困難な問題に直面する。例えば自然言語で考えてみても、未だに日本語と中国語を機械的に判定するのは難しい。おそらく、辞書を用いた解析が必須だろう。そして、URLのように辞書が使えない文脈も判定する必要が出てくる。例えば、2006-08-14という文字列があったとしよう。これを日付のフォーマットなのか計算式なのか判別しなければいけない状況を想定するといかに無茶な話なのか分かってもらえるのではないかと思う。

最後に、ひとつだけWebデザイナ側の問題点だけは指摘しておこう。

URLが折り返されないことが原因でレイアウトが崩れた場合、それはそのサイトの構造に問題があることが多い。レイアウトが崩れる場合、それは折り返されなかったことによって文字列の幅が祖先要素の幅を期待したものとは異なる結果にしてしまったということである。この状況をCSS2.1仕様に照らし合わせると、shrink-to-fitには関係無いことが分かるので、問題が発生しうるのはテーブルのセルの内部だけということが分かる(他のケースでは内容のテキストによって祖先の要素幅が変わることは無い)。

display: table-cell;を用いたひねくれた、現実的では無いケースを除き、そのセルはHTMLによって定義されたテーブルのセルであると考えるのが現実的だ。つまり、レイアウトが期待通りにいかなかった場合には二つのケースが考えられる。

  • URLに関する表を書いたが、期待通りにURLが折り返されなかった
  • テーブルを本来の目的とは異なるレイアウトのために利用したため、幅の固定に失敗した

前者の場合(これはレアケースとは思うが)はブラウザ側の問題である。Webデザイナを責めてはいけない。彼らには何の落ち度もないし、現在のレイアウトの仕様上、仕方のない問題である。だからといってブラウザに全ての責任をおしつけるのも適当とは思えないが。

だが、最も発生している、そして問題とされている後者は明らかに不勉強なWebデザイナの失態である。本来の目的外の利用を行ったことで意図通りに表示されなかったことをブラウザのせいにされても困る訳だ。StrictなHTMLとCSSでデザインすることによって同じ内容のコンテンツを作ってみれば分かる。URLは要素からはみ出すが、そのおかげで横スクロールしなければ他のコンテンツを読むことができないという事態は発生しない。ただし、floatした要素等と文字が重なることで、不適切な表示になる可能性はある。この重なってしまうことに対してブラウザに文句なり、要望なりを出すことは妥当である(要求が通るかどうかはともかく、筋としては正しい)。だが、横スクロールしなければコンテンツを読むことができない、(ブロックレベルの)レイアウトが期待通りにならない、というのはWebデザイナ側の問題であってブラウザ側の問題ではないのだ。

関連するかもしれないエントリ

関連するかもしれないエントリを発見できませんでしたが、無いとは限りません。