未分類

【HTML】コンテンツ・モデル、カテゴリーについて【各要素のマークアップのルールや分類などを表します】

コンテンツ・モデルやカテゴリーを理解できれば、HTML5のマークアップをスムーズに記述できます!

コンテンツ・モデルとは?

HTMLの記述では、例えば、『<p>本文の<a href=”sample.html”>テキスト</a>です。</p>』というように、要素(p要素)の中に要素(a要素)を含めて記述することができます。

つまり、親要素(例えば、p要素)の中に、子要素(例えば、a要素)を含めるように、記述することができます。

しかし、この「親要素と子要素との関係」について、どのような組み合わせでも良いというわけではなく、この「親要素と子要素との関係」には、ルールが設定されています。

そのため、このルールとして、HTMLの各要素にはそれぞれ、『コンテンツ・モデル』が設定されています。

例えば、p要素には、『コンテンツ・モデル』として「フレージング・コンテンツ」が設定されています。

これは、言い換えると、「p要素を親要素とする場合、そのp要素の中に、子要素として、フレージング・コンテンツしか含めることができません。」という意味になります。

具体的には、例えば、以下の記述内容になります。

<p>ここの内容は<strong>重要事項</strong>になります。</p>

つまり、p要素の『コンテンツ・モデル』は「フレージング・コンテンツ」が設定されているため、上記のソースコードの通り、親要素であるp要素の子要素として、『カテゴリー』が「フレージング・コンテンツ」であるstrong要素が記述されています。

このように、『コンテンツ・モデル』を理解することで、親要素と子要素との関係を適切に整理することができ、コードを適切に記述することができます。

なお、『(カテゴリーが)「フレージング・コンテンツ」であるstrong要素』の意味については、次の『カテゴリー』の項目で説明致します。

カテゴリーとは?

HTML5において、各要素は、主に以下の7つの要素に分類されています。そして、その分類された『カテゴリー』を踏まえ、『コンテンツ・モデル』に基づいた記述を行う必要があります。

メタデータ・コンテンツ

Webページのタイトルやメタデータ等、HTML文書の概要を記述するための要素です。HTML文書の中では、head要素の中で記述される要素が、メタデータ・コンテンツに属します。

<base>、<command>、<link>、<meta>、<noscript>、<script>、<style>、<title>

フロー・コンテンツ

HTML文書の本体(内容)を記述するための要素です。HTML文書の中では、body要素の中で記述される要素が、フロー・コンテンツに属します。

<a>、 <abbr>、 <address>、 <area>、 <article>、 <aside>、 <audio>、 <b>、 <bdi>、 <bdo>、 <blockquote>、 <br>、 <button>、 <canvas>、 <cite>、 <code>、 <data>、 <datalist>、 <del>、 <details>、 <dfn>、 <div>、 <dl>、 <em>、 <embed>、 <fieldset>、 <figure>、 <footer>、 <form>、 <h1>、 <h2>、 <h3>、 <h4>、 <h5>、 <h6>、 <header>、 <hr>、 <i>、 <iframe>、 <img>、 <input>、 <ins>、 <kbd>、 <keygen>、 <label>、 <main>、 <map>、 <mark>、 <math>、 <menu>、 <meter>、 <nav>、 <noscript>、 <object>、 <ol>、 <output>、 <p>、 <pre>、 <progress>、 <q>、 <ruby>、 <s>、 <samp>、 <script>、 <section>、 <select>、 <small>、 <span>、 <strong>、 <style>、 <sub>、 <sup>、 <svg>、 <table>、 <template>、 <textarea>、 <time>、 <u>、 <ul>、 <var>、 <video>、 <wbr>、 テキスト

セクショニング・コンテンツ

文章の区分や節等、コンテンツの固まりの階層構造(アウトライン)を定義する要素です。

<article>、 <aside>、 <nav>、 <section>

ヘディング・コンテンツ

文章の中で、見出しを表す要素です。

<h1>、 <h2>、 <h3>、 <h4>、 <h5>、 <h6>

フレージング・コンテンツ

文章内のテキスト、及び段落内のテキストをマークアップするための要素です。

<a>、 <abbr>、 <area>、 <audio>、 <b>、 <bdi>、 <bdo>、 <br>、 <button>、 <canvas>、 <cite>、 <code>、 <data>、 <datalist>、 <del>、 <dfn>、 <em>、 <embed>、 <i>、 <iframe>、 <img>、 <input>、 <ins>、 <kbd>、 <keygen>、 <label>、 <map>、 <mark>、 <math>、 <meter>、 <noscript>、 <object>、 <output>、 <progress>、 <q>、 <ruby>、 <s>、 <samp>、 <script>、 <select>、 <small>、 <span>、 <strong>、 <sub>、 <sup>、 <svg>、 <template>、 <textarea>、 <time>、 <u>、 <var>、 <video>、 <wbr>、 テキスト

