DOCTYPE и режимы работы браузера


DOCTYPE и режимы работы браузераВ ранних версиях популярных браузеров реализована лишь частичная поддержка СSS спецификации, а иногда некоторые особенности СSS правил трактуются такими браузерами совершенно неожиданным образом. Это вызывает ряд проблем в сфере веб-разработки.

Что же касается современных браузеров, то в них предусмотрена полная поддержка последней спецификации CSS. Более того, они позволяют корректно отображать документы, использующие дополнительные особенности спецификации, которые еще не утверждены, но должны войти в ее состав в ближайшем будущем. В связи с тем, что ранние версии браузеров не поддерживали стандарты CSS, веб-разработчики создавали таблицы стилей в соответствии с особенностями работы Интернет обозревателей того времени. В создавшейся ситуации перед разработчиками браузеров возникла проблема отображения миллионов веб-страниц, которые создавались ранее, без учета стандартов.

Наиболее подходящим решением данной проблемы является определение способа создания документа (стандартный или нестандартный) и выбора соответствующего режима его отображения. При этом браузер руководствуется декларацией типа документа, указываемой в HTML разметке страницы. Для указания типа используется либо SGML декларация, либо doctype declaration.

Декларация типа документа состоит из имени корневого элемента страницы и содержит ссылку на документ, который определяет тип документа (DTD — Document Type Definition), содержащий соответствующие семантические правила разметки. Старые браузеры не реагируют на подобную декларацию должным образом. В этом случае она необходима лишь для процедуры валидации документа.

Процесс определения типа документа браузером называется doctype sniffing, что дословно можно перевести как «переключение типа документа». Такая функция впервые была реализована в IE пятой версии, разработанного для Mac OS. Впоследствии все остальные браузеры были наделены такой возможностью.

В том случае, если браузер определит тип документа как соответствующий стандартам, то он будет отображаться в стандартном режиме (standards mode), то есть каскадные таблицы стилей для такого документа оформлены в соответствии со спецификацией CSS2. Если же браузер обнаружит, что документ составлен по устаревшим правилам, без соблюдения стандартов, то страница будет отображаться в режиме обратной совместимости (или quirks mode). Для этого браузер просто имитирует поведение старого движка, игнорируя некоторые CSS правила. Стоить также отметить, что нет никаких гарантий того, что в режиме совместимости документ будет одинаково отображаться в различных браузерах.

В некоторых браузерах (Firefox, Safari, а также Opera 7 и выше) предусмотрен третий, промежуточный режим отображения документа (almost standards mode ), который позволяет отображать расположенные внутри ячеек таблицы изображения способом, свойственным режиму совместимости. В quirks mode применяется особый метод стыковки разрезанных изображений, с использованием табличной структуры. Что касается остальных случаев, то браузеры в промежуточном, приближенном к standards mode режиме следуют стандартам.

Также необходимо иметь ввиду, что переключение в различные режимы отображения документа браузер допускает только в том случае, если в его определении указан MIME тип text/html. Если же для определения MIME документа установлено значение xml или application/xhtml+xml, то страница отображается исключительно в стандартном режиме.

Структура doctype declaration включает в себя ключевое слово PUBLIC, после которого находятся две строки: формальный идентификатор (FPI – Formal Public Identifier) и системный идентификатор (FSI – Formal System Identifier). Допускается использование только одного FPI. Системный идентификатор используется в качестве URL адреса ресурса, определяющего синтаксис указанного типа документа (DTD).

Пример декларации документа с применением только формального идентификатора:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

И вариант декларации с использованием двух идентификаторов:

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

Именно такой декларацией руководствуется браузер в ходе выбора режима, который будет использоваться для отображения страницы. Причем, здесь необходимо отметить несколько нюансов:

- Если указан только формальный идентификатор (FPI), то браузер работает в режиме совместимости.

- В том случае, если декларация совсем отсутствует в коде документа, то страница также отображается в режиме совместимости.

- Если декларация документа содержит оба идентификатора (FPI и FSI), то документ обрабатывается в стандартном режиме. В том случае, если браузер поддерживает три режима поведения, то проверяется значение DTD: если определен HTML 4.0 Strict, HTML 4.01 Strict или XHTML 1.0 Strict, то браузер работает в стандартном режиме; если указан тип Transitional, то включается приближенный к стандартному режим отображения документа.

Отдельно следует отметить поведение Internet Explorer 6. Этот браузер допускает расположение декларации документа только в первой строке исходного кода документа. Любая другая декларация, включая XML, или комментарий приведет к тому, что документ будет отображаться в режиме совместимости, даже если ниже будет указан тип документа XHTML 1.0 Strict.

Источник: webknowledge.ru


Только материалы из рубрики ТИЦ свободны для копирования без каких-либо условий. Ссылка на остальные материалы обязательна.