В чем смысл DOCTYPE?

Я знаю, что разные типы документа по существу определяют, насколько совместим html, но какая разница, какой тип документа вы укажете? По-разному ли браузеры обрабатывают один и тот же код в зависимости от типа документа? Спасибо

ОБНОВЛЕНИЕ - в большинстве ответов упоминается, что режим причуд можно отключить, если не указан тип документа. Но в чем разница между xhtml и html 4.01?


person Evanss    schedule 02.06.2011    source источник


Ответы (8)


Самое главное, есть ли доктайп или нет. Если вы этого не сделаете, браузер будет работать в режиме «причуд», а не в стандартном режиме, и многие вещи будут немного отличаться. Если у вас есть такой, который обычно активирует в браузере поведение, соответствующее стандартам.

См. эту статью для получения подробной информации о том, что doctypes делают в различных браузерах, и какие режимы имеют особенности, стандарты, почти -стандарты и др. разные браузеры. Цитата из соответствующего раздела:

Режимы текстового / HTML-содержания

Выбор режима для содержимого text / html зависит от анализа типа документа (обсуждается далее в этом документе). В IE8 и IE9 режим также зависит от других факторов. Однако по умолчанию даже в IE8 и IE9 режим зависит от типа документа для сайтов, не относящихся к интрасети, которые не включены в черный список, предоставленный Microsoft.

Невозможно подчеркнуть, что точное поведение режимов варьируется от браузера к браузеру, даже если обсуждение в этом документе было единым.

Режим Quirks

В режиме Quirks браузеры нарушают современные спецификации веб-форматов, чтобы не «ломать» страницы, созданные в соответствии с практикой, преобладающей в конце 1990-х годов. В разных браузерах реализованы разные причуды. В Internet Explorer 6, 7, 8 и 9 режим Quirks фактически заморожен в IE 5.5. В других браузерах режим Quirks представляет собой небольшое количество отклонений от режима "Почти стандартные".

Если вы сейчас создаете новые страницы, вы должны соответствовать соответствующим спецификациям (в частности, CSS 2.1) и использовать режим стандартов.

Стандартный режим

В стандартном режиме браузеры стараются предоставить соответствующим документам правильную обработку в соответствии со спецификациями в той степени, в которой это реализовано в конкретном браузере.

Поскольку разные браузеры находятся на разных стадиях соответствия, стандартный режим тоже не является единственной целью.

HTML 5 называет этот режим «режимом без причуд».

Почти стандартный режим

Firefox, Safari, Chrome, Opera (начиная с версии 7.5), IE8 и IE9 также имеют режим, известный как «почти стандартный режим», который реализует вертикальный размер ячеек таблицы традиционно, а не строго в соответствии со спецификацией CSS2. Mac IE 5, Windows IE 6 и 7, Opera до 7.5 и Konqueror не нуждаются в почти стандартном режиме, потому что они в любом случае не реализуют вертикальный размер ячеек таблицы в строгом соответствии со спецификацией CSS2 в своих соответствующих стандартных режимах. Фактически, их стандартные режимы ближе к режиму почти стандартных, чем к стандартному режиму новых браузеров.

HTML 5 называет этот режим «режимом ограниченных причуд».

Режим IE7

IE8 и IE9 имеют режим, который в основном представляет собой замороженную копию режима, который был в IE7 в стандартном режиме. В других браузерах нет такого режима, и этот режим не указан в HTML5.

Стандартный режим IE8

В IE9 есть режим, который в основном представляет собой замороженную копию режима, который был в IE8 в стандартном режиме. В других браузерах нет такого режима, и этот режим не указан в HTML5.

IE8 почти стандартный режим

В IE9 есть режим, который в основном представляет собой замороженную копию режима, который был почти стандартным режимом в IE8. В других браузерах нет такого режима, и этот режим не указан в HTML5.

... но см. статью для полного обсуждения.

person T.J. Crowder    schedule 02.06.2011

Из Википедии:

Объявление типа документа, или DOCTYPE, - это инструкция, которая связывает конкретный документ SGML или XML (например, веб-страницу) с определением типа документа (DTD) (например, формальное определение конкретной версии HTML ). В сериализованной форме документа он проявляется как короткая строка разметки, которая соответствует определенному синтаксису.

Механизмы разметки HTML в современных веб-браузерах выполняют «сниффинг» или «переключение» DOCTYPE, где DOCTYPE в документе, который используется как text / html, определяет режим макета, такой как «режим причуд» или «стандартный режим» . При сериализации текста / HTML в HTML5, который не основан на SGML, DOCTYPE используется только для выбора режима. Поскольку веб-браузеры реализуются со специальными анализаторами HTML, а не с анализаторами на основе DTD общего назначения, они не используют DTD и никогда не будут обращаться к ним, даже если указан URL-адрес. DOCTYPE сохраняется в HTML5 как «в основном бесполезный, но обязательный» заголовок только для запуска «стандартного режима» в распространенных браузерах.

Я решил процитировать этот текст, потому что он лучше меня отвечает на ваш вопрос :). Важно, чтобы отсутствие DOCTYPE запускало «режим причуд» в некоторых браузерах.

person kapa    schedule 02.06.2011

