要素に自己終了タグを書くことは、伝統的に空ではない悪い習慣ですか?
質問
jQuery(またはFirefox)が私の<span class="presentational"></span> into <span class="presentational" />
今、私の質問は、このようにマークアップを書いても大丈夫ですか?どんなブラウザでもそれを詰まらせますか?
個人的には、空になる場合は<span class="presentational" />
を実行する方がきれいだと思います。
解決
あなたの質問は、Firefoxでソースを表示するときの自己終了要素の赤い末尾のスラッシュに関係していると思います。もしそうなら、あなたはブラウザメーカー対ウェブ開発者戦争で最も激しい、しかし同時に受動的な積極的な議論の一つにつまずいた。 XHTMLは、ドキュメントのマークアップだけではありません。また、ドキュメントがWeb上でどのように提供されるかということも重要です。
始める前に;私はここで味方しないように頑張っています。
XHTML 1.1仕様では、Webサーバーはcontent-Typeがapplication / xhtml + xmlのXHTMLを提供する必要があるとしています。ドキュメントはapplication / xhtml + xmlではなくtext / htmlとして提供されているため、Firefoxはこれらの末尾のスラッシュを無効として除外しています。これら2つの例を取り上げます。同じマークアップ、1つはapplication / xhtml + xmlとして、もう1つはtext / htmlとして提供されます。
http://alanstorm.com/testbed/xhtml-as-html.php
http://alanstorm.com/testbed/xhtml-as-xhtml.php
Firefoxは、metaタグの末尾のスラッシュに、text / htmlで配信されるドキュメントでは無効であり、application / xhtml + xmlで配信されるドキュメントでは有効であることを示します。
これが物議を醸す理由
ブラウザ開発者にとって、XHTMLのポイントは、ドキュメントをXMLとして扱うことができるということです。つまり、誰かが無効なものを送信しても、解析する必要がないという仕様です。したがって、ドキュメントがapplication / xhtml + xmlとして提供され、整形式でないコンテンツがある場合、開発者は<!> quot; not my problem <!> quot;と言うことができます。こちらで動作を確認できます
http://alanstorm.com/testbed/xhtml-not-valid.php
ドキュメントがtext / htmlとして提供される場合、Firefoxはそれを単純な古いHTMLドキュメントとして扱い、許しを使用し、修正し、ルーチンを解析します
http://alanstorm.com/testbed/xhtml-not -valid-as-html.php
つまり、ブラウザメーカーにとって、text / htmlとして提供されるXHTMLは、ブラウザのレンダリングエンジンによってXMLとして扱われることはないため、馬鹿げています。
数年前、タグモンキー以上のものを探しているWeb開発者(免責事項:私はそれらの1つとして自分自身を含めます)は、ネストされたテーブルを3回使用せずに、まだ許可したベストプラクティスを開発する方法を探し始めました魅力的なデザイン体験。 W3Cはこれが未来であり、他の唯一の選択肢は単一のベンダー(Microsoft)が事実上のマークアップ仕様を制御する世界だったと言ったため、彼ら/私たちはXHTML / CSSにラッチしました。本当に悪いのは、単一のベンダーであり、マイクロソフトではありません。私は誓います。
論争はどこにあるのでしょうか? application / xhtml + xmlには2つの問題があります。最初はInternet Explorerです。 IEには、application / xhtml + xmlとして提供されるコンテンツがユーザーにドキュメントをダウンロードするよう促すレガシーバグ/機能があります。 IEで上記のxhtml-as-xhtml.phpにアクセスしようとすると、おそらく何が起こったのでしょう。つまり、application / xhtml + xmlを使用する場合は、 IEのブラウザースニッフィングを行い、Acceptsヘッダーを確認し、application / xhtml + xmlをそれを受け入れるブラウザーにのみ提供する必要があります。これは簡単ではありません正しいように聞こえますが、<!> quot; write once <!> quot;ウェブ開発者が目指していた原則。
2番目の問題は、XMLの過酷さです。これもまた、これらの難易度の高い問題の1つですが、1つの悪いタグ、または1つの文字が不適切にエンコードされていると、ユーザーが見えないはずがないと考える人がいます目的のドキュメントを入力します。つまり、はい、仕様はXMLの形式が適切でない場合は処理を停止する必要があると言っていますが、ユーザーは仕様を気にせず、猫のWebサイトが壊れていることに気をつけています。
この問題にさらにガソリンを追加するのは、XHTML 1.0(1.1ではない)仕様であり、特定の互換性ガイドラインに従います。 imgタグが自動的に閉じるなど。ここでのキーワードは may です。 RFC speak では、オプションを意味する場合があります。 Firefoxは、XHTML doctypeではなくtext / htmlのコンテンツタイプで配信されるドキュメントをXHTMLとして扱うことを選択しました。ただし、W3Cバリデーターはこれらのドキュメントを有効として報告します。
may という言葉の意味を定義するためにドキュメントを書く文化の同時不思議/恐怖について読者に任せます。
前進する
最後に、これが HTML 5 全体の目的です。 XHTMLは政治的なホットポテトになったため、言語を前進させたいと考えた多くの人々が別の方向に進むことを決めました。彼らはHTML 5の仕様を作成しました。これは現在W3Cでハッシュ化されており、次の10年でいつか終了する予定です。それまでの間、ブラウザベンダーは進行中の仕様から機能を選択して選択し、実装しています。
コメントからの更新
コメントで、 Alex は、何かを盗聴する場合は、Acceptをチェックする必要があることを指摘しています。ユーザーエージェントがapplication / xhtml + xmlを受け入れるかどうかを確認するヘッダー。
これは完全に正しいです。一般に、スニッフィングする場合は、ブラウザではなく機能をスニッフィングします。
他のヒント
他の回答への追加:IEでは、マークアップに<span />
などの要素を含めると、 JavaScriptのDOMトラバーサルメソッドであらゆる種類の問題が発生します。次のXHTMLドキュメントをご覧ください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Test</title>
<script type="text/javascript">
function show() {
var span = document.getElementById("span");
alert(span.innerHTML);
}
</script>
</head>
<body onload="show();">
<p id="p1">Paragraph containing some text followed by
an empty span<span id="span"/></p>
<p id="p2">Second paragraph just containing text</p>
</body>
</html>
アイデアは、ページがロードされると、JavaScriptが空のスパンへの参照を取得し、そのHTMLコンテンツを表示するというものです。空の文字列になりますよね? IEではそうではありません。 IEでは、ドキュメント全体のスパンの後にすべてのコンテンツを取得します。
</P>
<P id=p2>Second paragraph just containing text</P>
また、2番目の<p>
は、スパンのchildNodes
コレクションに表示されます。同じ<=>もボディの<=>コレクションにあります。つまり、ノードは複数の親を持つことができます。これは、DOMのトラバースに依存するスクリプトにとってそれほど良いニュースではありません。
これについてブログも書いています。
はい。そうです。古いブラウザでは特定の場合に問題が発生します。
<script type='text/javascript' src='script.js' />
この場合、古いブラウザは<script>
タグが終了したことを理解していない可能性があります。
application / xhtml + xmlとして提供、<!> lt; span / <!> gt;コンテンツのないspan要素を作成することを意味します。
text / htmlとして提供、<!> lt; span / <!> gt; <!> lt; / span <!> gt;まで要素のコンテンツがこのタグの後に続くspan要素を作成することを意味します。タグが検出されるか、要素を暗黙的に閉じる別のタグ(またはEOF)が検出されます。つまり、この場合<!> lt; span / <!> gt; <!> lt; span <!> gt;と同じ意味です。
さておき、HTML 5はHTMLとXHTMLの両方のシリアル化を定義しているため、この問題に何らかの影響はありません。 XHTML 1.1と同様に、XHTML 1.0とは異なり、XHTMLをapplication / xhtml + xmlとして提供する必要があります。ただし実際には、すべてのブラウザーがタグスープとしてtext / htmlとして提供されるXHTMLのすべてのバージョンを扱うため、これは何も変わりません。
注目に値するのは、Doctypeの前の<?xml ...?>
宣言がIEをQuirksモードにスローすることです。
XHMTLワーキンググループの主題に関する注を参照してください: http:// www.w3.org/TR/xhtml-media-types/
要するに<!>#8212; XHTMLをXHTMLとして扱う場合は問題ありません。 HTMLのふりをしようとする場合(Internet Explorer(執筆時点で最新のバージョン8を含む)でロードする場合はこれを行う必要があります)、フープをジャンプする必要があります。
フープは非常に迷惑なので、ほとんどの人がHTML 4.01に固執することをお勧めします。
通常、空の要素に省略形を使用しても問題ありませんが、問題を引き起こす可能性のある例外がいくつかあります。
<script>
は、問題を回避するために</script>
で閉じる必要がある重要なものです。
もう1つは<meta>
です。これは、<meta></meta>
<meta />
と記述されたスパイダーで非常によく機能します。
正確な質問ではありませんが、書式設定に関しては、IEのバージョンには<div></div>
や<div />
などの空の要素だけで問題があります。この場合、フォーマットを維持するには<div> </div>
が必要です。
HTMLには自己終了タグがないことを明示的に言う必要があります。したがって、ブラウザーがXHTMLをHTMLとして扱うことを決定するたびに、タグが閉じていることを認識しません。 <img>
のようなHTMLで閉じる必要のないタグには問題ありませんが、<span>
のようなタグには明らかに悪いです。