Режимы совместимости IE

Я не очень понимаю, как работают эти режимы, например, если я добавлю

<!DOCTYPE> сделать это html5 документ, а затем добавить

<meta http-equiv="X-UA-Compatible" content="IE=9" />

IE будет рендерить в IE 9, не так ли?

Но мой вопрос в том, что если у пользователя нет IE 9 но есть IE 6 или же 7 и моя страница будет иметь некоторые функции, которые работают только с IE 9 это все еще как-то работает или нет?

2 ответа

Решение

Во-первых, как вы написали <!DOCTYPE> сам по себе в вопросе не действует; вам нужно указать, какой тип документа использовать. Если вы хотите использовать HTML5, строка doctype должна выглядеть так:

<!DOCTYPE html>

Когда у вас есть рабочий тип документа, IE отобразит страницу в стандартном режиме. Без doctype IE будет использовать режим Quirks. Режим Quirks - это в основном режим совместимости с IE5, с множеством нестандартных вещей, которые ломаются в любом другом браузере. Поэтому вы всегда должны использовать тип документа.

во-вторых X-UA-Compatible: Это говорит IE, чтобы использовать определенный режим рендеринга, если это возможно.

Очевидно, что более старые версии IE не могут использовать режим рендеринга более новых версий IE, поэтому этот тег на самом деле также используется только в целях обратной совместимости. Так что прямой ответ на ваш вопрос - "Нет": IE6 никогда не сможет отображать в режиме IE9, равно как и IE7 или IE8.

IE8 может использовать режим совместимости IE7, а IE9 имеет режимы совместимости IE8 и IE7. Этот тег заставит IE использовать эти режимы вместо стандартного.

Это полезно в качестве решения для быстрого исправления, если ваш сайт был написан для старой версии IE и не работает должным образом в новых версиях. Это хорошо, если вы находитесь во внутренней сети, где все вынуждены использовать IE, но в более широком Интернете вам также необходимо поддерживать другие браузеры, и если сайт работает в IE8, но не работает в IE9, то есть хороший шанс сломаю в других браузерах тоже. Поэтому я бы предложил X-UA-Compatible не так уж и полезно в реальном мире.

Тем не менее, есть один случай, когда его полезно включить: в IE есть параметры конфигурации, которые можно настроить для автоматического запуска режима обратной совместимости. Таким образом, пользователь IE8 может находиться в режиме IE7, даже не подозревая об этом.

Это, очевидно, проблема, но указание X-UA-Compatible более высокое значение заставит IE перейти на более новый режим рендеринга. Это хорошая вещь.

В этом случае, однако, вы не должны указывать версию IE для использования - потому что если вы укажете IE=9, что происходит с пользователями IE10? Вместо этого вы должны использовать значение специального случая edge, Это заставляет IE использовать последний доступный режим рендеринга, независимо от каких-либо других настроек. В большинстве случаев это то, что вы хотите сделать. Код будет выглядеть так:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

Надеюсь, это поможет.

Да, и, кстати, X-UA-Compatible также может быть указан в заголовках HTTP, а не внутри кода HTML.

Нет, это не сработает, это совершенно невозможно. Как IE 6 получит механизм рендеринга IE 9 без обновлений?

Действительно, IE 7 и более ранние версии даже не поддерживаютX-UA-Compatible:

Начиная с Windows Internet Explorer 8, httpEquiv Атрибут также поддерживает значение x-ua-compatible, который позволяет разработчикам указывать режим совместимости документов, который Windows Internet Explorer должен использовать для отображения веб-страницы. Для этого установите для атрибута содержимого значение String, содержащее разделенный запятыми список из одного или нескольких из следующих значений.

Другие вопросы по тегам