Стандартный режим, режим обратной совместимости и DOCTYPE
13.03.08 веб-стандарты
Реализация CSS в старых браузерах связана с рядом недостатков, таких как, частичная поддержка спецификации, в некоторых случаях реализации определенных особенностей CSS, не соответствующих спецификации.
Современные браузеры великолепно поддерживают последнюю спецификацию CSS, включая дополнительные особенности, не входящие в ее состав, но которые вполне возможно появятся в будущем.
Из-за недостатков поддержки CSS старыми браузерами, ранние таблицы стилей создавались с учетом этих особенностей, в то время, как современные браузеры соответствуют спецификации CSS. Перед создателями новых версий браузеров возникла дилемма — в стремлении поддерживать стандарты CSS, миллионы созданных ранее страниц становились непригодными и несоответствующими спецификации.
Решение данной проблемы заключалось в том, чтобы определить, как создан документ и выбрать режим его отображения на основе типа декларации SGML или doctype declaration непосредственно в самой разметке. Декларация типа документа содержит название корневого элемента, обычно ссылается на определение типа документа (DTD) и включает в себя семантические правила языка разметки. До определенного времени браузеры игнорировали декларацию типа документа и главном образом она была необходима для прохождения валидации.
Процесс, при котором браузер выбирает режим отображения документа называется doctype sniffing (или переключение типа документа), был впервые реализован в Microsoft Internet Explorer 5 для Mac OS. Сегодня переключение типа документа используется в Opera (версии 7 и выше), Firefox, в браузерах на движке Gecko, Safari, Internet Explorer 6 и 7, а также Konqueror (версии 3.2 и выше).
Если браузер определяет документ как «современный», он отображает его в стандартном режиме (standards mode). Это значит, что таблицы стилей, использующиеся в документе соответствуют спецификации CSS2.
Если браузер определяет, что документ написан по правилам т.н. старой школы, он отобразит его в режиме совместимости (quirks mode). В режиме совместимости браузер игнорирует часть правил CSS, имитируя поведение старого движка. Режим совместимости работает по разному и зависит от браузера.
Opera (версии 7 и выше), Firefox и Safari имеют третий режим, который называется режим, приближенный к стандартному (almost standards mode), в котором расположение рисунков в ячейках таблицы отображается в режиме совместимости. Во всех остальных случаях этот режим эквивалентен стандартному режиму. В этом режиме используется метод выравнивания разрезанных изображений в таблице. Этот метод соответствует стандартному режиму в Internet Explorer 6 и 7, Internet Explorer 5 для Mac OS and OS X, Konqueror и Opera versions до версии 7.5. В соответствии со спецификацией CSS2 эти браузеры не поддерживают вертикальное выравнивание в ячейке таблицы, поэтому стандартный режим в этих браузерах является отчасти стандартным.
Переключение типа документа предназначено только для документов, с указанием MIME-типа text/html. Указание MIME-типа XML, включая application/xhtml+xml автоматически вызывает стандартный режим.
Переключение типа документа
Посмотрим как работает переключение типа документа и какие декларации вызывают стандартный режим, режим совместимости и частично стандартный режим. Определение типа документа для HTML и XHTML содержит строку PUBLIC
, за которой следует формальный идентификатор formal public identifier (FPI). За ним может следовать системный идентификатор formal system identifier (FSI), который является указателем ресура URL для DTD.
Пример, содержащий FPI и FSI:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Пример, содержащий только FPI:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Тип документа переключается путем определения этих частей в декларации типа документа. Если указан формальный идентификатор и не указан системный, браузер переключается в режим совместимости и отображает страницу, имитируя поведение старого движка. Режим совместимости включается также при отсутствии декларации типа документа.
Если указаны и формальный и системный идентификаторы, браузеры, поддерживающие два режима, отображают страницу в стандартном режиме. Браузеры с тремя режимами проверяют DTD. Для DTD HTML 4.0 Strict, HTML 4.01 Strict и XHTML 1.0 Strict включается стандартный режим. Transitional DTD включает частично стандартный режим для MIME-типа text/html.
В Internet Explorer 6 используется примитивный метод переключения типа документа, предполагающий, что декларация типа должна находится в самой первой строке документа. Комментарий SGML перед декларацией типа документа, также как и декларация XML, включит режим совместимости, даже для XHTML 1.0 Strict. Следующая запись выключает режим совместимости в IE6 (но не в IE7) для MIME-типа text/html:
<?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">
Подробнее о переключении типов в различных браузеров см. http://hsivonen.iki.fi/doctype/.