月曜日, 9月 22, 2025
月曜日, 9月 22, 2025
- Advertisment -
ホームニューステックニュースCSS大解剖 2日目: 「文書とボックス木」

CSS大解剖 2日目: 「文書とボックス木」


本稿は、2024年2月頃に書き溜めていたシリーズです。最後まで温存させるのが勿体ないので、未完成ですがそのまま公開します(公開日: 2025/9/21)。そのため、内容の重複や記述方針の不一致があるかもしれませんが、ご理解ください。


CSSの仕様を理解するために、1日ごとにテーマを決めて説明する企画2日目です。今日のテーマは「文書とボックス木」です。

文書

CSSの処理モデルにおいて、 文書 (document) とはCSSのスタイルが適用される対象のことです。これはほとんどの場合HTML文書なので、以降では文書はHTML文書のことであるとします。

DOM

HTML文書の形式的な構造はDOMで規定されています。DOMにおいて、文書はノードの木構造として定義されています。

ノードはNodeクラスのインスタンスですが、Nodeには様々なサブクラスがあります。

図: Nodeのクラス図。Document, Text, Elementが最も重要

この中でも重要なのが Element, Text, Document の3種類です。

  • Element はHTMLのタグ () で囲まれた部分に対応するノードです。
  • Text はHTMLでタグなどの特別な構文を使わずに書かれた部分(※文字参照は含む)です。
  • Document はDOMのルート (最上位ノード) をあらわす特別なノードで、JavaScriptの document に対応します。原則としてDocumentTypeノードと最上位要素の2つの子を持ちます。

最上位ノードと最上位要素は異なることに注意してください。最上位ノードは Document のインスタンス (document) であり、最上位要素は 要素です。 要素は HTMLHtmlElementの要素です。

図: Documentの下にhtml要素がある

DOM: 要素、タグ、タグ名

「要素」と「タグ」の区別が曖昧であれば、ここで使い分けを確認しておきましょう。たとえば以下のコード断片を考えてみます。

h1>Welcome!h1>
p>Lorem ipsum dolor sit ametp>
p>The quick fox jumps overp>
  • タグ (tag) とは

    • 狭義の タグ (tag) は、 > で囲まれた部分です。先ほどのソースコードの場合、タグは , , , , (2個目), (2個目) の6つです。
      • タグはHTMLソースコード上の概念であり、DOM上の概念としては存在しません。

    • タグ名 (tag name) のことをタグと呼ぶこともあります。先ほどのソースコードの場合、コード中に出現するタグ名は h1p の2種類です。
  • 要素 (element) は、大まかには、対応する開きタグと閉じタグで囲まれた部分のことです。先ほどのソースコードの場合、要素は3つあります。

図: タグで囲まれた部分が要素

DOM: 空白の扱い

HTML文書においては空白 (スペース文字、タブ、改行など) がある程度特別扱いされています。これは、DOMより前に処理されているものとDOMより後に処理されているものに大別できます。

DOMより前に処理されるもの

DOMになった時点で元のデータが失われているので、CSSでどう設定しても元の状態を復元することはできません。

なお、JavaScriptでテキストノードを直接追加した場合はこれらの処理の影響を受けません。たとえば、この方法を使えばU+000D Carriage Returnを含むテキストノードを作ることもできます。

改行の正規化

HTMLソースコード中に直接出現する改行文字は正規化されます。いわゆるCRやCRLF形式の改行はLF形式の改行に変換されます。

早期空白文字

より前の空白はパース時に除去されます。たとえば、以下のソースコードを考えます。

doctype html>
html>
  head>
    meta charset="utf-8">

ここで空白は以下のようにパースされます。

doctype html>html>head>⏎
␣␣␣␣meta charset="utf-8">

複数行テキスト領域の特別処理

, 
                            
                            
あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -