Могут ли комментарии появляться перед объявлением DOCTYPE?
Вопрос
Хочу оставить комментарий(<!-- this -->
style) в самом верху моего HTML-кода, перед объявлением DOCTYPE.Соответствует ли это стандартам?Поддерживается ли он основными браузерами?Есть ли какие-либо подводные камни при этом?
Решение
Написание <!DOCTYPE>
первое, безусловно, является лучшей практикой.
Я помню странные проблемы давным-давно, когда какой-то браузер (вероятно, IE6) игнорировал <!DOCTYPE>
потому что перед этим было что-то, казалось бы, невинное - я думаю, просто пробел, но, возможно, это был комментарий.В любом случае, это была ужасная, ужасная ошибка, которую нужно было отследить, и, конечно, никогда не было веской причины оставлять комментарии или пробелы перед <!DOCTYPE>
.
Написание <!DOCTYPE>
Во-первых, я бы сказал, это просто то, что делают опытные веб-разработчики, чтобы избежать ужасных, неуловимых ошибок.
Другие советы
Это полностью действительный делать
<!-- this, -->
<!DOCTYPE html>
Однако, это дает все версии IE в режим причуд (если это не принужденный в режим без особенностей — см. Ошибки раздел ниже).Самый простой — переместить комментарий под DOCTYPE.
<!DOCTYPE html>
<!-- this, -->
Но другой способ состоит в том, чтобы "обновление" комментарий в подходящий условный комментарий, например такой:
<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>
Объяснение: а условный комментарий не считать как комментарий в мире IE.
Альтернативный синтаксис: Чтобы забыть/помнить, что условные комментарии являются вторжением Microsoft в стандарт HTML, можно, например, сделать
<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>
Точно так же, в частности, для IE, можно было бы сделать
<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>
Ошибки
Комментарий внутри условный комментарий переведет IE в режим совместимости если IE это увидит (то есть: если человек использует [если IE] условие или эквивалент [if IE] — например, [если !любой браузер] условие, о котором я упомянул выше.).Так, например, это приведет IE в режим совместимости:
<![if IE]><!-- this --><![endif]>
<!DOCTYPE html>
Как бы
<!--[if IE]><!--><!-- this <![endif]-->
<!DOCTYPE html>
и многие другие варианты.Тогда как, например
<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]-->
<!DOCTYPE html>
бы нет вызвать режим причуд, потому что здесь у условного комментария есть DOCTYPE до любой другой content, и поэтому 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 в без причуд режиме, в то время как IE6 и IE7 останутся в причуды режим.Тогда как, напротив, этот
<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]-->
<!DOCTYPE html>
бы сила IE8 и IE9 в стандартном режиме, несмотря на что содержание условного комментария нет начните с DOCTYPE.И IE6 и IE7 также останутся в режиме без особенностей, поскольку условный комментарий не предназначен для них.
Хотя я считаю, что это приемлемо по стандарту, вам определенно следует избегать этого, поскольку это переведет IE в режим совместимости.
(Видеть Запуск различных режимов рендеринга)
Это может привести к тому, что IE7 будет отображаться в режиме совместимости, как если бы типа документа вообще не было. эта страница.
Комментарии перед типом документа разрешены, но причина все Версии IE для возврата в режим совместимости.Их действительно иногда используют для этой цели.XML-объявление (<?xml version ...?>
) имеют тот же эффект, в IE6 и ниже.