Благодаря многочисленным особенностям браузера Internet Explorer, основной из которых является недостаточная поддержка стандартов, адаптация сайтов под него, часто требует дополнительных усилий. Существует множество различных способов компенсировать недостатки IE и условные комментарии всего один из них, основные их преимущества перед хаками (использовании ошибок в браузере) заключаются в сохранение валидности кода и предсказуемость поведения в будущих версиях браузера.

Эта статья появилась как результат совмещения интересной идеи отвечать на поисковые запросы по которым приходят на сайт и важности публикации материалов для новичков, оказалось, что один из популярнейших запросов "скрыть селектор от ie7", а ответ на него вполне вписывается в материал для новичков.

Типы условных комментариев

<!--[if условие]> HTML <![endif]-->

Содержимое комментариев такого типа для браузеров не поддерживающих условные комментарии и валидатора ничем не отличается об обычного комментария.

<![if условие]> HTML <![endif]>

Для браузеров не поддерживающих условные комментарии, такая конструкция комментарием не является, а для валидатора ее наличие будет поводом обругать ваш код. Сам по себе такой условный комментарий почти бесполезен, но используя его вместе с условным комментарием первого типа можно получить, хоть и не очень красивую, но действенную конструкцию, и с помощью условных комментариев работающих только в IE сделать часть кода доступной только для других браузеров:

<!--[if IE]><![if !IE]><![endif]-->
<p>Текст для любого браузера кроме IE</p>
<!--[if IE]><![endif]><![endif]-->

или для других браузеров и IE7+:

<!--[if IE]><![if gte IE7]><![endif]-->
<p>Текст для любого браузера и IE 7+</p>
<!--[if IE]><![endif]><![endif]-->

Условие

Условие это простейшее логическое выражение, если оно истинно, то содержимое условного комментария считается частью страницы, если ложно то так и остается комментарием.

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

Примеры

К посту прилагается страничка с примерами, код ее содержимого:

<p>Тестовая фраза, без условных комментариев</p>

<!--[if IE]><p>Текст для любой версии IE</p><![endif]-->

<!--[if IE 6]><p>Текст для IE 6</p><![endif]-->

<!--[if IE 7]><p>Текст для IE 7</p><![endif]-->

<!--[if IE]><![if !IE]><![endif]-->
<p>Текст для любого браузера кроме IE</p>
<!--[if IE]><![endif]><![endif]-->

<!--[if IE]><![if gte IE 7]><![endif]-->
<p>Текст для любого браузера и IE 7+</p>
<!--[if IE]><![endif]><![endif]-->

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

Если у вас установлено несколько версий IE, каждый их них будет считать, что его версия равна версии самого нового IE установленного в системе, т.е. если установлены IE6 и IE7, то в IE6 условные комментарии будут работать так же как и в IE7. Исправить это можно удалив ключ IE в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version Vector (если удалять не хочется можно просто переименовать его в xIE, так поступает Multiple IE package от TredoSoft).

Источники