web-dev-qa-db-ja.com

DOCTYPE宣言の前にコメントを表示できますか?

コメントしたい(<!-- this --> style)HTMLコードの最上部、DOCTYPE宣言の前。これは規格に準拠していますか?主要なブラウザでサポートされていますか?これを行う際に落とし穴はありますか?

56
Travis Beale

<!DOCTYPE>最初が確かにベストプラクティスです。

一部のブラウザー(おそらくIE6)が<!DOCTYPE>その前に一見無害なものがあったため-空白文字だけだと思いますが、コメントだったのかもしれません。いずれにしても、追跡する必要があるのは恐ろしい、恐ろしいバグであり、コメントや空白を<!DOCTYPE>

<!DOCTYPE>最初は、恐ろしい、とらえどころのないバグを回避するために、経験豊富なWeb開発者が行うことです。

38
Triptych

完全に有効を実行する

<!-- this, -->
<!DOCTYPE html>

ただし、これはallバージョンIEをquirks-modeに変換します(ただし、forcedを非互換モードにします—下のGotchasセクションを参照してください)最も簡単なのは、コメントをDOCTYPEの下に移動することです。

<!DOCTYPE html>
<!-- this, -->

しかし、別の方法は、コメントを「アップグレード」して、次のような適切なconditionalコメントにすることです。 :

<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>

説明: a条件付きコメントはcount IEの世界ではコメントとして機能しません。

代替構文:条件付きコメントがMicrosoftのHTML標準への侵入であることを忘れたり、思い出したりするには、たとえば

<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>

同様に、IEをターゲットにするには、特に、

<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>

Gotchas

コメント条件付きコメントはIEをquirks-modeに入れますif IE sees it(つまり:if 1つは[if IE]条件を使用するか、または[if !anybrowser]上で述べた条件です。たとえば、これはIE quirks-mode:

<![if IE]><!-- this --><![endif]>
<!DOCTYPE html>

のように

<!--[if IE]><!--><!-- this <![endif]-->
<!DOCTYPE html>

および他の多くの亜種。たとえば

<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]-->
<!DOCTYPE html>

しないquirks-modeを引き起こします、なぜならhere条件付きコメントがDOCTYPEの前にあるからですその他コンテンツ、つまりIEは、ページの最初のコンテンツがDOCTYPEであると見なします。

最後に、最新のIEバージョン、IE8およびIE9は、標準にforcedできます-別のMicrosoftの発明を使用したモード(および奇妙なモードも同様)—x-ua-compatibleディレクティブ http://msdn.Microsoft .com/en-us/library/cc288325(v = vs.85).aspx その場合、

<!-- this -->
<!DOCTYPE html>
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->

force IE8およびIE9はno-quirksモードになり、IE6およびIE7はquirksのままになりますモード。それに対して、対照的にthis

<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
<!DOCTYPE html>

force IE8およびIE9を標準モードにしますdespite条件付きコメントの内容はDOCTYPEで始まりませんではありません。また、IE6とIE7も、条件付きコメントがそれらを対象としていないため、非互換モードのままになります。

131
Komputist

それは私が信じている標準に従って許容可能ですが、それはIEを癖モードに投げるので、絶対に避けたいです。

異なるレンダリングモードのトリガー を参照)

12
jvenema

this page によると、IE7はdoctypeがまったく存在しないかのように互換モードでレンダリングする可能性があります。

3
Kevin Newman

Doctypeの前のコメントは許可されますが、all IEバージョンが互換モードに戻ります。実際には、その目的で使用されることがあります。XML宣言(<?xml version ...?>)は同じ効果があります。IE6以下では

0
Ms2ger