エンベディッド・コンテンツ

HTML文書に、外部リソースを埋め込むための要素です。外部リソースは、画像、動画、音声等のコンテンツに相当します。

<audio>、 <canvas>、 <embed>、 <iframe>、 <img>、 <math>、 <object>、 <svg>、 <video>

インタラクティブ・コンテンツ

ユーザーが操作することができるコンテンツ(入力フォーム等)を表す要素です。

<a>、 <audio>、 <button>、 <datalist>、 <embed>、<iframe>、 <img>、 <input>、 <keygen>、 <label>、 <menu>、 <object>、 <select>、 <textarea>、 <video>

その他の特殊なマークアップルール

その他の特殊なマークアップのルールについても見ていきましょう。

トランスペアレント・コンテンツ(コンテンツ・モデル)

『コンテンツ・モデル』として「トランスペアレント・コンテンツ」に属する要素は、親要素のコンテンツ・モデルを引き継ぐ性質を持っています。このため、親要素によって、中に含めることができる要素が変わります。

例えば、トランスペアレント・コンテンツに基づく記述は、以下のようになります。

<div><a href=”sample.html”><p>この内容は重要です。</p></a></div>

サンプルのソースコードのうち、a要素のコンテンツ・モデルは、トランスペアレント・コンテンツです。そして、div要素のコンテンツ・モデルは、フローコンテンツになります。このため、a要素のコンテンツ・モデルもフロー・コンテンツとなり、a要素の中には、カテゴリーがフロー・コンテンツであるp要素を含めることができます。

なお、コンテンツ・モデルの観点から自由度の高いトランスペアレント・コンテンツですが、そのトランスペアレント・コンテンツの中に、カテゴリーがインタラクティブ・コンテンツである要素を含めることは禁止されています。

パルパブル・コンテンツ(カテゴリー)

『カテゴリー』として、「パルパブル・コンテンツ」に属する要素は、その中に、hidden属性が指定されていない要素を1つ以上含める必要があります。

<a>、 <abbr>、 <address>、 <article>、 <aside>、 <audio>、 <b>、 <bdi>、 <bdo>、 <blockquote>、 <button>、 <canvas>、 <cite>、 <code>、 <data>、 <dfn>、 <div>、 <dl>、 <em>、 <embed>、 <fieldset>、 <figure>、 <footer>、 <form>、 <h1>、 <h2>、 <h3>、 <h4>、 <h5>、 <h6>、 <header>、 <i>、 <iframe>、 <img>、 <input>、 <ins>、 <kbd>、 <keygen>、 <label>、 <main>、 <map>、 <mark>、 <math>、 <meter>、 <nav>、 <object>、 <ol>、 <output>、 <p>、 <pre>、 <progress>、 <q>、 <ruby>、 <s>、 <samp>、 <section>、 <select>、 <small>、 <span>、 <strong>、 <sub>、 <sup>、 <svg>、 <table>、 <textarea>、 <time>、 <u>、 <ul>、 <var>、 <video>、テキスト

ここで、hidden属性は、全ての要素に指定が可能なグローバル属性の一つです。そして、要素にhidden属性を指定することで、ブラウザ上において、その要素の非表示を可能にする属性です。

すなわち、パルパブル・コンテンツに属する要素は、「ブラウザ上において、非表示にしてはならない」ということになります。

しかしながら、実際のコーディングにおいては、パルパブル・コンテンツの中が空となるように記述した場合であっても、ブラウザ上の表示に問題が生じることもないため、過剰に注意する必要性は無い、とも解釈されています。

セクショニング・ルート(カテゴリー)

「カテゴリー」として、「セクショニング・ルート」に属する要素は、セクションのルートとして扱うことが可能な要素になります。つまり、セクショニング・ルートに属する要素は、独自のアウトライン(階層構造)を持つことができます。

<blockquote>、 <body>、 <details>、 <fieldset>、 <figure>、 <td>

例えば、セクショニング・ルートに基づく記述は、以下のようになります。

<section>
	<h1>見出し</h1>
	<p>テキスト</h>
	<blockquote>
		<h2>引用タイトル</h2>
		<p>引用文の内容</p>
	</blockquote>
</section>

上記のソースコードでは、親要素であるsection要素の中に、子要素であるblockquote要素が記述されています。そして、親要素(section要素)の中には見出しとしてh1要素が記述されており、子要素(blockquote要素)の中においても見出しとしてh2要素が記述されています。

ここで、blockquote要素は、セクショニング・ルートに属する要素であるため、独自のアウトラインを持つことになります。このため、blockquote要素の中の見出し(h2要素)は、section要素の中の見出し(h1要素)とは関係を持つことなく、独立した見出しとしてブラウザ上で認識されます。

以上、コンテンツ・モデルやカテゴリーについて、ご参考になさってください!

-未分類