設計上の決定-</ p>なしで<p>を生成する理由


14

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は有効ですか?より一般的には、ここで見落としているトレードオフは何ですか?


2
現在の答えにもかかわらず、これはモロニックなデザインのように見えます。「あなたが受け入れるものに寛大であり、あなたが送るものに保守的である」など。また、完全に不要です。私は間違いなく(強い言葉で)バグレポートをMoinmoinに提出します。少なくとも、この直感的でない動作を明確に文書化してコメントする必要があります。
コンラッドルドルフ

回答:


33

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

p要素の直後に住所、記事、脇、blockquote、dir、div、dl、フィールドセット、フッター、フォーム、h1、h2、h3、h4、h5、h6、ヘッダーが続く場合、p要素の終了タグは省略できます。 、hgroup、hr、menu、nav、ol、p、pre、section、table、またはul、element、または親要素にコンテンツがなく、親要素がa要素でない場合。

出典:HTML5仕様

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


5
偉大な心は同じように思う、と思う。:)
ロバートハーヴェイ

@RobertHarveyこのラウンドは12秒で勝ちます
...-ヤンニス

2
終了タグを省略することを支持するもう1つの議論は、ドキュメント構造から明らかであり、誤用されると、誤った空白が導入される可能性があることです。
ジョンパーディ

1
終了タグを省略できることは、HTMLのベースとなっているSGMLの設計上の特徴でした。また、XHTMLのベースとなっているXMLの機能でもないことは明らかです。
アランシュトコ

4
私がよく見る議論の1つは、見た目がきれいだということです。特に<li>タグの場合、タグは弾丸のように機能します。
不機嫌なヤギ

16

HTML5W3C仕様には、特に次のように記載されています。

p要素の直後に住所、記事、脇、blockquote、dir、div、dl、フィールドセット、フッター、フォーム、h1、h2、h3、h4、h5、h6、ヘッダーが続く場合、p要素の終了タグは省略できます。 、hr、menu、nav、ol、p、pre、section、table、ul要素、または親要素にコンテンツがなく、親要素が要素ではない場合。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.