49

<p>私は通常、次のようにネストしません。

<p>The following:
    <p>one</p>
    <p>two</p>
</p>

代わりに使用して、そのようにネストし<div>ます。しかし、今日は使用<p>しましたが、EmacsとGoogle Chromeの両方が、新しいものが開始<p>されるとすぐに外側が閉じられたと見なすようです。<p>(これDOCTYPEは HTML 4.01 Strict です)。

事前に定義されたマージンとパディングがあるだけだと思い<p>ましたが、ネストできないのは本当ですか? もしそうなら、それができないと言っている規則は何ですか?<div><p>

4

2 に答える 2

78

パラグラフはパラグラフなので、HTML はそのように定義されます (HTML はXMLではありません)。

Any <p>(または他のブロックレベルの要素) は暗黙的にopen を閉じます<p>

9.3.1 段落ごと: HTML 4.01 仕様の P 要素:

P 要素は段落を表します。ブロック レベルの要素 (P 自体を含む) を含めることはできません。


これがHTML の解析方法であり、a でも<div>暗黙的に段落を閉じていることに注意してください。

ただし、 aはブロックレベルの要素ではない<span>ため、 withdisplay:block;はを閉じませんでした。<p><span>

つまり、CSS はHTML 処理のこの段階では無関係であり、CSS は要素がブロックレベル要素かどうかを判断する際の DOM/パーサーには無関係です。CSS が動的に、またはまだ読み込まれていないスタイルシートを介して適用される場合を考えてみましょう: 適用された CSS は DOM を変更しません。


HTML5 (ワーキング ドラフト) 仕様には HTML4 仕様の上記の言語は含まれていませんが、段階的なコンテンツのコンテナーとして段落を定義しており、さらに段落に関するセクションがあります。

P要素内にネストできるHTML5要素のリストに対する受け入れられた答えは? <p>要素は HTML5 でネストできないと述べています。ドキュメントのキー フレーズは、「一連のフレージング コンテンツ [<p>要素を含まない] フォーム パラグラフ」です。さらに、HTML5 は、多くの面で下位互換性を維持しようとしていますが、「コンテンツ モデルと属性値の制限」に関する理論的根拠があります。

特定の要素は、やや風変わりな方法で解析されます (通常は歴史的な理由から)。それらのコンテンツ モデルの制限は、作成者がこれらの問題にさらされるのを避けることを目的としています。

この動作は、フロー コンテンツに関する HTML5 WG wiki エントリから参照されます。

p 要素のネストおよび p 要素に含まれる内容に関する HTML5 の制限は、p が自動クローズされる原因となる"パーサーの特殊性" によるものです。

于 2012-08-18T04:21:46.930 に答える
11

HTML 4.01 仕様セクション 9.3.1から

P 要素は段落を表します。ブロック レベルの要素 (P 自体を含む) を含めることはできません。

于 2012-08-18T04:22:47.817 に答える