HTML5について話しているのですか?現時点では、その仕様が他の仕様に取って代わることになっているため、そのまま使用します。
個々の要素については説明しませんが、何か調べる必要がある場合は、次のリファレンスを参照してください。
http://www.w3.org/TR/html5-author/
「コンテンツ モデル」について説明しているセクションでは、
要素の期待される内容の説明
ここにあります: http://www.w3.org/TR/html5-author/content-models.html
特定の要素の仕様でいくつかの例を確認できます。
http://www.w3.org/TR/html5-author/the-html-element.html#the-html-element (html
要素):
要素のhead
後に続くbody
要素。
具体例
a
(要素上の) 最初のリンクから、a
そのコンテンツ モデルがTransparentであることを学習しますが、それはインタラクティブ コンテンツの子孫がない場合のみです。
「透過的」の定義を見ると、aa
が親から Content Model を継承していることがわかります。つまり、最初の定義が正しくなく、a
実際に を含むことができますがdiv
、その親ができる場合に限ります。上記のドキュメントには、ネストされた「透明な」コンテンツ モデル要素の例も含まれています。
a
「インタラクティブコンテンツ」モデル要素を含めることはできないため、要素をまったく含めることはできませんbutton
。どの要素がクリックにアクティブに応答したかについて競合が発生するため、これは理にかなっています。
span
2 番目のリンクspan
を見ると、そのコンテンツ モデルが「フレージング コンテンツ」であることがわかります。これは、基本的にテキストと段落レベルのテキストのマークアップです。定義は完全に具体的ではありませんが、ガイドラインが含まれています。
フレージング コンテンツとして分類されるほとんどの要素には、フロー コンテンツではなく、フレージング コンテンツとして分類される要素のみを含めることができます。
div
には「フレージング コンテンツ」モデル (「フロー コンテンツ」)がないため、それspan
を含めることはできません。これは、span
が上記の規則に従い、他の「フレージング コンテンツ」要素および/または埋め込みコンテンツまたはテキストのみを含む必要があることを意味します。上記のルールが破られている場合、要素の「コンテンツ モデル」の説明に具体的に記載されます ( a
「インタラクティブ コンテンツ」に関する要素の特別なルールを思い出してください) span
。
br
3 番目のリンク はbr
、コンテンツ モデルが「空」であることを示しています。残念ながら、W3C にはそのための特定の定義が含まれていませんが、かなり明白だと思います。つまり、子孫をまったく含むことができないということです。テキストノードでさえありません。「空の」コンテンツ モデル要素には終了タグがありません ( as <br>
not asと記述します<br></br>
)。
あなたの質問
上記のルールは正確ですか?
最初のルール (インラインとブロック)
あなたの言ったことは誤解を招くものです。HTML にはinline
対block
要素の概念がありません。これらは CSS スタイルです。ほとんどのブラウザーには、要素のdisplay
スタイルのデフォルト設定があり、それがそれぞれ「フレージング」または「フロー」コンテンツ モデルであるかどうinline
かblock
に応じて (一般的な規則として、それについて難しいことや速いことは何もありません)、または単に伝統的です。
「フレージング コンテンツ」要素に「フロー コンテンツ」要素を含めることはできないと言いたい場合は、それが仕様に明確に記載されているため、正しいでしょう。これは、 (あなたが示すように)span
含むことができないため、実際には機能します。div
しかし、それa
を含めるべきではないというのdiv
は間違いです。 親ができる限りa
含めることができます。が に含まれているdiv
場合、 を含むことはできません。ただし、または別のに含まれている場合は可能です。a
span
div
a
body
div
ブラウザーが「寛容」であることは、有効な HTML を作成する時間がない多くの開発者にとって非常に便利ですが、時間をかけたい私たちにとっては苦痛になる可能性があります。あなたが言うように、ブラウザーは通常、「HTML 構造」を変更しません。ブラウザーが変更するのは DOM です。また、Web ベンダーの仕様は、上で投稿した「Web 作成者」の仕様とは少し異なりますが、私たちは作成者です。
2 番目のルール (p
を含むp
)
これは、私が省略した重要な点のために当てはまります: Context
.
p
要素仕様から:
この要素を使用できるコンテキスト:
フロー コンテンツが期待される場所。
は「フレージング コンテンツ」であるため、「フロー コンテンツ」ではなく「フレージング コンテンツ」が期待されるため、別のものを a 内に配置できないことp
を意味します。p
p
その他のルールはありますか?
HTML5 仕様には膨大な数の要素が含まれているため、ここでそのすべての詳細を説明することはできません。あなたがそれらを具体的に取り上げたので、私は内容span
とa
内容について詳しく説明しました. この答えの長さを見てください!div
p
あなたがする必要があるのは、仕様自体で疑問がある要素を調べることです。コンテキストとコンテンツ モデルのセクションを見て、要素の使用が有効かどうかを確認してください。
要約すれば
要素がどのように機能するかについて質問がある場合は、仕様を参照してください。要素をどのように使用すべきか(コンテナーとコンテンツに関して)についての質問に答えるには、以下を参照してください。
- この要素を使用できるコンテキスト:
- コンテンツ モデル:
これにより、要素を含むことができるもの、含むことができるもの、およびいつ含まれるかがわかります。
HTML が有効かどうかについて疑問がある場合は、W3C マークアップ検証サービスをいつでも使用できます。
http://validator.w3.org/
Chrome を使用している場合は、Chrome インスペクター (F12) を見て、出力 DOM をソース HTML 自体と比較できます。たとえば、Chrome はp
DOM を生成するときに、ネストされたタグを自動的に閉じることに気付くでしょう。