Могут ли комментарии появиться до объявления DOCTYPE? - PullRequest
56 голосов
/ 02 июня 2009

Я хотел бы разместить комментарий (стиль <!-- this -->) в самом верху моего HTML-кода, предшествующего объявлению DOCTYPE. Соответствует ли это стандартам? Поддерживается ли это основными браузерами? Есть ли подводные камни в этом?

Ответы [ 5 ]

130 голосов
/ 04 февраля 2011

Это полностью действительный , чтобы сделать

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

Тем не менее, переводит все версии IE в режим quirks (если только принудительно не переходит в режим без quirks - см. раздел Gotchas ниже). Самое простое - переместить комментарий под DOCTYPE.

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

Но еще один способ - «обновить» комментарий в подходящий условный комментарий, такой как этот:

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

Объяснение: a условный комментарий не считается комментарием в мире IE.

Альтернативный синтаксис: Чтобы забыть / запомнить, что условные комментарии являются вторжением Microsoft в стандарт HTML, можно, например, сделать

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

Аналогично, для целевой IE, в частности, можно сделать

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

Gotchas

Комментарий внутри условного комментария переведет IE в режим quirks , если IE видит его (то есть: , если , то используется [ если IE] условие или эквивалент [if IE] - такой как [if! anybrowser] условие, которое я упоминал выше.). Так, например, это привело бы IE в режим quirks:

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

Как бы

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

и многие другие варианты. Тогда как, например,

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

будет не вызывать режим quirks, потому что здесь условный комментарий имеет DOCTYPE перед любым другим контентом и, следовательно, IE считает, что первое содержимое страницы является DOCTYPE.

Наконец, новейшие версии IE, IE8 и IE9 , могут быть принудительно переведены в стандартный режим (а также в режим причуда) с помощью другого изобретения Microsoft - директива x-ua-совместимая . См. 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]-->

переведет в IE8 и IE9 в режим no-quirks , а IE6 и IE7 останутся в режиме quirks . Тогда как, напротив, это

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

приведет к принудительному IE8 и IE9 в стандартный режим, несмотря на , что содержание условного комментария не начинается с DOCTYPE. И IE6, и IE7 также останутся в режиме отсутствия причуд, так как условный комментарий не нацелен на них.

38 голосов
/ 02 июня 2009

Написание <!DOCTYPE> во-первых, безусловно, лучшая практика.

Я помню странные проблемы давным-давно, когда какой-то браузер (вероятно, IE6) игнорировал <!DOCTYPE>, потому что до этого было что-то, казалось бы, невинное - я думаю, что это просто пробел, но, возможно, это было комментарий. В любом случае, это была ужасная, ужасная ошибка, которую нужно было отследить, и, безусловно, никогда не было веской причины оставлять комментарии или пробелы до <!DOCTYPE>.

Написание <!DOCTYPE> во-первых, я бы сказал, просто опытный веб-разработчик, чтобы избежать ужасных, неуловимых ошибок.

12 голосов
/ 02 июня 2009

Хотя это приемлемо в соответствии со стандартом, я полагаю, вы определенно хотите избежать этого, так как это приведет IE в режим причуд.

(См. Запуск различных режимов рендеринга )

3 голосов
/ 02 июня 2009

Это может привести к тому, что IE7 будет отображаться в режиме причуд, как если бы doctype вообще не было, согласно этой странице .

0 голосов
/ 03 июня 2009

Комментарии до типа документа разрешены, но все версии IE возвращаются в режим причуд. Они, на самом деле, иногда используются для этой цели. Декларация XML (<?xml version ...?>) имеет тот же эффект, в IE6 и ниже .

...