Условный комментарий - Conditional comment

Условные комментарии являются условные операторы , интерпретированные Microsoft Internet Explorer версии 5 через 9 в HTML коде. Их можно использовать для предоставления и скрытия кода в эти версии Internet Explorer и из них. Условные комментарии не поддерживаются в Internet Explorer 10 и 11 .

Условные комментарии в HTML впервые появились в браузере Microsoft Internet Explorer 5, хотя поддержка теперь устарела. В Internet Explorer 10 условные комментарии HTML не поддерживаются, когда страница находится в стандартном режиме (режим документа 10). Условные комментарии JScript были введены в Internet Explorer 4 , и они продолжали поддерживаться в Internet Explorer 10 в стандартном режиме или режиме совместимости.

Примеры

Вот простой пример, демонстрирующий, как работают условные комментарии.

<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->

Синтаксис

Есть два типа «условных комментарии»: Downlevel показал , и нижний уровень скрыт .

Базовый синтаксис каждого типа комментария показан в следующей таблице. Первый показанный комментарий является основным комментарием HTML, который включен с целью сравнения и для иллюстрации различного синтаксиса, используемого каждым типом условного комментария.

Тип комментария Синтаксис или возможное значение
стандартный HTML-комментарий <! - Содержание комментария ->
скрытый на нижнем уровне <! - [if выражение ]> HTML <! [endif] ->
раскрытый на нижнем уровне <! [if выражение ]> HTML <! [endif]>

HTML показано внутри блока синтаксиса в каждом из условных комментариев обозначает любой блок контента HTML, включая сценарии. Оба типа условного комментария используют условное выражение, чтобы указать, следует ли анализировать содержимое внутри блока комментариев или игнорировать. Условное выражение формируется из комбинации признака, оператора и / или значения, в зависимости от признака. В следующей таблице показаны поддерживаемые функции и описаны значения, поддерживаемые каждой функцией.

Пункт Пример Комментарий
IE [если IE] Строка «IE» - это функция, соответствующая версии Internet Explorer, используемой для просмотра веб-страницы.
значение [если IE 7] Целое число или число с плавающей запятой, соответствующее версии браузера. Возвращает логическое значение true, если номер версии совпадает с версией браузера. Для получения дополнительной информации см. Векторы версий .
WindowsEdition [если WindowsEdition] Internet Explorer 8 в Windows 7. Строка «WindowsEdition» - это функция, соответствующая версии Microsoft Windows, используемой для просмотра веб-страницы.
значение [если WindowsEdition 1] Целое число, соответствующее выпуску Windows, используемому для просмотра веб-страницы. Возвращает логическое значение true, если значение соответствует используемой редакции. Для получения информации о поддерживаемых значениях и изданиях , которые они описывают, см pdwReturnedProductType параметр функции GetProductInfo.
правда [если правда] Всегда оценивается как истина.
ложный [если неверно] Всегда оценивается как ложь.

В следующей таблице описаны операторы, которые можно использовать для создания условных выражений.

Пункт Пример Комментарий
! [если! IE] Оператор НЕ. Он помещается непосредственно перед функцией , оператором или подвыражением, чтобы изменить логическое значение выражения.
lt [если lt IE 5.5] Оператор «меньше». Возвращает истину, если первый аргумент меньше второго.
lte [если lte IE 6] Оператор «меньше или равно». Возвращает истину, если первый аргумент меньше или равен второму аргументу.
gt [если gt IE 5] Оператор "больше". Возвращает истину, если первый аргумент больше второго.
gte [если gte IE 7] Оператор больше или равно. Возвращает истину, если первый аргумент больше или равен второму аргументу.
() [если! (IE 7)] Операторы подвыражения. Используется вместе с логическими операторами для создания более сложных выражений.
& [if (gt IE 5) & (lt IE 7)] Оператор И. Возвращает истину, если все подвыражения равны истине.
| [если (IE 6) | (IE 7)] Оператор ИЛИ. Возвращает истину, если какое-либо из подвыражений имеет значение истина.

Условный комментарий, скрытый на нижнем уровне

Ниже приведены два примера условного комментария «скрытый нижний уровень»:

<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->

или же

<!--[if lte IE 7]>
<style type="text/css">
/* CSS here */
</style>
<![endif]-->

Директива в первом примере позволит IE 8 читать указанный файл CSS, в то время как IE 7 или более ранние версии IE игнорируют его. Браузеры, отличные от IE, также проигнорируют его, потому что он выглядит как стандартный комментарий HTML. Тег во втором примере позволит IE версий с 5.0 по 7 читать внутренний стиль CSS. При различных вариантах использования этого тега вы также можете выделить IE 6, IE 5 или версии IE, которые новее (больше) или старше (меньше), чем указанная версия.

Условный комментарий, обнаруженный на нижнем уровне

Ниже приведен пример условного «комментария» «обнаружен на нижнем уровне», который вообще не является (X) HTML- комментарием, несмотря на вводящее в заблуждение имя, с использованием синтаксиса Microsoft по умолчанию:

<![if !IE]>
<link href="non-ie.css" rel="stylesheet">
<![endif]>

В этом примере показано содержимое, которое должно быть доступно только для браузеров, отличных от IE, поскольку условие оценивается как "false" в IE (и, следовательно, содержимое игнорируется), в то время как сами теги не распознаются (и, следовательно, игнорируются) в браузерах, отличных от IE. . Это недопустимый HTML или XHTML.

Microsoft признает, что этот синтаксис не является стандартизированной разметкой, предполагая, что эти теги будут игнорироваться другими браузерами и отображать содержимое посередине. Чтобы обеспечить соответствие стандартам W3C, некоторые веб-разработчики используют альтернативную технику для условных комментариев нижнего уровня:

<!--[if !IE]>-->
<link href="non-ie.css" rel="stylesheet">
<!--<![endif]-->

Несмотря на то, что структура несколько сбивает с толку, этот конкретный синтаксис является допустимым (X) HTML и полезен для условных разделов, предназначенных специально для браузеров, отличных от IE; если условие истинно (например, при написании кода, предназначенного для отображения в браузерах, отличных от IE, и в некоторых версиях IE), IE затем отобразит «->» перед содержимым HTML. Эта проблема легко решается добавлением "<!" к начальному "->" следующим образом:

<!--[if gt IE 6]><!-->
This code displays on non-IE browsers and on IE 7 or higher.
<!--<![endif]-->

Дополнительный "<!" игнорируется браузерами, отличными от IE; он также игнорируется IE независимо от условия, потому что если false , все в условном комментарии игнорируется, а если true , результирующий тег <!--> не распознается и, следовательно, игнорируется.

Условные комментарии в JScript

Начиная с Internet Explorer 4, существует аналогичный собственный механизм для добавления условных комментариев в JScript , известный как условная компиляция.

Примеры кода:

<script>
/*@cc_on
  document.write("You are using IE4 or higher");
@*/
</script>

Также было несколько предопределенных переменных, хотя на них больше нельзя полагаться, поскольку Microsoft изменила движок JScript IE6 с XP SP3, и теперь он сообщает как:

@_jscript_version == 5.7

В результате возможный способ определения версии Internet Explorer с помощью условной компиляции можно увидеть ниже:

<script>
/*@cc_on

  @if (@_jscript_version == 11)
    document.write("You are using IE11 with an older document mode");
  @elif (@_jscript_version == 10)
    document.write("You are using IE10");
  @elif (@_jscript_version == 9)
    document.write("You are using IE9");
  @elif (@_jscript_version == 5.8)
    document.write("You are using IE8");
  @elif (@_jscript_version == 5.7)
    document.write("You are using IE" + (!window.XMLHttpRequest ? 6 : 7));
  @elif (@_jscript_version == 5.6)
    document.write("You are using IE6");
  @elif (@_jscript_version == 5.5)
    document.write("You are using IE5.5");
  @elif (@_jscript_version < 5.5)
    document.write("You are using a version older than IE5.5");
  @else
    document.write("You are using an unknown version of IE");
  @end
 
@*/
</script>

Однако условная компиляция больше не поддерживается в стандартном режиме Internet Explorer 11 .

Смотрите также

Внешние ссылки

Рекомендации