Должно ли объявление DOCTYPE быть первым тегом в HTML-документе?[дубликат]

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

  •  09-06-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

Наш менеджер безопасности динамически вставляет фрагмент 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 ДОКУМЕНТАЛЬНЫЙ ТИП это обязательная преамбула", которую я интерпретирую как означающую, что она обязательна и что она должна быть на первом месте.

В нем также говорится, что он должен состоять из следующих компонентов в таком порядке:

  1. Строка, которая соответствует строке в формате ASCII без учета регистра <!DOCTYPE.
  2. Один или несколько пробелов.
  3. Строка, которая соответствует строке в формате ASCII без учета регистра html.
  4. Необязательно, устаревшая строка DOCTYPE или устаревшая разрешенная строка DOCTYPE (определяется ниже).
  5. Ноль или более пробелов.
  6. A > (U+003E) символ.

Да, doctype должен быть первым в документе (за исключением комментариев).Вам следует избегать вставки скриптов перед doctype;совместимые анализаторы не обязаны принимать это.(Они должны принимать добавленные скрипты после остальную часть документа, если это альтернатива.)

Из спецификации HTML 5:

8.1 Написание HTML-документов

Этот раздел применим только к документам, средствам разработки и генераторам разметки.В частности, это не относится к средствам проверки соответствия;> средства проверки соответствия должны использовать требования, приведенные в следующем разделе > ("синтаксический анализ HTML-документов").

Документы должны состоять из следующих частей в указанном порядке:

  1. Необязательно, один символ "BOM" (U+FEFF).
  2. Любое количество комментариев и пробелов.
  3. ДОКУМЕНТАЛЬНЫЙ ТИП.
  4. Любое количество комментариев и пробелов.
  5. Корневой элемент в виде html-элемента.
  6. Любое количество комментариев и пробелов.
  7. Различные типы контента, упомянутые выше, описаны в следующих нескольких разделах.

Из спецификации HTML 4.01:

7 Глобальная структура HTML-документа

Документ HTML 4 состоит из трех частей:

  1. строка, содержащая информацию о версии HTML,
  2. декларативный раздел заголовка (разделенный элементом HEAD),
  3. основной текст, содержащий фактическое содержание документа.Тело может быть реализовано с помощью элемента BODY или элемента FRAMESET.

[...]

Пробелы (пробелы, переводы строк, табуляции и комментарии) могут появляться перед или после каждого раздела.

[...]

Допустимый HTML-документ указывает, какая версия HTML используется в документе.В объявлении типа документа указывается определение типа документа (DTD), используемое для документа (см. [ISO8879]).

Это не бирка, но да.Главным образом потому, что это единственный способ перевести Internet Explorer (я думаю, предварительную версию 8) в стандартный режим.

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