Могут ли комментарии появляться перед объявлением DOCTYPE?

StackOverflow https://stackoverflow.com/questions/941100

  •  06-09-2019
  •  | 
  •  

Вопрос

Хочу оставить комментарий(<!-- 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 и ниже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top