Все дело в стандартах, и да, браузеры по-разному обрабатывают код. Это означает, что все браузеры должны отображать страницу одинаково. Если стандарт не указан, браузер интерпретирует страницу по своему усмотрению.

person Mārtiņš Briedis    schedule 02.06.2011

Объявление не является тегом XHTML; это инструкция для веб-браузера о том, на какой версии языка разметки написана страница.

Объявление относится к определению типа документа (DTD). DTD определяет правила для языка разметки, чтобы браузеры правильно отображали контент.

person Pranay Rana    schedule 02.06.2011

Объявление DOCTYPE должно соответствовать SGML, примером которого является язык HTML.

Объявление DOCTYPE используется некоторыми браузерами для запуска различных режимов визуализации.

person Oswald    schedule 02.06.2011

Режимы браузера

В прошлом браузеры реализовывали CSS по своим собственным правилам.
Только спустя годы браузер адаптировал стандарты W3C.

Чтобы убедиться, что веб-сайты правильно отображаются в различных браузерах, веб-разработчикам приходилось внедрять CSS в соответствии с пожеланиями этих браузеров. Таким образом, большинство веб-сайтов использовали CSS способами, которые не совсем соответствовали спецификациям.

Поэтому, когда соблюдение стандартов стало важным, производители браузеров столкнулись с трудным выбором. Приближение к спецификациям W3C было правильным решением, но если бы они просто изменили реализации CSS, чтобы они полностью соответствовали стандартам, многие веб-сайты сломались бы в большей или меньшей степени. Существующий CSS начал бы показывать странные побочные эффекты, если бы его внезапно интерпретировали правильно.

Так что приближение к соблюдению стандартов вызовет проблемы. С другой стороны, отказ приблизиться к соблюдению стандартов увековечит общую путаницу эпохи браузерных войн.

Для этого весь браузер должен был начать поддерживать оба режима. Режим причуд для старых дизайнов и стандартный режим для нового дизайна.

Перефразировано отсюда: режим Quirks и строгий режим

Типы документов

Для выбора режима требуется триггер, и этот триггер был обнаружен в 'переключении типа документа'. Согласно стандартам, любой документ (X) HTML должен иметь тип документа, который сообщает всему миру, какой вид (X) HTML использует этот документ.

Взято также отсюда: режим Quirks и строгий режим

Дополнительные ресурсы

person Nope    schedule 02.06.2011

Объявление doctype должно быть первым в документе HTML перед тегом.

Это не HTML-тег; это инструкция для веб-браузера о том, на какой версии языка разметки написана страница.

С HTML5 все становится проще: <!DOCTYPE html>

Если у вас нет правильного типа документа, браузер не сможет использовать HTML5.

person DOK    schedule 02.06.2011

Потому что Doctype - это флаг, указывающий, как браузер должен обрабатывать страницу.

Например :

HTML5 нужен этот doctype<!DOCTYPE html>. Если вы удалите его со страницы, любые возможности HTML5 на вашей странице не будут активированы.

Вы можете узнать больше на http://www.w3.org/QA/Tips/Doctype

person Rudy    schedule 02.06.2011
comment
Точно нет. Браузеры не различают версии HTML. Ваш браузер сможет использовать функции HTML5 на вашей странице независимо от того, используете ли вы документ HTML5, тип документа XHTML1 или тип документа HTML4 (просто убедитесь, что ваш тип документа включает режим соответствия стандартам). - person duri; 02.06.2011
comment
извините, Руди, мне пришлось проголосовать против вас, потому что неправильно говорить, что html5 не будет работать без doctype. Браузер просто может не работать в режиме, совместимом со стандартами, если вы его не укажете. - person stephenmurdoch; 02.06.2011
comment
Из документации: Объявление DOCTYPE - ‹! DOCTYPE html› и не учитывает регистр в синтаксисе HTML. DOCTYPE из более ранних версий HTML были длиннее, потому что язык HTML был основан на SGML и, следовательно, требовал ссылки на DTD. С HTML5 это уже не так, и * DOCTYPE нужен только для включения стандартного режима для документов, написанных с использованием синтаксиса HTML *. Браузеры уже делают это для ‹! DOCTYPE html›. - person Xaerxess; 02.06.2011
comment
@ Стефенмёрдок: ты уверен? Со страницы W3C (w3.org/TR/html5/syntax.html) : DOCTYPE необходимы по устаревшим причинам. Если этот параметр не указан, браузеры обычно используют другой режим рендеринга, несовместимый с некоторыми спецификациями. Включение DOCTYPE в документ гарантирует, что браузер сделает все возможное, чтобы следовать соответствующим спецификациям. В последний раз, когда я забыл поставить его, мой код, связанный с HTML5, вообще не работал. - person Rudy; 02.06.2011
comment
Если вы не используете doctype, он запустит режим quirks, что приведет к некорректному рендерингу и невозможности использования функций HTML5 в некоторых браузерах. Однако режим совместимости со стандартами, запускаемый типом документа HTML5, аналогичен режиму соответствия стандартам, запускаемому другими типами документа. Если я использую <!doctype html public "-//W3C//DTD HTML 4.01//EN">, я смогу использовать холст, видео HTML5 и все другие функции HTML5, и это будет работать везде. - person duri; 02.06.2011