Могут ли комментарии появляться перед объявлением DOCTYPE?
Я хотел бы поместить комментарий (стиль <!-- this -->
) в самый верх моего кода HTML, предшествующий объявлению DOCTYPE. Соответствует ли это стандартам? Поддерживается ли это основным браузером? Есть ли подводные камни в этом?
Ответы
Ответ 1
Написание DOCTYPE - это, безусловно, лучшая практика.
Я помню странные проблемы давно, давным-давно, когда какой-то браузер (возможно, IE6) игнорировал DOCTYPE, потому что перед ним было что-то невиновное - я думаю, что просто пробел, но, возможно, это был комментарий. В любом случае, это была ужасная, ужасная ошибка, которую нужно отслеживать, и, конечно, никогда не было веских оснований оставлять комментарии или пробелы перед DOCTYPE.
Написание DOCTYPE в первую очередь, я бы сказал, просто что-то, что опытные веб-разработчики делают, чтобы избежать ужасных, неуловимых ошибок.
Ответ 2
полностью
<!-- this, -->
<!DOCTYPE html>
Однако он приносит все версии IE в quirks-mode (если только он не принудительно переходит в режим отсутствия quirks - см. Gotchas ниже). Самый простой способ - переместить комментарий ниже DOCTYPE.
<!DOCTYPE html>
<!-- this, -->
Но другой способ - "обновить" комментарий в подходящий комментарий условный, например:
<!--[if !IE]> this <![endif]-->
<!DOCTYPE html>
Объяснение: условный комментарий не считается count как комментарий в мире IE.
Альтернативный синтаксис. Чтобы забыть/запомнить, что условные комментарии являются вторжением Microsoft в стандарт HTML, можно было бы, например, сделать
<!--[if anybrowser]> this <![endif]-->
<!DOCTYPE html>
Аналогичным образом, для целевого IE, в частности, можно было сделать
<!--[if !anybrowser]> this <![endif]-->
<!DOCTYPE html>
Gotchas
Комментарий внутри условного комментария приведет IE к quirks-mode , если IE видит его (то есть: , если используется [if IE] или эквивалент [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, потому что здесь условный комментарий имеет DOCTYPE перед любым другим контентом, и, следовательно, IE считает, что первым содержимым страницы является DOCTYPE.
Наконец, новейшие версии IE, IE8 и IE9, могут быть принудительно использованы в стандартном режиме (и в режиме quirks-mode) с использованием другого изобретения 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]-->
будет усиливать IE8 и IE9 в режиме без 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 также будут оставаться в режиме отсутствия quirks, поскольку условный комментарий не нацелен на них.
Ответ 3
Хотя это приемлемо для стандартного, я считаю, вы определенно хотите его избежать, так как он превратит IE в режим quirks.
(Смотрите Запуск различных режимов рендеринга)
Ответ 4
Это может привести к тому, что IE7 будет отображаться в режиме quirks, как если бы тип doctype отсутствовал вообще, согласно эта страница.
Ответ 5
Комментарии до doctype разрешены, но вызывают версии all IE, чтобы вернуться в режим quirks. Фактически, они используются для этой цели. Объявление XML (<?xml version ...?>
) имеет тот же эффект в IE6 и ниже.