Все вы видели в html документах конструкцию вида ‘!DOCTYPE HTML’.
В браузерах есть две модели поведения (отображения html кода): старая и современная по стандартам HTML5. В какой-то момент, когда накопилось изрядное количество документов, сформированных по старым правилам (или вообще без них, т.е. ориентировались только на язык html), но в то же время развивается и стандарт HTML.
И как-то надо было отделить новые документы, которые учитывали все появившиеся стандарты, и старые. И после появления языка разметки XML компания Microsoft предложила взять оттуда специальный элемент — декларация doctype — и применить его в языке HTML, но совершенно в других целях. Если декларация doctype поставлена в документе, то браузер переходит в режим соответствия стандартам (standards mode). Если этой декларации нет или она написана неправильно, то браузер переходит в старый режим quirks mode.
Т.е. документ, в котором отсутствует декларация doctype, загружается в браузер, тот его отображает так, как-будто этот браузер старинный и документ старинный. Как только декларация появилась, работа с документом происходит по всем новым стандартам.
Понятие ‘старины’ очень разное. Какая старина может быть у браузера ‘Хром’? Он появился только недавно. А браузер Internet Explorer отображает ‘старину’ как в версии 5.0 (она считается базовой). Но если, например, у вас указана высота любого элемента в процентах %, то тогда эти два режима сильно отличаются по расчету этой высоты.
По сути, декларация представляет из себя тег ‘!doctype’ + корневой элемент html. Исходя из различий отображения, рекомендую всегда ставить декларацию doctype в html документе.
Однако, если походить по сайтам, там в исходном коде страницы мы увидим длинные декларации типа:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Вообще ужас, непонятно, что это. ‘Расшифровку’ ищем на сайте консорциума: w3.org. Там видим список рекомендованных деклараций:
Для языка HTML — 3 вида декларации, далее для XHTML — еще больше. Изначально для языка HTML предполагалось, что декларация doctype состояла из нескольких частей:
- Название.
- Указание корневого элемента — HTML.
- Публичный или системный — PUBLIC.
- Идентификатор ‘http://www.w3.org/TR/html4/strict.dtd’ — это ссылка на файл для роботов-браузеров. Здесь написано, что из себя представляют элементы html, какие у них могут стоять внутри элементы, какие атрибуты. Но тогда возникает вопрос — что такого нового браузер должен прочитать в этом документе, что он не знает? Ничего! И в реальности ни один браузер за этим файлом никогда не полезет. Он ему просто не нужен. Т.е. идентификаторы можно удалить.
- Идентификатор ‘-//W3C//DTD HTML 4.01//EN’ — это указание на то, какую версию декларации мы используем. Т.е. см. на картинку выше. Мы видим 3 указания: strict.dtd, loose.dtd, frameset.dtd. Если мы не применяем ничего из ‘деприкейтед’ (элементы, которые в следующей версии html будут удалены), то ставит strict.dtd. Если появились элементы с ‘деприкейтед’ — loose.dtd. Если используем фреймы — frameset.dtd.
Все эти навороты нам ни к чему. Во всех новых документах пишем просто: ‘!DOCTYPE HTML‘. ВСЕ! И эта надпись соотвеnствует HTML5.
И не надо городить длинные строки, все равно этот код игнорируется. А в XHTML вообще не надо указывать декларацию, т.к. там она ‘пустышка’, бессмыслица.