12

最新のブラウザー (Chrome、Firefox、または IE の最新の安定したビルド)でこのページを見ると、テキストのサイズが大きくなっていることがわかります。ソースコードを見ると、<h3>コード内の s が閉じられていないことが原因のようです。

ただし、ほとんどのブラウザは、機会があればいつでもタグを自動的に閉じることを思い出します。次のコード (壊れたサイトと同じ Doctype) は、すべてのタグが閉じられても問題なく動作します。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
  <head></head>
  <body>Hello
    <h3>My
    <h3>Name
    <h3>Is
    <h3>Manish
  </body>
</html>

そのため、 unclosed<h3>は問題ではない (または問題の一部に過ぎない) 可能性があります。

それで、私の質問は、ブラウザがそこでタグを自動閉じないのはなぜですか?

4

3 に答える 3

15

何よりもまず、h1toh6要素は、HTML 3.2 に戻っても、検証のために常に開始タグと終了タグの両方を必要としていました。

H1H2H3H4H5およびH6は、ドキュメントの見出しに使用されます。開始タグと終了タグは常に必要です。

したがって、リンク内のページと例の両方が無効です。

とはいえ、ブラウザが両方のケースを異なる方法で処理する方法は興味深いものです (そして、閉じられていない<h3>タグが問題です)。

HTML DOM では、要素が互いに子になることができないのと同様に、to 要素h1が互いに子になることはありません。そのような閉じられていない開始タグの直後に続くタグへの開始は、暗黙的にそれを閉じます。したがって、あなたの例のすべての要素は、実際には互いに兄弟であり、連続した子孫ではありません。h6p<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 やり過ぎはいけませんが、怠りもいけません。

于 2013-02-09T10:47:58.603 に答える
1

<p>またはのような特定のタグのみ<li>が自動的に閉じられます。<hN>タグはありません。

(また、今後の参考のために、サイトが最新の 2 つ以上のブラウザーで壊れている場合、問題はブラウザーや仕様にあるのではなく、通常はサイトにあります)。

無効な修正者が実行できる罰には限界があります。<font>要素は (無効であっても) インラインであり<h3>、直系の子孫ではない (「兄弟」として認識されない) ため、<h3>これらの要素の外側を閉じる理由はなく、それらの要素は内側に含まれます。

于 2013-02-09T10:43:12.193 に答える
-3

常に見出しタグを閉じる必要があります。私が学んだことから、通常は問題ありませんが、p タグと li タグを閉じるのも良いことです。コーディングについては、できるだけ具体的にするのが最善です。ブラウザに何かを推測させたくないので、具体的に記述してください。

于 2013-02-09T11:00:51.227 に答える