DOM から HTML を見てみると...

前へ 目次 次へ

Mozilla の DOM は HTML4.0 CSS2 をはじめ多くの標準化された仕様に依存しています。

そこで今回はいきなり Mozilla の DOM の内容に移る前に、 その前提となっている W3C 関連の仕様に関する話題を簡単に採り上げることにします。


DOM の目的は HTML・XML などで記述されたドキュメントをプログラムから 参照、操作するために設けられたものです。 従って DOMを理解するためには、まず HTMLや CSS など DOM を定義する対象について 理解しておく必要があります。

とは言っても HTML や CSS の仕様を解説したのでは この連載の目的から外れますので、 HTML そのものの仕様は W3C のドキュメントを参照してもらうとして(笑)、 DOM と HTML の関係を見てみましょう。

まず最初に DOM と HTML は互いに1:1の関係でなければなりません。 そこ には矛盾や曖昧さは存在しません。 例えば HTML 上で閉じタグを忘れた場合、HTML のドキュメント構造は曖昧になりますが、 ブラウザはこの曖昧さを評価します。 NN ならエラーとして廃棄し、 IE なら評価の過程で失われたタグを補完(*1)します。

*1 この IE の動作は時として、補完されたドキュメント構造が、 意図と異なるため原因不明のスクリプトエラーを引き起こす原因となります。 DHTML などを作成する場合のトラブルを避けるためには、 まず正しい( 曖昧さのない )記述を心がけるべきでしょう。

次に HTML4.0 の仕様の特徴は、 これに加えてタグをブロックレベル要素と インライン要素に分けていることでしょう。 DOM にとって、この2つの要素の分離は比較的重要な役割を果たしています。

例えば、次の HTML を考えてみます。

<p>其のもの蒼き衣をまとい<strong>金色の野</strong>に下り立つべし</p>

Pタグはブロックレベル要素で STRONGタグはインライン要素であり(*2)、 このような表示になることもあるでしょう。

其のもの蒼き衣をまとい金色の
に下り立つべし
← <strong> の範囲
← <p> の範囲

つまり、ブロックレベル要素は基本的に内部を包含する矩形領域になり、 インライン要素は必ず矩形領域になるとは限らないという特徴があります。

*2 厳密には、タグとブロック・インラインの各要素は対応していません。 タグの使われ方で要素が決定されます。

また、HTML4.0 と親密な関係にある CSS に関しても同様に ボックスモデルについての書式モデル( visual formatting model )で ブロック および インライン の2種類のボックスに分けて考えられています。

そこで、各要素に ブロックボックスに特徴的な margin, padding などを 指定すると、なかなか面白い結果が得られます。

◆NN4 :strong タグをブロック要素と解釈する( つまり改行される )
◆IE4/5.0:strong タグに対する指定を無視する
◆IE5.5 :strong タグに関しては、文字列のベースラインを固定にして margin, padding を適用する(*3)
◆Mozilla:strong タグに関しては、文字列のベースラインを固定にして margin, padding を適用する(*3)
*3 IE5.5 と Mozilla は margin, padding に関しては同じような動作をしますが、 IE の表示に問題が発生しますのでマネはしないように(笑)

NN4 や IE4 が HTML4 の仕様より先に開発されていたことを考えると、これら はバグとは考えずに margin, padding のような 矩形領域 の内容に付随する 要素がタグに従属するかスタイルに従属するかの解釈の違いという見方 もできます。

現在の HTML4.01, CSS2 の仕様は出力媒体としてブラウザのみを対象として いないためか、 表示書式について 充分に厳密な定義をしているわけではない ようです( 仕様書中には UA - User Agent - 依存と記述されている )。 (*4)

*4 スクリプトからスタイルを変更した場合の結果についても同様です。

つまり HTMLや CSS が統一されたとしてもこのような部分は残ります。 それはひょっとすると 解釈や実装の違い によりブラウザ毎に見栄えの変わる 要因になるかもしれません。

特にクロスブラウザとしてブラウザを問わないページを作成しようとした場合 表示の同一性を重視するなら、これらの曖昧さをも回避する方が無難かもしれません。

ん〜、今回はちょっと難しく書きすぎたような... f(^^; 反省っ
前へ 目次 次へ

戻る Copyright(c) 2000 ShinSoft All rights reserved.