Виды DOCTYPE
Для чего они нужны?
При использовании одних и тех же HTML-тегов в старых кривых браузерах и современных,
придерживающихся стандартов (Mozilla и браузеры на его основе, Mac IE 5, Windows
IE 6, Safari, Opera 7+ и Konqueror 3.2) можно обнаружить два основных режима отображения
web-страницы. В одном случае браузер пытается представить страницу в соответствии
с рекомендациям CSS и (X)HTML. В другом случае отображение страницы происходит
как в старых, далеких от стандартов браузерах. В Mozilla эти два состояния известны
как "the Standards mode" и "the Quirks mode", т.е. как стандартный
режим и неопределенный соответственно.
Кривое и нестандартное поведение старых ущербных браузеров, таких как Netscape
Navigator 4.x и IE 5 для Windows называется "quirks". Иногда страница
бывает написана так, что ее разметка изначально некорректна.
Большинство неприятностей связано с неправильной разметкой и конфликтами в
CSS. Интерпретация таких кривых страниц и стилей приводит к тому, что автор,
написавший ее скорее всего увидит в браузере совсем не то, что собирался изобразить.
Тот же, кто способен грамотно разметить страницу и умело применить таблицу стилей
всегда получит ожидаемый результат.
При Quirks Mode в браузерах нарушаются рекомендации W3C для обеспечения нормального
отображения страниц. Для разных браузеров существуют различные варианты совместимости
с предыдущими версиями. Следовательно, "Quirks mode" не единственная
цель. Например, Mozilla берет свое начало с Netscape 4.x, а Windows IE 6 с Windows
IE 5.
Собственно цель Quirks mode - корректное отображение страниц, написанных для
старых браузеров. При создании новых, современных страниц следует выполнять
требования стандартов и рекомендаций (CSS 2.1 в частности) и придерживаться
Standards mode.
При Standards Mode современные браузеры должны одинаково правильно представлять
соответствующую стандартам страницу.
В браузерах Mozilla, Safari и Opera 7.5 еще существует третий вариант "the
Almost Standards mode" (почти соответствующий стандартам), который не достаточно
строго следует рекомендациям W3C. У Mac IE 5, Windows IE 6, Opera до 7.5 и Konqueror
отсутствует Almost Standards mode, потому что они и так не могут работать в соответствии
с CSS2, поэтому они будут находиться в этом случае в Standards modes. Фактически,
их Standards modes это Almost Standards mode браузера Mozilla, а не полноценный
Standards modes. Важно помнить: браузеры имеют одинаковые основные состояния,
но даже при одинаковых состояния они все равно работают по-разному.
Старые браузеры кое как еще обрабатывают нестандартные теги. В современных
браузерах некорректный HTML приведет и к неправильной работе таблиц стилей и
скриптов.
Формирование логически правильного дерева документа из некорректной разметки
потребует немало изворотливости и не факт, что результат будет таким, как задумывалось,
в отличие от применения чистого и стандартного HTML. Раньше, применением различных
трюков удавалось достичь более-менее схожего отображения страниц в разных браузерах,
поэтому со временем, подавляющее большинство документов text/html в интернете
оказались синтаксически неправильными, потому что они не следовали единому стандарту.
Некоторые люди ошибочно считают Standards mode режимом строгого анализа, при
этом неверно предположение, что браузеры будут вынуждены строго выполнять только
правила синтаксиса HTML, которые они будут использовать для оценки корректности
разметки. Это не верно. Браузеры продолжают пытаться правильно обрабатывать
любой код, даже в случае Standards mode разметки. (В 2000 году, до релиза Netscape
6 анализатор Mozilla действовал только по правилам строго синтаксиса HTML. Но,
как оказалось, стало невозможным корректно представлять созданные ранее документы
и от этого пришлось отказаться.)
Другое заблуждение связано с XHTML анализом. Некоторые люди думают, что документ
XHTML как-то иначе анализируется браузером. Это не так. XHTML документы обслуживаются
как text/html и анализируются так же, как и HTML. В браузерах, XHTML обслуживается
как text/html, но только с учетом особенностей синтаксиса, А вот документы,
которые соответствуют типу контента XML рассматриваются уже иначе, именно как
XML.
Mozilla, Mac IE 5, Windows IE 6, Safari и Opera 7+ используют doctype для того,
чтобы оценить как рассматривать разметку документа text/html. Этот метод основан
на определении объявления типа документа (или его отсутствия) в начале HTML документа.
(Документы, которые используют определение типа контента XML, всегда рассматриваются
в Standards mode.)
Объявление типа документа (doctype) включает название (характерное для распознавания)
корневого элемента и ссылку на DTD (document type definition - определение типа
документа), которое в свою очередь, содержит информацию о синтаксических правилах
для документа. (Теоретически, весь DTD может быть вставлен в объявление типа
документа, но на практике используется лишь ссылка на него.) В спецификации
HTML объявление типа документа содержит информацию о версии HTML. Отсутствие
объявления типа документа и информации о его версии не позволяет правильно обрабатывать
этот документ.
Ни спецификация HTML 4.01, ни ISO 8879 (SGML) не говорят что-либо об использовании
объявления типа документа как о переключателе режимов отображения разметки.
Пренебрежение к doctype основано на его несоблюдении, а также на том, что большинство
устаревших нестандартных документов не включают объявление типа документа, либо
ссылаются на старые DTD.
Типичное объявление типа документа содержит строку (все ее части разделены
пробелами): "<!DOCTYPE", общий идентификатор корневого элемента
("HTML"), строку "PUBLIC", общий идентификатор DTD в кавычках,
может быть системный идентификатор (URL) того же DTD и символ ">".
Объявление типа документа должно размещаться перед начальным тегом корневого
элемента.
браузера есть только два режима - Standards Mode обозначен как "S" в
случае определения высоты строки в ячейке таблицы как в Mozilla's Standards Mode,
и как "A" в случае определения высоты строки в ячейке таблицы как в
Mozilla's Almost Standards Mode.
В шапке таблицы используются следующие соткращения:
NS6
Mozilla 0.6…0.9.4 и Netscape 6.0…6.2.3
Old Moz
Mozilla 0.9.5 вплоть до 1.1 alpha и Mozilla 1.0
Moz и Safari
Mozilla 1.0.1, Mozilla 1.1 beta и выше, Firefox и Netscape 7, Safari v73 aka.
0.9 вплоть до Safari v125.11 aka. 1.2.4
Opera 7.5
Opera 7.5
Opera 7.10
Opera 7.107.23
IE 6 и Opera 7.0
Windows IE 6 and Opera 7.0…7.03
Mac IE 5
Mac IE 5.0…5.2.3
Konq 3.2
Konqueror 3.2.2…3.3 (вероятно также 3.1…3.2.1; не подтверждено)
В приведенной таблице Quirks Mode, Standards Mode и Almost Standards Mode обозначены соответственно Q, S и A. Когда у браузера есть только два режима - Standards Mode обозначен как "S" в случае определения высоты строки в ячейке таблицы как в Mozilla's Standards Mode, и как "A" в случае определения высоты строки в ячейке таблицы как в Mozilla's Almost Standards Mode.
В шапке таблицы используются следующие соткращения:
- NS6
- Mozilla 0.6…0.9.4 и Netscape 6.0…6.2.3
- Old Moz
- Mozilla 0.9.5 вплоть до 1.1 alpha и Mozilla 1.0
- Moz и Safari
- Mozilla 1.0.1, Mozilla 1.1 beta и выше, Firefox и Netscape 7, Safari v73 aka. 0.9 вплоть до Safari v125.11 aka. 1.2.4
- Opera 7.5
- Opera 7.5
- Opera 7.10
- Opera 7.107.23
- IE 6 и Opera 7.0
- Windows IE 6 and Opera 7.0…7.03
- Mac IE 5
- Mac IE 5.0…5.2.3
- Konq 3.2
- Konqueror 3.2.2…3.3 (вероятно также 3.1…3.2.1; не подтверждено)
Doctype |
NS6 |
Old Moz |
Moz и Safari |
Opera 7.5 |
Opera 7.10 |
IE 6 и Opera 7.0 |
Mac IE 5 |
Konq 3.2 |
Не объявлен |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
До HTML 4.0 doctype <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
HTML 4.0 Strict doctype без URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> |
S |
S |
S |
S |
A |
A |
A |
A |
HTML 4.01 Strict doctype без URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> |
S |
S |
S |
S |
A |
A |
Q |
A |
HTML 4.0 Strict doctype с URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
S |
S |
S |
S |
A |
A |
A |
A |
HTML 4.01 Strict doctype с URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
S |
S |
S |
S |
A |
A |
A |
A |
HTML 4.0 Transitional doctype без URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
HTML 4.01 Transitional doctype без URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
HTML 4.01 Transitional doctype с URL http://www.w3.org/TR/html4/loose.dtd <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
S |
S |
A |
A |
A |
A |
A |
Q |
HTML 4.01 Transitional doctype с URL http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
|
Q |
S |
A |
A |
A |
A |
A |
Q |
HTML 4.0 Transitional doctype с URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
Q |
Q |
Q |
A |
A |
A |
A |
Q |
XHTML 1.0 Strict doctype без XML объявления <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
S |
S |
S |
S |
A |
A |
A |
A |
XHTML 1.0 Transitional doctype без XML объявления <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
S |
S |
A |
A |
A |
A |
A |
Q |
XHTML 1.0 Strict doctype вместе с XML объявлением <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
S |
S |
S |
S |
A |
Q |
A |
Q |
XHTML 1.0 Transitional doctype с XML объявлением <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
S |
S |
A |
A |
A |
Q |
A |
Q |
ISO HTML версия 2000 doctype, краткая форма <!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN"> |
Q |
S |
S |
Q |
Q |
Q |
Q |
Q |
ISO HTML версия 2000 doctype, длинная форма <!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN"> |
Q |
S |
S |
S |
A |
A |
A |
Q |
ISO HTML версия 1999 doctype, краткая форма <!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HTML//EN"> |
S |
S |
S |
Q |
Q |
Q |
Q |
Q |
ISO HTML версия 1999 doctype, длинная форма <!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HyperText Markup Language//EN"> |
S |
S |
S |
S |
A |
A |
A |
Q |
XHTML Basic (с объявлением XML) и XHTML 1.1 (с объявлением XML) отсутствуют в таблице, т.к. такое поведение doctype влияет только на отображение страниц документов представленных как text/html но, в случае text/html, не может быть использовано XHTML Basic и XHTML 1.1. Однако, если эти документы обрабатываются как text/html, то поведение браузера в зависимости от doctype будет подобно XHTML 1.0 Strict. То есть, Windows IE 6 применяет этот quirks mode даже при наличии XML объявления.
HTML 4.01
1.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">-
Строгий синтаксис HTML. Строгий (Strict): не содержит элементов, помеченных как
«устаревшие» или «не одобряемые» (deprecated).
2.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">- Переходный синтаксис
HTML. Переходный (Transitional): содержит устаревшие теги в целях совместимости
и упрощения перехода со старых версий HTML.
3.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">- В HTML-документе
применяются фреймы. С фреймами (Frameset): аналогичен переходному, но содержит
также теги для создания наборов фреймов.
XHTML 1.0
4.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">-
Строгий синтаксис XHTML.
5.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">- Переходный
синтаксис XHTML.
6.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">- Документ
написан на XHTML и содержит фреймы.
XHTML 1.0 Mobile
7.
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">- основанный
на XHTML Basic, добавляет специфические элементы для мобильных телефонов.
XHTML 1.1
8.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">-
Разработчики XHTML 1.1 предполагают, что он постепенно вытеснит HTML.
Пространство имён тегов xhtml должно быть обозначено в корневом теге как
"http://www.w3.org/1999/xhtml"
Самыми распространёнными ошибками в XHTML-разметке являются:
--- Незакрытые элементы (XHTML, в отличие от HTML, требует закрытия всех элементов,
в том числе не имеющих закрывающего тега, как, например,
<br />).
--- Отсутствие альтернативных текстов для изображений (достигающийся применением
атрибута alt, который помогает сделать документы доступнее для устройств, которые
не в состоянии отображать изображения, или предназначенных для слабовидящих людей).
--- Присутствие текста непосредственно в теге
<body> документа (должен
быть объявлен блочный элемент, внутрь которого следует помещать содержимое).
--- Вложение блочных элементов внутрь инлайновых (внутристрочных) (например, блочные
элементы
<div>
--- Не могут быть вложены внутрь инлайновых элементов <a>, <span>,
<em> и так далее).
--- Пренебрежение заключением значений атрибутов в кавычки (<a href=http://example.com/>
вместо <a href="http://example.com/">).
--- Неправильное вложение элементов (конструкции вида <em>
</em>).
--- Неправильное использование ссылок-мнемоник (например, & вместо &)
--- Написание тегов и/или атрибутов прописными буквами (<DIV STYLE="…">
вместо <div style="...">).
--- Задание в теге <!DOCTYPE …> относительного пути к DTD-файлу,
скопированного с сайта www.w3.org ("DTD/xhtml11.dtd" вместо "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd").
Thanks to Remiz Rahnas for writing the original script that this is based off of.