Условные комментарии для IE в HTML

Аватара пользователя
Distructor
Администратор
Сообщения: 1599
Зарегистрирован: 28 дек 2009
Думаю с кривостью реализации некоторых моментов в браузере Internet Explorer (IE) сталкивался любой верстальщик. Особенно это актуально для IE6. Если заказчик хочет чтобы его сайт отображался максимально одинаково не только в основных браузерах, но и в IE, то приходится искать пути для этого.

Наиболее часто для этого используются условные комментарии - особый код, который нормальные браузеры (и валидаторы) пропускают, считая его за комментарий, а IE обрабатывает описанные в нем условия и выполняет их, если версия браузера подходит под условие, или пропускает в обратном случае.

Выглядит условный комментарий следующим образом:

Код: Выделить всё

<!--[if условие]> HTML <![endif]-->
Условие - это логическое выражение, если оно истинно, то содержимое условного комментария считается частью страницы, если ложно то так и остается комментарием.
HTML - любой HTML-код, хотя условные комментарии чаще всего используются для задания персональных css-свойств для IE, например:

Код: Выделить всё

<!--[if lte IE 6]> <style type="text/css"> #elem { width:100px; } <![endif]-->


Примеры наиболее часто используемых условий:

Код: Выделить всё

<!--[if IE]> Для всех версий IE <![endif]-->
<!--[if IE 6]> Для IE6 <![endif]-->
<!--[if IE 7]> Для IE7 <![endif]-->
<!--[if gt IE 7]> Для IE старше 7й версии  <![endif]-->
<!--[if gte IE 7]> Для IE старше 7й версии включительно  <![endif]-->
<!--[if lt IE 7]> Для IE до 7й версии  <![endif]-->
<!--[if lte IE 7]> Для IE до 7й версии включительно  <![endif]-->

Список основных элементов используемых в условии:
    IE [if IE] Единственное поддерживаемое сейчас свойство IE, равное версии Internet Explorer.
    число [if IE 7] Целое или дробное число обозначающее версию браузера. Истинно если число совпадает с версией IE.
    lt [if lt IE 5.5] - Меньше (less-than). Выполняется если первый аргумент меньше второго.
    lte [if lte IE 6] - Меньше либо равно (less-than or equal). Выполняется если первый аргумент меньше либо равен второму.
    gt [if gt IE 5] - Больше (greater-than). Выполняется если первый аргумент больше второго.
    gte [if gte IE 7] - Больше либо равно (greater-than or equal).
    ( ) [if !(IE 7)] - Скобки позволяют выделить подвыражения в сложном выражении.
    ! [if !IE] - Оператор отрицания (NOT). Возвращает значение обратное логическому значению аргумента.
    & [if (gt IE 5)&(lt IE 7)] - Оператор AND. Выполняется если оба подвыражения истинны.
    | [if (IE 6)|(IE 7)] - Оператор OR. Выполняется если одно их подвыражений истинно.

Условные комментарии и различные версии IE на одном компьютере

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

Код: Выделить всё

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version Vector
(если удалять не хочется можно просто переименовать его в xIE, так поступает Multiple IE package44 от TredoSoft).

Вернуться в «Уроки и статьи по верстке»