Каковы различные типы документов в HTML и что они означают? - PullRequest
35 голосов
/ 01 ноября 2008

Как видно из заголовка, какие существуют различные типы учений и что они означают? Я заметил, что при переходе с

макет в IE7 выглядит немного иначе
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

до

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Есть ли еще какие-нибудь последствия и последствия?

Спасибо!

Ответы [ 6 ]

54 голосов
/ 01 ноября 2008

A Тип документа или Объявление типа документа связывает документ с Определение типа документа .

Определение типа документа является стандартом для документа XML. Существует много DTD для документов XML и XHTML. Сам по себе XML не имеет большой части схемы или очень специфического набора правил, кроме требования, чтобы все было правильно сформировано. Вы можете думать о DTD как о более конкретной схеме для документа .

Режимы рендеринга

Из-за движения стандартов большинство современных браузеров фактически имеют разные режимы рендеринга ( режим стандартов , для рендеринга вашего документа и CSS в соответствии с более новыми веб-стандартами, а также режим причуд , при этом браузер возвращает некоторые идеи рендеринга с первых дней Интернета). Эти режимы установлены для целей обратной совместимости. Огромный ландшафт веб-страниц, созданных в первую эру Интернета, отображается в соответствии с правилами их времени, в то время как более новые документы могут апеллировать к новой волне стандартов. По прошествии времени и создания новых форматов потенциально может быть создано соответствующее DTD.

Несоответствия браузера

В идеальном мире страница, загружаемая браузером, будет читать Doctype сверху и использовать его для поиска определения типа документа. Затем он будет использовать схему этого DTD в качестве основы для чтения остальной части документа. Таким образом, типы документов были бы важны для проверки документов разметки. DTD предоставит стандарт, по которому ваш документ должен быть проверен.

К сожалению, это не идеальный мир. Браузеры не обязательно ведут себя здесь непротиворечиво, и если они это делают, непротиворечивое поведение не совсем соответствует первоначальному видению Doctypes. Хотя синтаксический анализ выполняется независимо от Doctype, основные браузеры, по крайней мере, проверяют Doctype для определения режима рендеринга. Если ваш Doctype отсутствует или является неполным, браузер, скорее всего, будет выполнять рендеринг в режиме quirks . Чтобы правильно написанные современные документы отображались правильно, браузер должен выполнять рендеринг в режиме стандартов . Mozilla, Safari и некоторые последние версии Opera на самом деле реализуют режим Почти Стандарты , который полностью посвящен переходным страницам.

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

Выбор типа документа

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

При написании в XHTML этот Doctype является общим:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Когда пишете в HTML 4.1 , вместо этого обычно используется:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

Некоторые полные типы документов для XHTML и HTML 4 перечислены здесь для полноты:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

Дебаты о строгих и переходных типах учений

Стандарты-евангелисты призвали веб-разработчиков прекратить использование переходного Doctype на новых страницах и вместо этого использовать Strict. Опять же, это тот случай, когда теория и практика сталкиваются с трудностями примирения. Первоначальная надежда переходного Doctype заключалась в том, чтобы предоставить промежуточный дом для перехода устаревших веб-сайтов на соответствие стандартам. С переходными типами документов ограничение на элементы и атрибуты буквально «менее строгое», поэтому разработчики смогут быстрее начать работу в стандартном режиме и постепенно устранить несоответствия.

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

Полезные инструменты

W3C ( World Wide Web Consortium ) - это группа, которая играет активную роль в определении стандартов такого рода. Они поддерживают полезный онлайн-инструмент на http://validator.w3.org/ для проверки и проверки документов на соответствие их стандартам. Существует множество других сторонних инструментов и расширения браузера с аналогичными функциями.

7 голосов
/ 01 ноября 2008

