Режимы ИЕ 8 бета 2: доктайп, метатег и чудо-кнопка

Попытки разработчиков IE 8 найти оптимальное решение в сущности нерешаемой проблемы — осуществить поддержку веб-стандартов и обратной совместимости с бесконечно большим количеством существующих сайтов — внести весьма много хаоса в среду веб-разработчиков.

Кроме известных трех режимов (Quirks, Standards и Almost), добавилось масса вариантов синтаксиса «чудодейстивенного» метатега (либо альтернативного HTTP-заголовка), каждому из которых теоретически может соответствовать свой режим, и все это еще ложится на плечи Doctype switching. Как же узнать в итоге, какой режим включится для рендеринга определенной страницы?

Загадочная кнопка «Compatibility view»

С выходом IE 8 beta 2 произошел весьма странный факт: кнопка включения/выключения режима совместимости периодически может исчезать. Исчезновения происходили в следующих случаях:

  • когда выбора нет (страница отображается в Quirks mode, по сути одинаковом для всех версий IE начиная с 5.5, либо режим отображения жестко задан через метатег);
  • для сайтов локальной зоны при настройке по умолчанию. По умолчанию для них Compatibility view включен (выключается и включается через Tools — Compatibility View Settigs) — сделано это, видимо, ради поддержки старых корпоративных интранетов. При тестировании сата в ИЕ 8 локально на Денвере не забудьте проверить эти настройки. Это очень важно!

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

Старый доктайп

Для этих тестов использовалась специальная страница Генри Сивонена (Henri Sivonen), который написал полезную Activating Browser Modes with Doctype о переключении доктайпов. Из таблицы указанной статьи поведение ИЕ 8 бета 2 похож на поведение Оперы 8.

Неожаиданной новостью стало отображение страницы с доктайпом HTML 4.0 Transitional (со ссылкой на DTD) в полностью стандартном режиме (Opera 7.5−8 использовала для таких страниц «полустандартный» режим, а FF, Opera 9 и Chrome — и вовсе Quirks).

В остальных случаях ИЕ 8 вел себя полностью аналогично современным браузерам. То есть для доктайпов HTML 4.01 Transitional (с DTD) и XHTML 1.0 Transitional в новой бете реализован — впервые за всю историю ИЕ — «полустандартный» режим отображения. Хорошая новость для бесчисленного множества более-менее аккуратных табличных сайтов пятилетней давности — есть надежда, что «веб-апокалипсис» откладывается :).

Рекомендуем прочесть  Невыполнение сроков или отсутствие мотивации

В целом поведение ИЕ 8 бета 2 вполне логично и соответствует описанию в черновике HTML5: всегда использовать стандартный режим, если только доктайп не является одним из ограниченного списка «квирковых» (куда входит и отстутствие доктайпа) или еще более ограниченного (всего 4 шт.) списка «полустандартных». Но о полном соблюдении HTML5 говорить рано — упомянутый HTML 4.0 Transitional там входит в «квирковый» список

Вместе с новым движком, ИЕ 8 принес новое свойство document.documentMode, специально для проверки режима совместимости. Тест учитывает его, показывая значение 5 в Quirks mode, 8 в остальных случаях. Видимо, в «полустандартном» режиме используется все-таки новейший движок рендеринга, а не тот что в ИЕ 7.

Для полноты картины я прогнал тот же тест с включенной кнопкой совместимости. Сюрпризов не было — поведение строго соответствует IE 7, значение documentMode в «стандартном режиме» равно 7.

Метатег X-UA-Compatible: может очень многое

Девид Дорвард провел исследование одновременного влияния и доктайпа, и метатега, на режим рендеринга. О результатах написано в статье Internet Explorer 8 Doctype and HTTP Header Switching. При тестировании сравнивались 3 доктайпа и 3 варианта метатега. Оказалось, что метатег полностью перебивает Doctype switching. Если на странице указан метатег «IE=7», то даже с объявленным доктайпом Quirks, сайт будет отображаться в стандартном режиме ИЕ 7.

Для продолжения эксперимента за основу взята та же схема, с небольшим расширением: взят набор из 4-х доктайпов — квирковый (вообще без оного), стандартный (4.01 Strict) и два переходных (HTML 4.01 и XHTML 1.0 с XML-прологом — в память о знаменитом баге IE6:) — и 4-х же метатегов: без такового, «IE=6», «IE=7» и «IE=8».

Простенький скрипт сгенерил для каждой комбинации страничку наподобие такой. Верхняя пара дивов тестирует боксовую модель, отступ под картинкой в ячейке таблицы помогает отличить новейший стандартный режим от «полустандартного» и всех предшественников, комбинация из плавающих дивов внизу и текст, добавляемый через : after, помогают различить режимы IE8 и IE7, ну, а JS-свойства document.compatMode и document.documentMode говорят за себя сами.

