5

HTML 4.01標準を読んでいるのは間違っていますか、それともGoogleですか?HTML 4.01では、次のように記述します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html> <head> <body>plain <em>+em <strong>+strong </em>-em

GoogleChromeでのレンダリングは次のとおりです。

プレーン+ em +ストロング-em

これは、基礎となるSGMLルールを次のように要約するHTML 4.01標準と矛盾しているようです。「終了タグが閉じて、一致する開始タグに戻り、すべての閉じられていない介在する開始タグと省略された終了タグ」。¹

つまり、</em>終了タグは<em>開始タグだけでなく、閉じられていない介在する<strong>開始タグも閉じる必要があり、レンダリングは次のようになります。

プレーン+ em +ストロング-em

コメント提供者は、タグを開いたままにしておくのは悪い習慣であると指摘しましたが、これは学術的な例にすぎません。同様に良い例は次のとおり<em> +em <strong> +strong </em> -em </strong>です。HTML 4.01標準から、要素が重複しているためにこのコードフラグメントが意図したとおりに機能しないことがわかりました。つまり、</em>終了タグは暗黙的にを閉じる必要があり<strong>ます。それが意図したとおりに機能したという事実は驚くべきことであり、これが私の質問につながったものです。

そして、私は質問で誤った二分法を提案したことがわかりました。Googleも私もHTML4.01標準を間違って読んでいませんでした。w3.orgの私的な特派員は、 MartinBryanによって説明されたWebSGMLとHTML4.0を指摘しました。これは、次のように説明しています。より高いレベルの要素の終了タグに遭遇します。(ただし、終了タグを省略できない埋め込み要素がまだ開いている場合、プログラムはコーディングでエラーを報告します。)” <a href="http://www.is-thought.co.uk/book/sgml-9.htm#Omitting" rel="nofollow">²(強調を追加)ブライアンによるSGML標準の要約は正しく、HTML4.01の要約は間違っています。

4

6 に答える 6

5

一部のタグは省略できます(の終了タグ<p>またはの開始タグと終了タグなど)。一部のタグは省略できません(<body>の終了タグなど<strong>)。あなたが引用する仕様のセクションが参照しているのは前者です。DTDでダッシュを使用すると、それらを識別できます。

<!ELEMENT P - O (%inline;)*            -- paragraph -->
  ^A p element
            ^ requires a start tag
              ^ has optional end tag
                 ^ contains zero or more inline things
                                       ^ Comment: Is a paragraph

あなたが持っているのは、タグが省略されたHTMLドキュメントではなく、ブラウザがエラー回復を実行しようとする無効な疑似HTMLドキュメントです。

仕様(HTML 4の場合)では、エラー回復の実行方法については説明されていません。これはブラウザに任されています。

于 2012-01-06T23:58:14.167 に答える
5

HTML 4.01仕様から引用されたステートメントは、非常にあいまいであるか、すべてのアカウントでまったく間違っています。HTML 4.01には、終了タグの省略に関する特定の規則があり、これらの規則は要素によって異なります。たとえば、要素の終了タグはp省略できますが、要素の終了タグはem省略できません。仕様のステートメントは、おそらく、終了タグの省略が許可されている範囲で、終了タグがまだ閉じられていないすべての内部要素を暗黙的に閉じることを意図しています。

正式にその一部であるSGML機能を使用して、定義されたHTML 4.01(または以前のHTML仕様)を実装したブラウザはありません。HTML仕様でSGMLについて述べられていることはすべて、他の方法で証明されるまでは理論的なものと見なす必要があります。

HTML5は、エラー処理ルールを書き留める以外は、この点でゲームのルールを変更しません。このような単純な問題では、ルールによって従来のブラウザの動作が標準になります。それらはtagsoup指向であり、特定のタグを多かれ少なかれフォーマットコマンドとして扱います。「イタリック体化<em>」、「イタリック体化の</em>停止」などを意味します。しかし、HTML5はエラー処理をより正式に定義する手段も講じているため、このようなタグスープの使用にもかかわらず、 DOM内のどのドキュメントツリーが構築されるかを明確に定義します。

于 2012-01-07T00:16:28.467 に答える
1

最新のブラウザはすべてHTML5パーサーを使用しているため(HTML 4.01コンテンツの場合でも)、HTML5の解析ルールが適用されます。詳細については、HTML5仕様の「HTMLドキュメントの解析」セクションを参照してください。

HTMLアウトライン

  • HTML
      • #text ""()
      • #text "plain"()
      • EM
        • #text "+ em"(斜体)
        • 強い
          • #text "+ strong"(太字/斜体)
      • 強い
        • #text "-em"(太字)
于 2012-01-06T23:54:04.397 に答える
1

仕様によると:

Some HTML element types allow authors to omit end tags (e.g., the P and LI element types).

これ:

Please consult the SGML standard for information about rules governing elements (e.g., they must be properly nested, an end tag closes, back to the matching start tag, all unclosed intervening start tags with omitted end tags (section 7.5.1), etc.).

終了タグを省略できる要素に適用されます。

Pエレメントの仕様を見ると、次のことがわかります。

開始タグ:必須、終了タグ:オプション

したがって、これを使用する場合:

<DIV>
<P>This is the paragraph.
</DIV>

要素はP自動的に閉じられます。

ただし、EM仕様を見ると、次のことがわかります。

開始タグ:必須、終了タグ:必須

したがって、HTMLが無効であるため、この自動クローズのルールは無効です。

不思議なことに、すべてのブラウザは、その種の無効なHTMLで同じ動作を示しました。

于 2012-01-07T00:15:54.947 に答える
-1

http://validator.w3.org/checkを介してHTMLを実行しようとすると、このHTMLはほとんど無効であるとしてフラグが立てられます。

HTMLが無効な場合、すべての賭けが無効になり、ブラウザが異なればHTMLのレンダリングも異なる可能性があります。

于 2012-01-07T00:01:56.957 に答える
-1

ChromeのDOMを右クリックして「要素の検査」と言うと、タグが一致していないため、どこを台無しにしたかを判断するアルゴリズムが適用されていると推測できます。技術的には、正しい場所で強力なタグを閉じます。ただし、おそらく両方のテキストを太字にしようとしていると判断されるため、最後の-emをまったく新しい余分な「強い」要素に入れ、「+strong」を独自の「強い」要素に残します。クロームチームが、両方を大胆にしたいと統計的に考えているように思えます。

于 2012-01-07T00:15:33.377 に答える