Одной из частых проблем при верстке и дизайне HTML-документов является неправильное отображение страницы различными браузерами или их версиями. И по известным всем причинам браузер Internet Explorer (IE) интерпретирует правила XHTML и CSS не так, как это положено по стандартам. Условные комментарии могут быть использованы для того, чтобы избежать проблем с этим «гадким» браузером.
Обычные HTML-комментарии выглядят следующим образом:
<!-- Текст комментария -->
C помощью них можно оставить важные замечания по особенностям HTML-кода для себя или для других веб-дизайнеров. Такой вид комментариев официально принят в спецификации HTML.
На официальном сайте Майкрософт предложено ещё два вида комментариев: downlevel-hidden и downlevel-revealed. Оба типа комментариев используются для определения версии браузера. Если условие истинно, то содержимое условного комментария интерпретируется браузером как HTML-содержимое.
Тип комментария downlevel-hidden выглядит следующим образом:
<!--[if условное выражение]> HTML-содержимое <![endif]-->
Тип комментария downlevel-revealed имеет следующий вид:
<![if условное выражение]> HTML-содержимое <![endif]>
Комментарий downlevel-revealed не поддерживается стандартами HTML, так как имеет ошибочный синтаксис в контексте HTML. Поэтому если необходима чистота и безошибочность кода, тогда от использования этого типа условных комментариев лучше отказаться.
Комментарий downlevel-hidden в контексте HTML интерпретируется как обычный комментарий, а условие вычисляется только в IE. Однако если внутри условного комментария будет находиться обычный HTML-комментарий, то это будет синтаксической ошибкой.
Ниже предлагаются условные комментарии типа downlevel-hidden с различными выражениями.
<!--[if IE]> только для Internet Explorer <![endif]--> <!--[if IE 7]> только для Internet Explorer версии 7 <![endif]--> <!--[if !IE]> не для Internet Explorer <![endif]--> <!--[if lt IE 6]> для Internet Explorer версий ниже 6 <![endif]--> <!--[if lte IE 6]> для Internet Explorer версий 6 и ниже <![endif]--> <!--[if gt IE 6]> для Internet Explorer версий выше 6 <![endif]--> <!--[if gte IE 6]> для Internet Explorer версий 6 и выше<![endif]--> <!--[if !(IE 7)]> для Internet Explorer любой версии за исключением 7 <![endif]--> <!--[if (gt IE 5)&(lt IE 7)]> для Internet Explorer выше 5 и ниже 7 версии <![endif]--> <!--[if (IE 6)|(IE 7)]> для Internet Explorer 6 или 7 версии <![endif]--> <!--[if true]> для любой версии <![endif]--> <!--[if false]> ни для одной версии <![endif]-->
Операнды в выражениях могут быть любыми из указанных выше, они могут комбинироваться самыми различными способами.
В заключение хочется сказать, что в большинстве случаев можно избежать использования условных комментариев. И это правильно, ведь чем универсальнее правило, тем оно лучше.
Статья основана на документе Microsoft «About Conditional Comments» [5].