Вот что получилось:
Результаты. По ссылке — полноразмерные.

Комбинации с Quirks mode сразу бросаются в глаза белым фоном (различный фон для HTML и BODY там не действует). То, что такова вся вторая колонка, говорит о том, что метатег «IE=6» просто не работает (в принципе, своего рода хак для сброса IE в Quirks mode, но сегодня такое никому не нужно). Поведение же варианта «IE=7» подтверждает то, что страничка рендерится в стандартном режиме ИЕ 7, независимо от объявленного доктайпа (и даже его наличия).

Рекомендуем прочесть  Как отследить поведение пользователя за компьютером в ваше отсутствие

В последней колонке, можно заметить сюрприз — первые две картинки отрисовались одинаково (в полностью стандартном режиме), а последние две чуть по-другому — в полустандартном (без отступов под картинками)!

Результат неожиданный, но объяснимый. Возможно, что ИЕ 8 умеет переключаться между тремя движками — новейшим (по умолчанию), ИЕ 5.5 (для Quirks mode), и ИЕ 7 (при явном включении режима совместимости — кнопкой или метатегом).

Метатег же «IE=8» запрещает ему использовать какой-либо движок, кроме новейшего. А поскольку в сам новейший движок заложено «особое отношение» к Transitional-доктайпам, он использует специальный вариант для них и дефолтный («самый-самый стандартный»:) — во всех остальных случаях, включая страницы без доктайпа.

Во второй бете разработчики предложили еще один вариант метатега — «IE=EmulateIE7». Отличие его от «IE=7» в том, что он реагирует на доктайп, как настоящий IE7 — Quirks-страницы с ним рисуются в Quirks mode, остальные — в режиме IE7. Трудно представить, где эта разница может сказаться на практике — разве что в каком-нибудь супер-пупер-динамическом шаблоне, который в зависимости от кучи условий может выдаваться то с доктайпом, то без него… Так или иначе, для особо ленивых верстальщиков новый вариант метатега — в лучшем случае панацея, в худшем плацебо (к слову, именно так решили проблему с IE8 создатели Google Maps ;). А вот попытка написать по аналогии «EmulateIE6» провалилась — такой метатег игнорируется начисто, будто его вообще нет.

Резюме

СТоит ли вообще использовать чудесный метатег? Старые сайты с непонятно чем в доктайпе, нормально смотревшиеся в ИЕ 6, не развалятся и вИЕ 8 — Quirks mode практически не изменился.

Разница между отображением Transitional-страниц новейшим движком (нижние ячейки первой и последней колонок) и режимом IE7 (третья колонка), конечно, есть: изменились дефолтные margin’ы многих элементов, немного иначе ведут себя float’ы, и, конечно же, добавилась поддержка многих новых CSS-свойств и псевдоэлементов.

Однако для старинной табличной верстки, где все элементы жестко фиксированы, эти различия могут и не проявиться — таким страницам тоже особо ничего не угрожает. А интранет-пользователи могут еще долго не замечать каких-либо изменений в своем привычном окружении (благодаря эмуляции IE7 для локальной зоны по умолчанию).

Рекомендуем прочесть  Вы cможете решить этот пример?

Получается, что наибольший риск — для сайтов «дивной» верстки в манере техлетней давности (масса float’ов и дополнительные стили для всех версий ИЕ). Именно для них актуален костыль в виде метатега (хотя лучше найти повод для редизайна и сверстать как следует:). Ну, а для тех, кто ничего не знает и знать не хочет о Doctype switching-е, но умеет «методом тыка» добиваться от страничек нормального вида в IE7 (если такие вообще бывают:) оптимальный вариант — «IE=EmulateIE7» (если не поможет, то уж точно не повредит;).

Окончательные результаты приведены в таблице:

Доктайп →
Метатег ↓
Отсутствует или старый кривойHTML 4.01/XHTML 1.0 Transitional/FramesetHTML 4.01 Strict, XHTML 1.0 Strict и выше, HTML5 и т. д.
Отсутствует или некорректный (IE=4 и ниже, EmulateIE6…)QuirksAlmost Standards (IE8)Standards (IE8)
IE=5, IE=6QuirksQuirksQuirks
IE=7Standards (IE7)Standards (IE7)Standards (IE7)
IE=EmulateIE7QuirksStandards (IE7)Standards (IE7)
IE=IE8 и выше, IE=EdgeStandards (IE8)Almost Standards (IE8)Standards (IE8)
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Перейти к верхней панели