O webu
Podmíněné komentáře pro IE

Pokud selžou všechny snahy o sjednocení vzhledu/chování napříč prohlížeči, přichází na řadu hackování, tedy psaní různého kódu pro různý prohlížeč.

Internet Explorer umí uměl (do IE 10) tzv. podmíněné komentáře. Tedy speciální HTML komentář, který má v hranatých závorkách nějakou podmínku, například:

<!--[if IE]>
	<p>Nějaký HTML kód</p>
<![endif]-->

Pozor na to, že v jiných prohlížečích, než je IE 9 a starší, tyto komentářové podmínky nefungují. Výše uvedená konstrukce se projeví jako běžný HTML komentář, tedy nijak.

Pár dalších příkladů

Podmínka Kde se obsah zobrazí
if IE ve všech IE
if lt IE 9 ve starších než IE 9 (lt znamená lower than – nižší než)
if gt IE 8 v novějších než IE 8 (gt znamená greater than – vyšší než)
if !IE 7 všude jinde než v IE 7, pochopitelně taktéž ne v jíných prohlížečích než IE (je to pro ně běžný komentář), vykřičník je negace
if gte IE 6 ve všech IE od verse 6 včetně (gte – asi jakože equal = shodné)

Kromě výše uvedených symbolů lze používat i klasické operátory & či | a podmínky řetězit.

Použití

  1. Jedna možnost je pro Explorer(y) vytvářet zvláštní CSS soubory a podmínkou (komentářem) obalit jejich při<link>ování ke stránce.

    Nevýhoda je, že uživatel bude zbytečně zdržován dalším HTTP požadavkem na další CSS soubor, který často bude mít jen pár opravných vlastností.

  2. Proto může být elegantnější pomocí podmíněných komentářů nastavit třídu ie pro nějaký hodně nadřazený element (<html/body>) a pro konkrétní prohlížeč psát selektory začínající právě tou třídou:

    .ie h1 {/* pravidla pro nadpis <h1> v IE */}

    V HTML lze využít toho, že u elementu <html> je volitelné psát počáteční i koncovou značku, takže se nemusíme zaobírat jejím dosazováním pro ostatní prohlížeče.

    <!--[if IE]><html class="ie"><![endif]-->

Ale… nefunkční podmíněné komentáře v IE 10

V Internet Exploreru 10 už podmíněné komentáře nefungují, takže nezbývá než si jej přepnout do staršího režimu IE 9.

<meta http-equiv="x-ua-compatible" content="IE=9">

Čímž se ale bohužel ochudíme o novinky desítky. Proto se jako lepší řešení může nabízet určit prohlížeč na straně serveru a v případě použití elegantního řešení s nastavováním CSS třídy pro <html/body> můžeme totéž snadno nastavit serverovým skriptem a vše bude fungovat jako dřív.

Řešení v PHP

Podobně jako u upravování náhledu na Seznamu, stačí testovat hlavičku user-agent:

<?php 
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
  echo "<html class=ie>";
}
?>

Specifikovat konkrétní IE lze testování hodnot jako (MSIE 6, MSIE 7, MSIE 8, MSIE 9, MSIE 10).

Tvar podmínky pro jiné prohlížeče než IE by vypadal následovně:

<?php 
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") === false) {
  echo "<html class=non-ie>";
}
?>