Kouzlo s podmíněným komentářem
Tento článkem je vlastně odpovědí na e-mail Honzy Biena, který se ptal na čachry, které jsem tuhle prováděl s podmíněnými komentáři. Totiž, obecně panuje představa, že jeden druh komentářů (downlevel-hidden) je validní a druhý (downlevel-revealed) nikoliv. A já se právě pokusil ty nevalidní upravit tak, aby validní byly. ;)
Nejprve se podívejme na oficiální dokumentaci (nebo článek v češtině).
Máme tu tzv. „downlevel-hidden“ nebo chcete-li „skrývající“ komentář:
<!--[if IE 5]>
Tohle vidí jen IE verze 5
<![endif]-->
A také „downlevel-revealed“ aneb „odhalující“ komentář:
<![if !IE 5]>
Tohle vidí všichni kromě IE verze 5
<![endif]>
Nenechte se zmást tím, co se nachází mezi hranatýma závorkama, a
zobecněme, že pro otevření komentáře existují dva oficiální zápisy
<!--[if ???]>
a <![if ???]>
, a dále pro
uzavření opět dva <![endif]-->
a
<![endif]>
. To je důležitý výchozí bod.
Tedy ten podmíněný komentář s negací lze bezpochyby zapsat i takto:
<!--[if !IE]>
Tohle vidí všichni kromě IE
<![endif]-->
Perfektní službu nám nyní prokazuje zvýrazňovač syntaxe FSHL, díky kterému jasně vidíme zádrhel zmíněného zápisu. Totiž větu „Tohle vidí všichni kromě IE“ sice ostatní prohlížeče vidí, ale bohužel jako součást velkého komentáře. Což je nám vcelku houby platné, že?
Dobře, proč tedy ten načatý komentář nepřerušit?
<!--[if !IE]>
komentář --> tohle už ne <!-- opět komentář
<![endif]-->
Odsud už je jen krůček k optimalizaci:
<!--[if !IE]> -->
Tohle vidí všichni kromě IE
<!-- <![endif]-->
Jak prozrazuje FSHL, syntaxi jsme učinili za dost a výsledkem je plně validní a funkční podmíněný komentář, kterým lze vložit kód, jenž IE nevidí, ať se snaží sebevíc.
Můžete si to vyzkoušet.
Děkuji za pozornost.
Komentáře
goophy #1
Teď už snad jen zatleskak, stoupnout si a odejít z posluchárny pln dojmu, že jsem strávil těch pár minut užitečně, když jsem si četl tenhle článek. Vážně to bylo dobrý. ;)
Tomik #2
Musím říci, že když je takto k ráno, člověk barvišky a FSHL opravdu ocení… 🙂
Jan Renner #3
Excelentní. Fakt. Když jsem poprvé viděl revealed CC, rezignoval jsem na jeho použití pro nevaliditu a dál se o něj nezajímal.
Ještě mě zaujala konstrukce typu
kterou jsi ukazoval před dvěma dny u Honzy Biena. Ta funguje podle očekávání – nahrazuje i selektivní revealed CC, takže by se na ně dalo úplně zapomenout. Sekvence
<!-->
je pro mě ovšem co do významu docela záhada. Teoreticky je v pořádku a při použití mimo komentář komentář otevírá a při použití uvnitř komentáře ho zavírá :) MSIE (včetně 7 beta 2) si to ale nemyslí a bere ji nejspíš jako samostatně stojící komentář. Toho využívá ta zmíněná konstrukce. Testoval jsi to? Prakticky bych to asi nepoužil (ono v podstatě odlišovat od sebe verze IE ani není proč), ale je to zajímavé.
David Grudl #4
#3 Jan Renner, Prakticky žádný browser neumí správně nakládat s komentáři (viz tento test), což je dáno především jejich podivnou až nevhodnou syntaxí. Takže ačkoliv sekvence
<!-->
znamená, jak píšeš, začátek nebo konec komentáře, IE ji chápe jinak a po svém. Ovšem nelze na to spoléhat.Že se tato verze objevila u Honzy Biena je má chyba, mělo tam být jen
-->
a<!--
. I když v tomto případě funguje obojí stejně.Skic #5
výborné
luk #6
Klidek, normalni lide dokazi poznat, kdo je inteligentni a kdo nouma.
Petr #7
Skutečně velmi zajimavy „hack“. Ted jen nez prijde nejaka nova verze xml a zakaze pouzivat zavorky v komentari ;)
Roj #8
JiK #9
Je možné takto odlišit Operu a Firefox?
Petr #10
Prima článek, ještě kdyby to tak fugnovalo pro více komentářů a ne jen pro jeden.
Honza #11
Nevím proč, ale v IE 6 při použití rámců dělá tento zápis problémy. Do rámce se na načte úplně jiná stránka a vícekrát zasebou ???
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.