Na navigaci | Klávesové zkratky

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.

Mohlo by vás zajímat

Komentáře

  1. goophy #1

    avatar

    Děkuji za pozornost.

    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ý. ;)

    před 19 lety
  2. Tomik #2

    avatar

    Musím říci, že když je takto k ráno, člověk barvišky a FSHL opravdu ocení… 🙂

    před 19 lety
  3. Jan Renner #3

    avatar

    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

    <!--[if !IE 5]> <!-->
    <p>Já nejsem MSIE 5</p>
    <!--> <![endif]-->

    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é.

    před 19 lety | reagoval [4] David Grudl
  4. David Grudl #4

    avatar

    #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ě.

    před 19 lety
  5. Skic #5

    výborné

    před 19 lety
  6. luk #6

    Vysvětlím celý postup,
    i s rizikem, že mě zase
    nějaký *** nařkne
    z krádeže ;)

    Klidek, normalni lide dokazi poznat, kdo je inteligentni a kdo nouma.

    před 19 lety
  7. Petr #7

    Skutečně velmi zajimavy „hack“. Ted jen nez prijde nejaka nova verze xml a zakaze pouzivat zavorky v komentari ;)

    před 19 lety
  8. Roj #8

    avatar
    [smazáno] rado se stalo! 🙂

    před 19 lety
  9. JiK #9

    Je možné takto odlišit Operu a Firefox?

    před 18 lety
  10. Petr #10

    Prima článek, ještě kdyby to tak fugnovalo pro více komentářů a ne jen pro jeden.

    před 18 lety
  11. 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 ???

    před 17 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.


phpFashion © 2004, 2024 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.