Браузеры не волнует какой тип документа вы используете (ну, почти верно), они используют его только для одной цели: решить, какой режим рендеринга использовать. Смотрите, например документация Fx или Opera для реальных примеров того, какие алгоритмы используются, чтобы решить, какой режим использовать (я полагаю, что некоторая документация для IE также где-то похоронена в MSDN ... [Это может быть правильная страница] (http://msdn.microsoft.com/en-us/library/ms535242(VS.85).aspx), Я не знаю, извините).

Однако в большинстве браузеров есть два основных режима (в некоторых браузерах есть почти стандартный режим ):

  • режим причуд (используется, когда «правильный» тип документа не найден, «правильный» с точки зрения браузера): попытайтесь отобразить документ так, как это сделала бы старая версия IE (одна из Наиболее важные отличия, то есть наиболее сильно влияющие на рендеринг, заключаются в том, что некоторые браузеры используют в этом режиме ошибку IE box mode ),
  • и стандартный режим (используется, когда браузер обнаружил тип документа, который он считает правильным): попробуйте сделать так, как говорят стандарты.

Вы можете использовать (нестандартное) свойство document.compatMode в предыдущих упомянутых браузерах, чтобы проверить, какой режим использовался для визуализации текущего документа.

(Примечание по XHTML: я предполагал, что вы обслуживаете документы в формате HTML (text/html), если вы предоставляете документы в формате XHTML (вероятно, application/xhtml+xml), большинство браузеров напрямую переходят в стандартный режим и не заботятся о doctype вообще AFAIK.)

Кстати: рекомендация (или то, что выглядело как рекомендация) в другом ответе нарушена, переходный DTD не должен использоваться в новых документах. Всегда используйте строгий (термин «строгий» вводит в заблуждение, должен быть «по умолчанию» или что-то еще не страшное), точка:

Авторы должны использовать Strict DTD, когда это возможно, но могут использовать Transitional DTD, когда требуется поддержка атрибута представления и элементов. - HTML 4.01: 22 Определение типа переходного документа .

Мы рекомендуем авторам писать документы, которые соответствуют строгому DTD, а не другим DTD, определенным в данной спецификации. - HTML 4.01: 4 Соответствие: требования и рекомендации

И об этом есть много постов в блоге, например, больше нет переходных DOCTYPE, пожалуйста (с 2006 года, но некоторые , очевидно, все еще имеют проблемы с этим:).

Этот пост начался с указания на то, что браузерам все равно, что вы выбираете, а затем превратился в разглагольствование о том, как правильно выбрать DTD, интересно ... Но если вы собираетесь потратить (/ впустую?) время и энергия, чтобы выбрать DTD, вы также можете выбрать правильный (с точки зрения стандарта HTML 4.01).

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

<!doctype html>

( Этот ответ на «какую-либо причину не начинать использовать тип документа HTML 5?» Был как бы связан с последней частью.)

3 голосов
3 голосов
/ 01 ноября 2008

Вот официальное объяснение различных DTD от W3C:

http://www.w3.org/QA/2002/04/valid-dtd-list.html

Вы также можете найти следующие полезные:

http://www.freedivs.com/tutorials/Choosing%20a%20DOCTYPE/

2 голосов
/ 02 ноября 2008

Существует много дезинформации в отношении типов документов. Путаница проистекает из того факта, что изначально типы документов были предназначены для одной цели (для идентификации DTD, т. Е. Используемой версии HTML), но в реальных браузерах используются для совершенно не связанных целей.

Объявления Doctype используются только для одно в современных браузерах, то есть переключение между причудами режимом рендеринга и стандартами режимом рендеринга для CSS. Так что, по сути, это вещь CSS, а не HTML.

Рендеринг в режиме Quirks обратно совместим со старыми ошибками рендеринга в старых браузерах и в основном полезен для устаревшего контента, который вы не хотите исправлять. Новый контент всегда должен использовать стандартный режим, поскольку он отображается более корректно и согласованно среди браузеров. (При использовании стандартного режима все еще отображаются различия между браузерами, но в режиме причуд гораздо хуже.)

Это не не имеет значения, выбираете ли вы HTML или XHTML docytype, и не будет иметь никакого значения, если вы выберете строгий или переходный тип документа. Режим рендеринга в основном выбирается так:

  • Если документ не имеет типа документа, выбран режим quirks .
  • Если документ имеет нераспознанный тип документа, выбирается режим standard . Это означает, что вы можете написать случайный тип документа, например <!DOCTYPE Chris>, и он будет отлично работать.
  • Официальные типы документов W3C без правильный URL (вторая строка в теге) выбирает режим quirks . Все остальные типы документов выбирает стандартный режим. (Отредактируйте: конечно, это более сложный вариант, и даже в разных браузерах он различается, какой из распознанных типов докторов запускает режим причуд. Se Обзор hsivonens , связанный с другим ответом.)

Исторически типы документов были предназначены для объявления того, какая версия и подмножество HTML использовались. HTML4 определяет несколько версий, где «переходный» допускает ряд элементов и атрибутов, которые (например, FONT) не допускаются в «строгом». Браузер теоретически может обрабатывать «строгие» документы, отличные от «переходных» документов. Однако ни один браузер на самом деле не делает это .

Редактировать: scunliffe указывает, что IE8 будет иметь еще один режим рендеринга, режим "стандартов IE8". Однако AFAIK этот режим запускается не по типу документа, а по метатегу.

0 голосов
/ 02 ноября 2008

По сути, тип документа определяет, насколько сумасшедшим будет IE.

Если вы не установите его в XHTML или «строгий», вы будете жить в мире боли, когда дело доходит до IE (даже если вы установите его, вы все равно будете ненавидеть IE, но это действительно делает это намного лучше).

...