Должно ли объявление DOCTYPE быть первым тегом в HTML-документе?[дубликат]
Вопрос
На этот вопрос уже есть ответ здесь:
Наш менеджер безопасности динамически вставляет фрагмент javascript в начало каждой html-страницы, когда страница запрашивается клиентом.Он вставляется над инструкцией DOCTYPE .Я думаю, что это может быть причиной проблем с версткой, с которыми я сталкиваюсь.
Есть какие-нибудь идеи?
Решение
Да, DOCTYPE должен быть первыми данными на странице: http://www.w3schools.com/tags/tag_DOCTYPE.asp
Другие советы
Да, тип ДОКУМЕНТА должен быть на первом месте.
Определение приведено здесь: http://www.w3.org/TR/REC-html40/struct/global.html.Обратите внимание, что в нем говорится, что документ состоит из трех частей, и DTD должен быть первым.
Рекомендация для HTML выражает это как применение SGML, которое требует, чтобы DOCTYPE
объявление появляется перед HTML-элементом (игнорируя HTML-комментарии).Даже без DOCTYPE
, добавляя SCRIPT
элемент за пределами HTML
элемент (либо перед ним, либо после него) не является допустимым HTML.Конечно, валидность HTML может быть для вас необязательной, если она работает в большинстве браузеров, и тогда упомянутое переключение режима quirks поможет вам:без DOCTYPE
, многие браузеры переключатся в режим quirks, возможно, изменив макет.
Я предполагаю, что фрагмент скрипта TAM добавляется каким-либо прокси-сервером или другим, который не способен должным образом проанализировать HTML-структуру страницы и вставить SCRIPT
в правильном положении в HEAD
или BODY
из документа.В этом случае добавление в конец документа, хотя и недопустимого HTML, будет работать в большинстве веб-браузеров.
Однако это может быть источником вашей проблемы!Проверьте "режим причуд", поскольку это зависит от настроек doctype.Дальнейшее изучение : http://www.quirksmode.org/ объяснение:вы можете переключить свой браузер (в основном IE) в режим компиляции по строгим стандартам и свободный режим.Это сильно повлияет на рендеринг.Настройки ТЭМА могли включать / выключать это.
Я прочитал спецификации w3, в которых просто сказано, что документ состоит из 3 частей.Последовательность предполагается, и нет явного утверждения, запрещающего, например, небольшой фрагмент js в начале.
Я понимаю, что можно настроить TAM для добавления js в конце документа, но мне непонятно, почему они разместили его сверху, если это может вызвать такие очевидные проблемы!
W3c (at w3.org), на странице под названием html5/syntax.html, гласит : "a ДОКУМЕНТАЛЬНЫЙ ТИП это обязательная преамбула", которую я интерпретирую как означающую, что она обязательна и что она должна быть на первом месте.
В нем также говорится, что он должен состоять из следующих компонентов в таком порядке:
- Строка, которая соответствует строке в формате ASCII без учета регистра
<!DOCTYPE
. - Один или несколько пробелов.
- Строка, которая соответствует строке в формате ASCII без учета регистра
html
. - Необязательно, устаревшая строка DOCTYPE или устаревшая разрешенная строка DOCTYPE (определяется ниже).
- Ноль или более пробелов.
- A
>
(U+003E) символ.
Да, doctype должен быть первым в документе (за исключением комментариев).Вам следует избегать вставки скриптов перед doctype;совместимые анализаторы не обязаны принимать это.(Они должны принимать добавленные скрипты после остальную часть документа, если это альтернатива.)
Из спецификации HTML 5:
8.1 Написание HTML-документов
Этот раздел применим только к документам, средствам разработки и генераторам разметки.В частности, это не относится к средствам проверки соответствия;> средства проверки соответствия должны использовать требования, приведенные в следующем разделе > ("синтаксический анализ HTML-документов").
Документы должны состоять из следующих частей в указанном порядке:
- Необязательно, один символ "BOM" (U+FEFF).
- Любое количество комментариев и пробелов.
- ДОКУМЕНТАЛЬНЫЙ ТИП.
- Любое количество комментариев и пробелов.
- Корневой элемент в виде html-элемента.
- Любое количество комментариев и пробелов.
- Различные типы контента, упомянутые выше, описаны в следующих нескольких разделах.
Из спецификации HTML 4.01:
7 Глобальная структура HTML-документа
Документ HTML 4 состоит из трех частей:
- строка, содержащая информацию о версии HTML,
- декларативный раздел заголовка (разделенный элементом HEAD),
- основной текст, содержащий фактическое содержание документа.Тело может быть реализовано с помощью элемента BODY или элемента FRAMESET.
[...]
Пробелы (пробелы, переводы строк, табуляции и комментарии) могут появляться перед или после каждого раздела.
[...]
Допустимый HTML-документ указывает, какая версия HTML используется в документе.В объявлении типа документа указывается определение типа документа (DTD), используемое для документа (см. [ISO8879]).
Это не бирка, но да.Главным образом потому, что это единственный способ перевести Internet Explorer (я думаю, предварительную версию 8) в стандартный режим.