何よりもまず、h1
toh6
要素は、HTML 3.2 に戻っても、検証のために常に開始タグと終了タグの両方を必要としていました。
H1
、H2
、H3
、H4
、H5
およびH6
は、ドキュメントの見出しに使用されます。開始タグと終了タグは常に必要です。
したがって、リンク内のページと例の両方が無効です。
とはいえ、ブラウザが両方のケースを異なる方法で処理する方法は興味深いものです (そして、閉じられていない<h3>
タグが問題です)。
HTML DOM では、要素が互いに子になることができないのと同様に、to 要素h1
が互いに子になることはありません。そのような閉じられていない開始タグの直後に続くタグへの開始は、暗黙的にそれを閉じます。したがって、あなたの例のすべての要素は、実際には互いに兄弟であり、連続した子孫ではありません。h6
p
<h1>
<h6>
h3
ただし、そのページで起こっていることは、h3
要素が互いにまったく兄弟ではないということです。font
代わりに、それらはすべて表のセル、要素などで区切られています。これはかなりごちゃごちゃしています (ただし、Microsoft FrontPage 1で作成されたページにはおそらく予想されることですが)。
ただし、タグ<tr>
と<td>
タグには独自の終了タグがありますが、これ<h3>
によってそれらの間のタグが暗黙的に閉じられることはありません。彼らはまだ開いています!どのタグも閉じられておらず、要素と競合する<h3>
中間<font>
タグやその他のタグh3
があるため、結果として、および要素にもかかわらずh3
、要素には後続のすべてのタグが子孫として含まれますが、直接の子としては含まれません。<tr>
<td>
h3
font
font
...
h3
font
font
...
その結果、連続するh3
. どの要素も属性font
を定義していないため、これらの要素は無関係であることに注意してください。size
このすべてからの主なポイントは?
おかしなマークアップを検証します。2特に、おかしなタグをすべて閉じます(タグを閉じることが禁止されている場合を除く)。
このページと例では、quirks モードをトリガーする HTML 3.2 doctype を使用していますが、この動作は quirks モードと標準モードの両方で一貫していることに注意してください。実際、HTML5 仕様には、無効なマークアップに関するさまざまなブラウザーの動作を固定するために、解析とDOM ツリーの構築に完全に特化したセクションが含まれています (従来のマークアップとの互換性などのため)。ブラウザーは、標準モードでもこの仕様に従うことが期待されているため、ほとんどのブラウザーでは両方のモードで一貫した動作が行われます。
には、この特定の状況を処理する方法に関する規則を含むサブセクションがあります。
タグ名が「h1」、「h2」、「h3」、「h4」、「h5」、「h6」のいずれかである開始タグ
開いている要素のスタックp
にボタン スコープ内の要素がある場合、タグ名「p」の終了タグが表示されたかのように動作します。
現在のノードが、タグ名が「h1」、「h2」、「h3」、「h4」、「h5」、または「h6」のいずれかである要素である場合、これは解析エラーです。開いている要素のスタックから現在のノードをポップします。
トークンの HTML 要素を挿入します。
これは、パーサーが現在開いている見出し要素にあるときにのみ見出しタグに遭遇した場合、解析エラーがスローされ、この新しい見出し要素に入る前に、以前に開いた見出し要素を閉じる必要があることを意味します。これはあなたの例で起こっていることです. それ以外の場合、特別なことは何も起こりません (つまり、パーサーは通常どおり続行する必要があります)。
とはいえ、これに頼らないでください。解析エラーは依然としてエラーです。パーサーに親切にして、できるという理由だけでエラーをスローしないでください。有効なコードを書くだけで問題ありません。もちろん、コードを検証した後もブラウザーが混乱し続ける場合は、心配する必要があります。
1 ちなみに、これは私の最初の HTML エディターでもありました... 私は 9 歳でした。
2 やり過ぎはいけませんが、怠りもいけません。