web-dev-qa-db-ja.com

設計の決定-なぜ<p>なしで</ p>を生成するのですか?

tl; dr

Htmlを生成する一部の広く使用されているプログラムは、ブラウザが段落を適切に閉じると仮定して、開始タグのみを生成し、終了タグは生成しません。

一見すると、ブラウザが段落を適切に閉じるという仮定は正しくないように思えます。私の解釈は正しいですか?より一般的には、この種の決定にはどのようなトレードオフが関係していますか?


Moinmoinのソースコードを閲覧すると、次のコード行が目に留まりました。

# We only open those tags and let the browser auto-close them:
_auto_closing_tags = set(['p'])

ソース

残りの実装を読んだ後、確かに、moinmoinがページの1つにHTMLコードを生成すると、適切に、適切に段落オープンタグを生成すると同時に、意図的に段落のクローズタグ(ささやかにそうすることができるにもかかわらず)。

私の特定の、かなり珍しい使用例では、この動作は正しくありません。バグレポートを提出したり、動作を変更したりしたいと思っています。ただし、この設計上の決定は慎重に行われたようです。 html標準の複雑さ、またはさまざまなブラウザーの実装に精通しているわけではないので、これが一般的に正しい動作であるかどうかを判断できません。この動作を修正または変更するという本能は、見当違い。

このコードは、ブラウザーの実装について有効な仮定を行っていますか?生成されたHTMLは有効ですか?より一般的には、ここでどのトレードオフを見逃す可能性がありますか?

14
blueberryfields

p要素の終了タグはHTMLではオプションであり、XHTMLでのみ必須でした。ただし、HTML5ドラフトでは、p終了タグが実際にはオプションである場合の一連の条件が導入されています。

P要素の直後にaddress、article、aside、blockquote、dir、div、dl、fieldset、footer、form、h1、h2、h3、h4、h5、h6、headerが続く場合、p要素の終了タグは省略できます、hgroup、hr、menu、nav、ol、p、pre、section、table、ul、または要素、または親要素にコンテンツがなく、親要素がa要素でない場合。

出典: HTML5仕様

とは言っても、私が今まで聞いたforの唯一の引数は、p要素の終了タグを省略して、ドキュメントのサイズです。それがあなたの文書にとって意味があるかどうかを決めるのは完全にあなた次第です。個人的には、終了タグがオプションの場合の要件を満たさない場合に備えて、すべてのオプションの終了タグを含める傾向があります。

33
yannis

HTML5のW3C仕様 は特に次のように述べています。

P要素の直後にaddress、article、aside、blockquote、dir、div、dl、fieldset、footer、form、h1、h2、h3、h4、h5、h6、headerが続く場合、p要素の終了タグは省略できます、hr、menu、nav、ol、p、pre、section、table、ul要素、または親要素にコンテンツがなく、親要素がa要素でない場合。

したがって、基本的に、仕様では、タグを閉じることの複雑さ(大きくても小さくても)を回避できる多くの方法が提供されています。準拠するブラウザの実装では、これらの例外に対応する必要があります。

16
Robert Harvey