Doctype

Дата публикации: 12.03.2011

Начнем сверху:

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

Это называется doctype. Это была длинная и запутанная история. Во время разработки IE5 для Mac’ов, Microsorft столкнулся с интересной проблемой. Новая версия браузера так хорошо начала поддерживать стандарты, что старые страницы перестали правильно отображаться. Точнее говоря, они-то отображались правильно (согласно спецификациям), но народ ожидал обратного: что будут, как обычно, отображаться неправильно. Ведь в то время веб страницы создавались исходя из поддержки доминирующих браузеров: Netscape 4 и Internet Explorer 4. IE5/Mac, который казался таким продвинутым, на самом деле «ломал» Веб.

Microsort нашли оригинальное решение. Перед рендерингом страницы, IE5/Mac смотрел на doctype, который, как правило, шел первой строкой, еще до HTML кода (находился до тега <html>). Старые страницы не имели doctype и IE5/Mac отображал их так же, как старые браузеры. Авторы страниц, чтобы активировать поддержку новых стандартов, должны были добавить doctype перед элементом <html>.

Эта идея распространилась, как лесной пожар, и вскоре все основные игроки на рынке браузеров имели два режима работы: «quirks mode» (режим обратной совместимости) и «standards mode» (режим поддержки стандартов). Когда Mozilla попытались запустить свой флагман — браузер версии 1.1 они обнаружили, что когда рендерится страница в стандартном режиме, на самом деле она отображалась с учетом некоторых особенностей режима обратной совместимости. Mozilla попытались устранить это баг, но тем самым в один момент «поломали» тысячи страниц. Так и появился — почти стандартный режим (almost standards mode).

В своей работе «Активация режима работы браузера с Doctype» Генри Сайвонен (Henri Sivonen) кратко описал различие режимов:

Quirks Mode

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

Standards Mode

В этом режиме браузеры пытаются отобразить страницы согласно спецификациям, а ошибки исправлять на свое усмотрение. HTML5 называет этот режим «no quirks mode».

Almost Standards Mode

Firefox, Safari, Opera и IE8 так же имеют «почти стандартный режим», который реализует вертикальный размер ячеек таблицы традиционно, а не строго в соответствии со спецификацией CSS2. HTML5 этот режим называет «ограниченный режим совместимости» (limited quirks mode).

Мы лишь вскользь затронули эту тему. Если тебе интересно углубится в дебри doctype, то ты должен ознакомиться с трудами Генри.

Итак. На чем мы остановились? Ах да, Doctype.

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

Так выглядит один из 15-ти doctype стандартного режима. С ним все в порядке и его можно продолжать использовать. Или его можно заменить на HTML5 doctype, который настолько короче, что его даже можно запомнить. Вот он:

<!DOCTYPE html>

Вот так просто. Всего 15 символов.

Doctype в твоем HTML документе должен идти первым. Если в документе будет еще что-то до него (даже если это будет просто пробел), тогда браузеры отобразят страницы в режиме обратной совместимости, так же, как если бы doctype вообще не было в коде. Об этом следует помнить, чтобы не тратить часы в поисках «загадочной» ошибки.

Куда дальше

Показать комментарии