В вычислительной сфере режим совместимости — это подход, используемый веб-браузерами для обеспечения обратной совместимости с веб-страницами , разработанными для старых веб-браузеров, вместо строгого соблюдения веб-стандартов в стандартном режиме . С тех пор это поведение было систематизировано, поэтому то, что раньше было стандартным режимом , теперь называется просто режимом без особенностей .
Структура и внешний вид веб-страницы описываются комбинацией двух стандартизированных языков:
Однако большинство старых веб-браузеров либо не полностью реализовали спецификации этих языков, либо были разработаны до окончательной доработки спецификаций ( Microsoft Internet Explorer версии 5.0 для платформы Macintosh , выпущенный в 2000 году, был первым крупным веб-браузером с полной поддержкой например, для CSS уровня 1). [1] В результате многие старые веб-страницы были созданы с учетом неполных или неправильных реализаций старых браузеров и будут отображаться так, как задумано, только при обработке такими браузерами.
Поддержка стандартизированных HTML и CSS в основных веб-браузерах значительно возросла, но большой объем устаревших документов, основанных на особенностях старых браузеров, представляет собой препятствие для разработчиков браузеров, которые хотят улучшить поддержку стандартизированных HTML и CSS, а также хотите сохранить обратную совместимость со старыми, нестандартизированными страницами. Кроме того, многие новые веб-страницы по-прежнему создаются старым способом, поскольку обходные пути совместимости, предложенные разработчиками браузеров, означают, что понимание стандартизированных методов не является строго необходимым.
Чтобы обеспечить совместимость с максимально возможным количеством веб-страниц, современные веб-браузеры обычно разрабатываются с несколькими режимами рендеринга: в «режиме без особенностей» страницы отображаются в соответствии со спецификациями HTML и CSS, а в «режиме с особенностями» предпринимаются попытки эмулировать поведение старых браузеров. Некоторые браузеры (например, основанные на механизме рендеринга Gecko от Mozilla или Internet Explorer 8 в строгом режиме ) также используют «почти стандартный» режим, который пытается найти компромисс между ними, реализуя одну особенность для размера ячеек таблицы, в то же время соответствуя в остальном. спецификациям. [2]
Одним из заметных различий между режимами с причудами и режимами без особенностей является обработка ошибки блочной модели CSS Internet Explorer . До версии 6 Internet Explorer использовал алгоритм определения ширины поля элемента, который противоречил алгоритму, подробно описанному в спецификации CSS, и из-за популярности Internet Explorer было создано множество страниц, основанных на этом нестандартном алгоритме. Начиная с версии 6, Internet Explorer использует алгоритм спецификации CSS при рендеринге в режиме совместимости и использует предыдущий нестандартный алгоритм при рендеринге в режиме совместимости. [ нужна цитата ]
Еще одним заметным отличием является вертикальное выравнивание определенных типов встроенного контента; многие старые браузеры выравнивали изображения по нижней границе содержащего их блока, хотя спецификация CSS требует, чтобы они были выровнены по базовой линии текста внутри блока. В режиме без особенностей браузеры на базе Gecko будут выравниваться по базовой линии, а в режиме с особенностями — по нижнему краю. [3]
Кроме того, многие старые браузеры не реализовали наследование стилей шрифтов внутри таблиц; в результате стили шрифтов пришлось указывать один раз для документа в целом и еще раз для таблицы, хотя спецификация CSS требует, чтобы стиль шрифта был унаследован в таблице. Если размеры шрифта указаны в относительных единицах, совместимый со стандартами браузер унаследует базовый размер шрифта, а затем применит относительный размер шрифта в таблице: например, страница, на которой объявлен базовый размер шрифта 80%, и шрифт таблицы. Размер 80 % (чтобы обеспечить размер 80 % в браузерах, которые не наследуют должным образом размеры шрифтов) в браузере, совместимом со стандартами, будет отображать таблицы с размером шрифта 64 % (80 % от 80 %). В результате браузеры обычно не наследуют размеры шрифтов в таблицах в режиме совместимости. [4]
В этих браузерах реализован третий режим совместимости, известный как «режим с ограниченными возможностями» (ранее «почти стандартный режим» или «строгий режим»), который поддерживает «традиционный» вертикальный размер ячеек таблицы в соответствии со спецификацией CSS2 : Safari , Opera 7.5 (и более поздних версий), все браузеры на базе Gecko , начиная с 1.0.1 (например, Firefox ) и Internet Explorer 8 . [2]
Рендеринг в режиме «Почти стандарт» соответствует режиму «Стандарт» во всех деталях, кроме одной. Расположение изображений внутри ячеек таблицы обрабатывается так же, как работает режим «причуд», который вполне соответствует устаревшим браузерам, таким как Internet Explorer 7 (и более ранним версиям). Это означает, что макеты с нарезанными изображениями в таблицах с меньшей вероятностью развалятся в браузерах в режиме «причуд» или «почти стандарт», а не в режиме «стандарты». [5]
Чаще всего браузеры определяют, какой режим рендеринга использовать, на основе наличия объявления типа документа на странице; если присутствует полный DOCTYPE, браузер будет использовать режим совместимости, а если он отсутствует, браузер будет использовать режим совместимости. Например, веб-страница, начинающаяся со следующего DOCTYPE, активирует режим без особенностей:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Следующий DOCTYPE синтаксически недействителен и содержит ключевое слово общедоступного идентификатора «PUBLIC», но не содержит общедоступного идентификатора (указывающего имя используемой версии HTML) и не содержит URL-адреса системного идентификатора определения типа документа HTML . Это активирует режим причуд:
<!DOCTYPE html ПУБЛИЧНЫЙ>
Кроме того, веб-страница, которая вообще не содержит DOCTYPE, будет отображаться в режиме совместимости.
Заметным исключением из этого правила является браузер Microsoft Internet Explorer 6 , который отображает страницу в режиме совместимости , если DOCTYPE предшествует пролог XML , независимо от того, указан ли полный DOCTYPE. Таким образом, страница XHTML , начинающаяся со следующего кода, будет отображаться в режиме совместимости с помощью IE 6:
<?xml version="1.0"coding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " http://www.w3.org/TR/ xhtml1/DTD/xhtml1-strict.dtd">
Вышеупомянутое полезно в некоторой степени, поскольку его можно использовать для запуска режима совместимости только в IE 6.
Режим Quirks в любой версии IE также будет запущен, если что-либо предшествует DOCTYPE. Например, если гипертекстовый документ содержит комментарий, пробел или любой тег перед объявлением DOCTYPE, IE будет использовать режим совместимости:
<!-- Этот комментарий переведет IE 6, 7, 8 и 9 в режим совместимости --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3 .org/TR/html4/strict.dtd">
Проблема с объявлением XML была исправлена в версии 7 Internet Explorer, в которой пролог XML просто игнорируется. [6] Однако для максимальной совместимости с существующими и старыми веб-браузерами Консорциум World Wide Web , который поддерживает спецификацию XHTML, предлагает авторам документов XHTML рассмотреть возможность исключения объявления XML. [7]
Анри Сивонен составил список различных типов документов и того, как они обрабатываются в наиболее распространенных браузерах, показывая, отображаются ли страницы в режиме «Quirks », «Стандарты » или «Почти стандарт». Критерием, используемым для «Почти стандартного режима», является рендеринг нестандартной высоты ячейки таблицы. Эта таблица применима к контенту, обслуживаемому с типом контента text/html. Содержимое, обслуживаемое с помощью приложения Content-Type application/xhtml+xml, отображается в стандартном режиме в Chrome, Firefox, Internet Explorer 9, Safari и Opera. Internet Explorer 6, 7 и 8 не поддерживают приложение Content-Type/xhtml+xml. [2]
В большинстве браузеров расширение объектной модели документа document.compatMode указывает режим рендеринга текущей страницы. В стандартном и почти стандартном режиме document.compatMode содержит значение «CSS1Compat», а в режиме совместимости оно равно «BackCompat». [8]
Кроме того, в Mozilla Firefox и Opera режим рендеринга, используемый для данной страницы, указывается в информационном окне «Информация о странице».