彩りの大地 うぇぶでざいん

ぺぇじへっどらいん

要素の種類について

概要

<body>間で扱える要素には大きく分けて2種類あり、定義する領域がそれぞれ違う。
それぞれの領域をしっかりとマスターすれば充実し充実したHTML生活が認可されることは間違いない。(某B語)

なお、HTML 5においては、「インライン要素」「ブロック要素」「リスト要素」に代わる、 「カテゴリ」と「コンテンツモデル」 という概念によって、「インライン要素」「ブロック要素」「リスト要素」的なものを分類しています。
概念こそ異なりますが、 HTMLを記述するうえでは「インライン要素」「ブロック要素」「リスト要素」として意識しておいても大差ないため、 このページでも「インライン要素」「ブロック要素」「リスト要素」という文言を使用して説明しています。

インライン要素について

早い話、文字です。文字だけを定義する要素で、ピンポイントで扱うようなものとなっています。
代表的な要素に<span>、Transitionalなら<font>などもあります。
それ以外に<strong>・<em>・<b>・<i>・<del>・<ins>・<s>・<a>など、 文字修飾やハイパーリンクなどが大体これです。

以下にインライン要素の領域を示します。 扱う領域がよくわかるように、スタイルシートを使って背景色を挿入しています。

<span>開始と終了でくくられていて、かつ、文字が存在する部分までしか定義しない。</span> <span>間に改行を入れていない場合はこうなる。 あくまで文字を装飾するだけならインライン要素を使うべきそうすべき。</span> <a name="hogehoge">ハイパーリンクだろうとアンカーだろうとインライン要素ならとにかくこうなる。</a> <span>入れ子にしてみたけど <span>こんな</span> 感じ。</span>

インライン要素はこのような扱いのため、センタリングや右寄せなど、文字位置の扱いまでを変更することはできない。

ブロック要素について

開始と終了までを1つの区画として扱います。って、よくわかりませんね。
まあ、とりあえず、例を見てくださいという話で。

<div>要するにこういうこと。開始と終了までの間をひとつのくくりとして扱う。</div>
<div>インライン要素の時と同じく、 次のブロック要素の始まりの前までの間に改行を入れていないけどこうなる。 ひとブロックの中の文字を一度に装飾場合にも使える。</div>
<div>このタグの場合、大体のブラウザはデフォでウィンドウ横幅100%に設定されている。 横幅をきちんと定義(360pxに)してやるとこんな感じになる。</div>
<div>ブロック要素にセンタリングや右寄せなどをすると、このように、中の要素に効果がある。</div>

<p>前後にスペースが開くことで有名なこのタグもブロック要素。 スタイルで定義すればスペース幅も自在になる。それはもちろん、ほかのブロック要素もしかり。</p>

<table><tr><td>もちろん、この要素も。ただし、幅は文字長に左右される。</td></tr></table>
<div>もちろん、ブロック要素でも
<div>入れ子は可能。ちなみに、わかりやすいように、この領域の両端の余白を(100pxずつ)つめています。</div>
わかったかな?</div>

(通常の文字を含めた)インライン要素は、 すべてブロック要素でくくらなければならないという決まりがあるため、必須の要素となっている。
ブロック要素には代表的な要素に<div>・<p>・<table>(<tr>・<td>)などがあります。

そして、ご覧のように、インライン要素はインライン要素に、ブロック要素はブロック要素に入れ子にすることができます。 インライン要素はすべてブロック要素でくくらなければならないという決まりがあるという以上、 ブロック要素はインライン要素を入れ子にすることができますが、その逆はできません。たとえば……

<div> <span>おk</span> </div>

<span><div>こういうのはダメ</div></span>

さらにややこしいことに、<p>要素はブロック要素ですが、 入れ子にできるのはインライン要素だけという決まりがあります。

<div>

<p>おk</p>

</div>

<p><div>ダメ!</div></p>

<p> <span>インラインはおkなのでこれもおk</span> </p>


<p><p>これもダメ!</p></p>

まあ、<p>は「段落」、 つまり、開始から終了までを1つの文章(つまりインライン)のまとまりを定義するための要素なのでわからなくもないですが、 なんだか面倒くさいですね。

<div>
<div>
<div>
<div> <span> <span> 余談ですが、入れ子にする回数に限りはないので、こういうのもおk。 ただし、くれぐれも、変なページを作らないようにね。 </span> </span> </div>
</div>
</div>
</div>

リスト要素について

ブロック要素の親戚で、開始と終了までを1つの区画として扱いますが、要素自体がリストを定義するものです。
リスト要素なので、そのとおり、<dl>(<dt>・<dd>)・<ul>(<li>)・<ol>(<li>)がそうです。

以下にリスト要素の領域をそれぞれ示します。 例によって扱う領域がよくわかるように、スタイルシートを使って背景色を挿入しています。

※<dl>色付けあり、<dt>・<dd>なし
<dt>1</dt>
<dd>2</dd>
<dt>3</dt>
<dd>4</dd>
<dd>5</dd>
<dd>6</dd>
※<dl>色付けあり、<dt>・<dd>もあり
<dt>1</dt>
<dd>2</dd>
<dt>3</dt>
<dd>4</dd>
<dd>5</dd>
<dd>6</dd>
※<ul>色付けあり、<li>なし
  • <li>1</li>
  • <li>2</li>
  • <li>3</li>
※<ul>色付けあり、<li>もあり
  • <li>1</li>
  • <li>2</li>
  • <li>3</li>
※<ol>色付けあり、<li>なし
  1. <li>1</li>
  2. <li>2</li>
  3. <li>3</li>
※<ol>色付けあり、<li>もあり
  1. <li>1</li>
  2. <li>2</li>
  3. <li>3</li>

ご覧のとおり、リストの開始と終了までを定義する<dl>・<ul>・<ol>はリスト全体を領域としている(当たり前だけど)。 その振る舞いはやっぱりブロック要素に似ているとも取れなくもない。
<dt>・<dd>も基本的にはタグの効果どおりの領域だけれども、 これもブロック要素<div>と同じで、ウィンドウの右端まで領域を持つので、必要なら横幅を定義する必要が出てくると思う。
<li>は実は、定義するのは内容の部分だけなので、頭のマーク部分までは定義されないという謎が。 ただし、テキスト色など、一部の影響だけは受けるという更なる謎が。 余白をつける場合などは左余白の扱いが<dd>と同じくつめられている(インデントされている、どのブラウザでもだいたい似たような動作のハズ)ので、くれぐれも注意が必要。