# Conditional Comments

Conditional Comments (kurz: CC; englisch für: bedingte Kommentare) sind Kontrollstrukturen in HTML-Dokumenten, die nur vom Microsoft Internet Explorer und Programmen aus der Microsoft-Office-Reihe (z. B. Microsoft Word) interpretiert werden. Sie bieten die Möglichkeit, je nach Programmversion eines HTML-Renderers, unterschiedliches HTML auszuführen. Ab dem Internet Explorer 10 wird diese Form der Browserweiche für standardkonforme HTML-Seiten nicht mehr unterstützt.

## HTML-Syntax

Die Verwendung erfolgt analog zu echten HTML-Kommentaren (<!-- Kommentar -->):
<!--[if 'Bedingung']>Anweisungen<![endif]-->
Der Internet Explorer prüft die formulierte Bedingung und interpretiert den Inhalt, wenn die Bedingung zutrifft. Es ist durch vorgegebene Vergleichsoperatoren und -werte möglich, unterschiedliche Versionen des Browsers anzusprechen. Andere User Agents interpretieren diese Struktur als syntaktisch korrekten Kommentar und ignorieren den Inhalt.
Bei der Verwendung des standardkonformen Modus entfällt im Internet Explorer ab Version 10 die Möglichkeit, Conditional Comments zu nutzen. Das Konstrukt wird dann ebenfalls nur als Kommentar behandelt.

### Werte (Auswahl)

| Wert | Funktion | Beispiel |
| ! IE | wenn kein Internet Explorer | <!--[if !IE]> |
| IE | wenn Internet Explorer | <!--[if IE]> |
| IE 5.5 | wenn Internet Explorer Version 5.5 | <!--[if IE 5.5]> |
| IE 8 | wenn Internet Explorer Version 8 | <!--[if IE 8]> |
| mso | wenn Microsoft Office | <!--[if mso]> |
| mso 15 | wenn Microsoft Office 2013 | <!--[if mso 15]> |
| vml | wenn VML unterstützt wird | <!--[if vml]> |
Wenn es nötig wird, können Bedingungen auch geklammert werden.

### Operatoren

| Operator | Funktion | Beispiel |
| ! | Nicht-Operator | <!--[if!(IE 6)]> (wenn nicht IE 6) |
| lt | Kleiner-als-Operator | <!--[if lt IE 6]> (wenn kleiner als IE 6) |
| lte | Kleiner-gleich-Operator | <!--[if lte IE 6]> (wenn kleiner als oder gleich IE 6) |
| gt | Größer-als-Operator | <!--[if gt IE 6]> (wenn größer IE 6) |
| gte | Größer-gleich-Operator | <!--[if gte IE 6]> (wenn größer als oder gleich IE 6) |
| & | Und-Operator | <!--[if mso &!vml]> (wenn Office-Programm ohne VML-Unterstützung) |
| | | Oder-Operator | <!--[if mso | ie]> (wenn Office-Programm oder IE) |

### Umkehrung

Normalerweise verstecken bedingte Kommentare Anweisungen vor User-Agents, die diese nicht verstehen. Microsoft spricht hierbei von „downlevel-hidden“, also „vor älteren Browsern versteckten“, Kommentaren. Diese Wirkung lässt sich aber auch umkehren (sogenannte „downlevel-revealed“-Kommentare):
<![if lt IE 7]>Anweisungen für IE vor Version 7 und andere Browser<![endif]>
Hierbei handelt es sich nicht mehr um einen HTML-Kommentar, sondern um syntaktisch fehlerhaftes und somit invalides Markup. Die betreffende Bedingung wird nur vom Internet Explorer ausgewertet. Andere Browser interpretieren die Zeichenfolgen <![if lt IE 7]> und <![endif]> als ungültige Tags und stellen nur den Inhalt dazwischen dar. Syntaktisch korrekt und valide nach W3C ist folgende Syntax:
<!--[if lt IE 7]>-->Anweisungen für IE vor Version 7<!--<![endif]-->
Um Code im Internet Explorer < 10 auszuführen und einen alternativen Code für andere Browser einzubinden, eignet sich die nachfolgende Variante. Da alternative Browser mit conditional comments nichts anfangen können, darf der Code für den alternativen Browser nicht innerhalb eines Kommentars stehen, sondern muss zwischen zwei Kommentaren stehen:

## Bedeutung für Outlook 2007

Die Darstellung von E-Mails im HTML-Format unter Outlook 2007 wird nicht mehr von einer Komponente des Internet Explorers, sondern von Microsoft Word übernommen. Zusätzlich sind aus Sicherheitsgründen verschiedene HTML-Features (wie Formulare oder Scripte) unter Outlook 2007 nicht verfügbar. Die Darstellung von HTML-E-Mail kann mit bedingten Kommentaren für Outlook angepasst werden, um z. B. bei Newslettern eine Alternative zu einem Eingabeformular anzubieten.
<!--[if gte mso 12]>Anweisungen für Office 2007 und größer<![endif]-->

## JavaScript und JScript

Seit dem Internet Explorer 4 (JScript 3.0) gibt es einen ähnlichen Mechanismus für JavaScript. Der im IE verwendete JScript-Interpreter wertet folgende Syntax aus, die von anderen Interpretern nur als Kommentar erkannt wird. Microsoft nennt das Verhalten „bedingte Kompilierung“.
Diese Syntax ist in ähnlicher Form auch in den Sprachumfang von JScript .NET aufgenommen worden.