Podmíněné komentáře

Podmíněné komentáře jsou často užívanou metodou, jak:

Případně je to metoda, jak nějaký kód podstrčit jenom Exploreru a jiným prohlížečům ne. Nebo naopak ten kód může být ignorován jenom Explorerem.

Jiné prohlížeče než Internet Explorer vlastní značky pro podmíněné komentáře nemají. To ale v praxi nevadí, protože nejčastější úkol je speciální úprava kódu právě pro Interent Explorer, anžto pro nejšílenější prohlížeč.

Anglicky se podmíněný komentář nazývá conditional comment (v množném čísle conditional comments).

Pokud vás zajímá obyčejný HTML komentář, dělá se znaky <!-- a -->. To popisuji u HTML komentářů.

Příklady

<!--[if IE]>
tento kód Internet Explorer vidí, ostatní prohlížeče ignorují
<![endif]-->

<![if !IE]>
tento kód Internet Explorer ignoruje, ostatní prohlížeče jej vidí
<![endif]>

Rozbor příkladu - jak to vidí ostatní prohlížeče

Pro ostatní prohlížeče (Webkit, Firefox, Opera) je sekvence <!-- prostě začátkem poznámky. Nějaké hranaté závorky v prvním příkladu a to, co je v nich, je jim srdečně ukradené, pro ně je to poznámka, kterou ignorují. Vidí tedy toto:

<!-- poznámka bla bla bla
bla bla bla
bla bla -->

Ve druhém příkladu je konstrukce <![if !IE]>. Prohlížeče žádný HTML tag jménem <![if !IE]> ani <![endif]> ani podobný neznají, takže se k tomu zachovají jako k neznámému tagu. Tedy jej ignorují a jeho obsah normálně interpretují a zobrazují. V druhém příkladu tedy vidí toto:

<neznámý tag jako by nebyl>
tento kód ostatní prohlížeče normálně vidí
<neznámý tag jako by nebyl>

(Tento <![if !IE]> kód mimochodem není validní, což bude zajímat všechny, kdo hrají na validitu. Existují způsoby, jak tento zápis oplácat dalšími značkami pro komentáře, aby byl validní, ale neznám takový způsob oplácání, ke kterému by se hlásil i Microsoft, aby byla zaručena správná interpretace v budoucích prohlížečích, a tak to oplácání ani nebudu uvádět.)

Jak to vidí Internet Explorer

Internet Explorer je naučený, že za začátkem poznámky má vyhodnocovat podmínky v hranatých závorkách. Je-li taková podmínka platná, začátek poznámky ignoruje.

Dále je IE naučen, že má interpretovat sekvenci <![podmínka]>. Je-li podmínka platná, sekvenci ignoruje. Je-li neplatná, nahradí ji začátkem poznámky. Všimněte si, že v podmínce je použit před IE vykřičník znamenající negaci.

To je všechno nudná teorie. Asi bude nejlepší přejít k dalším příkladům.

Kódy jen pro určité verze Exploreru

Například:

<!--[if IE 8]>
kód jen pro Internet Explorer 8 a pro nic jiného
<![endif]-->

Ostatní prohlížeče kód nevidí a chápou ho jako poznámku. Nebo:

<!--[if IE 6]>
kód jen pro Internet Explorer 6 a pro nic jiného
<![endif]-->

V praxi je lepší používat podmínku vyšší nebo nižší verze, která se dělá pomocí operátorů lt, lte, gt a gte.

<!--[if lt IE 7]>
kód jen pro Internet Explorer verze nižší než 7. lt znamená menší než
<![endif]-->

<!--[if lte IE 7]>
kód jen pro Internet Explorer verze nižší nebo roven 7 (takže např. IE 6 a IE 7). lte znamená menší nebo rovno
<![endif]-->

<!--[if gt IE 7]>
kód jen pro Internet Explorer verze vyšší než 7 (takže např. IE 8 nebo IE 9). gt znamená větší než
<![endif]-->

Podobně gte znamená větší nebo rovno. Další podmínky jsou např. [if (IE 6)|(IE 8)], operátor | znamená nebo a vidíte, že se to závorkuje. Podobně operátor & znamená "a zároveň".

Kódy zapoznámkované jen v určité verzi

Operátor pro negaci je vykřičník.

<!--[if !(IE 8)]>
kód fungující ve všech Explorerech, jen Internet Explorer 8 ho neuvidí (před podmínkou je vykřičník)
<![endif]-->

totéž by se dalo zapsat i jinak:

<![if IE 8]>
kód fungující všude, jen IE 8 ho nevidí
<![endif]>

Tyto dva kódy se navíc samozřejmě liší v tom, jak je vidí ostatní prohlížeče. První kód chápou jako poznámku, druhý nikoli. Takže to není totéž.

Kódy pro verze Windows

Vyzkoušejte si, co dělá [if WindowsEdition], případně [if WindowsEdition 1]. Sám jsem to nezkoušel a zkoušet nehodlám.

Běžné použití na připojení stylu

Nejčastější aplikace podmíněných komentářů je na připojení stylu jenom pro určitý prohlížeč. Například chci, aby se stránka stylovala podle stylopisu kocicka.css, ale pro Internet Explorer 9 připojím ještě opravný styl opravaIE9.css:

<link rel="stylesheet" href="kocicka.css">
<!--[if IE 9]>
<link rel="stylesheet" href="opravaIE9.css">
<![endif]-->

Jak je z příkladu doufám zřejmé, ve všech případech se připojí první styl. Druhý styl bude ve většině případů ignorován, protože je uvnitř poznámky. Jenom Internet Explorer 9 si ho vezme a bude interpretovat.

Internet Explorer 10 a 11 už ne

Podle různých střípkovitých informací soudím, že Internet Explorer ve verzi 10 už podmíněné komentáře podporovat nebude. Asi se vývojáři cítí natolik silně, že udělali verzi, kterou není potřeba hackovat. Tak uvidíme.

Subjektivní kecy

Já osobně nemám podmíněné komentáře rád. Nepamatuji se, že bych je v praxi někdy použil. Možná i proto o nich píšu až v roce 2010, tedy přibližně deset let poté, co začaly fungovat.

CSS

Jediné rozumné použití, které znám, je na připojení CSS stylů, jež jsem zmiňoval výše. Nemůžu ale přenést přes srdce, že se operace s podmínkováním CSS přenáší na úroveň HTML. Jinak řečeno podobný mechanismus by měl existovat přímo v CSS. Což neexistuje, nic jako obecně přijaté podmíněné komentáře v CSS nejsou.

HTML

No a kromě připojování stylů neznám žádný relevantní důvod, proč majitelům různých prohlížečů poskytovat různý obsah.

Takže snad jediné použití podmíněných komentářů, které občas uznávám, je toto upozornění:

<!--[if lte IE 6]>
Ahoj, máš zastaralý prohlížeč, koukej si ho hele aktualizovat.
<![endif]-->

 

Reklama

www.webhosting-c4.cz, webhosting s doménou v ceně. 20GB

o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

HTML tagy Abecedně Příklady HTML tahák

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.