jQuery (または Firefox) が私の<span class="presentational"></span> into <span class="presentational" />
私の質問は、このようにマークアップを書いても大丈夫ですか? ブラウザはそれで窒息しますか?
<span class="presentational" />
個人的には、空っぽにした方がきれいに見えると思います。
あなたの質問は、Firefox でソースを表示するときの自己終了要素の赤い末尾のスラッシュに関係していると思います。もしそうなら、あなたはブラウザメーカー対 Web 開発者戦争で最も激しく、同時に消極的で攻撃的な議論の 1 つに出くわしたことになります。XHTML はドキュメントのマークアップだけではありません。また、Web 上でドキュメントを提供する方法についても説明します。
始める前に; 私はここで味方しないように一生懸命努力しています。
XHTML 1.1 仕様では、Web サーバーは XHTML を application/xhtml+xml の Content-Type で提供する必要があると規定されています。ドキュメントが application/xhtml+xml ではなく text/html として提供されているため、Firefox はこれらの末尾のスラッシュを無効として選別しています。次の 2 つの例を見てみましょう。同一のマークアップで、一方は application/xhtml+xml として機能し、もう一方は 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 として提供され、整形式のコンテンツが含まれていない場合、開発者は「私の問題ではない」と言うことができます。ここで実際にそれを見ることができます
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 は馬鹿げています。なぜなら、XHTML はブラウザーのレンダリング エンジンによって決して XML として扱われないからです。
何年も前に、タグ モンキー以上のものを目指している Web 開発者 (免責事項: 私自身もその 1 人です) は、ネストされたテーブルを 3 回使用せずに魅力的なデザイン エクスペリエンスを提供するベスト プラクティスを開発する方法を探し始めました。 . 彼ら/私たちは XHTML/CSS に固執しました。なぜなら、W3C はこれが未来であり、単一のベンダー (Microsoft) が事実上のマークアップ仕様を管理する世界しか選択肢がなかったからです。本当の悪は、単一のベンダーであり、Microsoft ではありません。私は誓います。
では、論争はどこにあるのでしょうか?application/xhtml+xml には 2 つの問題があります。1つ目はインターネットエクスプローラーです。IE には、application/xhtml+xml として提供されるコンテンツがユーザーにドキュメントをダウンロードするように求める従来のバグ/機能があります。上記の xhtml-as-xhtml.php に IE でアクセスしようとすると、おそらくそのようになります。つまり、application/xhtml+xml を使用する場合は、ブラウザーで IE をスニッフィングし、Accepts ヘッダーを確認して、それを受け入れるブラウザーにのみ application/xhtml+xml を提供する必要があります。これは、正しく聞こえるほど簡単ではなく、Web 開発者が目指していた「一度書き込み」の原則に反するものでもありました。
2 つ目の問題は、XML の厳しさです。これもまた炎上しやすい問題の 1 つですが、1 つの不適切なタグや不適切にエンコードされた 1 文字が原因で、必要なドキュメントがユーザーに表示されないことがあってはならないと考える人もいます。言い換えれば、そうです、XML の形式が適切でない場合は XML の処理を停止する必要があると仕様に記載されていますが、ユーザーは仕様を気にせず、猫の Web サイトが壊れていることを気にします。
この問題をさらに悪化させるのは、XHTML 1.0 (1.1 ではない) 仕様では、特定の互換性ガイドラインに従っていることを前提として、XHTML ドキュメントをtext/html として提供できると規定されていることです。imgタグが自己終了するなどのこと。ここでのキーワードはmayです。RFC speakでは、may はオプションを意味します。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
コレクションに表示されます。同じ<p>
ことが body のchildNodes
コレクションにもあります。つまり、ノードは実質的に複数のparentを持つことができます。これは、DOM のトラバースに依存するスクリプトにとって、あまり良いニュースではありません。
私もこれについてブログを書いています。
はい。です。古いブラウザでは、場合によっては問題が発生します。
<script type='text/javascript' src='script.js' />
この場合、古いブラウザでは<script>
タグが終了していることを認識できない可能性があります。
<span /> は application/xhtml+xml として提供され、コンテンツのないスパン要素を作成することを意味します。
text/html として提供される <span /> は、</span> タグが検出されるか、要素を暗黙的に閉じる別のタグ (または EOF) が検出されるまで、要素のコンテンツがこのタグに続くスパン要素を作成することを意味します。つまり、この場合 <span /> は <span> と同じ意味です。
余談ですが、HTML 5 では HTML と XHTML の両方のシリアライゼーションが定義されているため、この問題にはなんら影響はありません。XHTML 1.0 とは異なり、XHTML 1.1 と同様に、XHTML を application/xhtml+xml として提供する必要があります。ただし、実際には、すべてのブラウザーが text/html として提供される XHTML の任意のバージョンをタグ スープとして扱うため、これは何も変更しません。
XHMTL ワーキング グループの件名に関するメモを参照してください: http://www.w3.org/TR/xhtml-media-types/
要するに、XHTML が XHTML として扱われるのであれば問題ありません。HTML のふりをする場合 (Internet Explorer (この記事を書いている時点で最新のバージョン 8 を含む) で読み込まれるようにする場合は、そうする必要があります)。
フープは非常に煩わしいので、ほとんどの人は HTML 4.01 に固執することをお勧めします。
<?xml ...?>
また、doctype の前に宣言を行うと、IE が quirks モードになることにも注意してください。
HTML には自己終了タグがないことを明確に述べておく必要があります。そのため、ブラウザーが XHTML を HTML として扱うことを決定した場合、タグが閉じていることを認識しません。のように HTML で閉じる必要のないタグでは問題ありませんが、 のような<img>
タグでは明らかに問題があります<span>
。
一般に、空の要素に省略形を使用しても問題はありませんが、問題が発生する可能性がある例外がいくつかあります。
<script>
</script>
問題を回避するために閉じる必要がある重要なものです。
もう1つは<meta>
、スパイダー<meta></meta>
の代わりに<meta />
<div></div>
正確な質問ではありませんが、関連して、書式設定に関して、IE のバージョンには、またはなどの空の要素だけで問題があります<div />
。この場合、<div> </div>
フォーマットを維持する必要があります。