doctype

Режим отображения и декларация DOCTYPE

Все вы видели в 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. Там видим список рекомендованных деклараций:

doctype

Для языка 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 вообще не надо указывать декларацию, т.к. там она ‘пустышка’, бессмыслица.




Добавить комментарий

Ваш e-mail не будет опубликован.