• TwitterRSS
  • Domů na Webylon
  • Kritika W3C
  • Kompatibilita, CSS
  • Božská sabotáž

    21. září 2006

    Prvním prohlížečem s implementací kaskádových stylů byl Internet Explorer 3. Málokoho překvapí, že nectil doporučení CSS 1. Nešlo o projev neúcty ke konsorciu, v té době dotyčná specifikace neexistovala.

    Čtvrtá verze téhož prohlížeče se již trochu opírala o hotové CSS 1 a implementovala i část toho, co se o dva roky později usadilo v doporučení CSS 2. Zároveň udržovala kompatibilitu se svou starší verzí a konkurenčním Netscapem 4, včetně některých jeho chyb a „chyb“.

    Vycentrujte blok

    Jak zarovnat jeden blokový element doprostřed jiného? Nešlo by to třeba předpisem text-align: center? Och, to snad ne! To je přeci špatně! Je chybou Exploreru, že to sbaští. Nebo ne?

    Vlastnost text-align popisuje, jak je text zarovnán uvnitř elementu. [...]

    Příklad: div.center { text-align: center; }

    Jelikož se text-align dědí, všechny blokové elementy uvnitř elementu <div> s class="center" budou vystředěné.

    — CSS 1, 5.4.6 Vlastnost text-align, W3C, 17. prosince 1996

    Co je psáno, je dáno. Či alespoň bylo. Dnes již je zřejmé, že konsorcium myslelo tu větu u příkladu trošku úplně jinak, než ji napsalo. V červnu 2001 samo svoji chybu oficiálně uznalo a v CSS 2 ji roku 1998 napravilo.

    Explorer 4 poslechl „mocný hlas“ konsorcia a upravil vlastnost text-align, s níž přišla jeho předchozí verze. Záměrně se podřídil té jediné správné definici, o které dnes takřka každý začátečník jistojistě ví, že je špatná. Tvůrci Mozilly a Opery vycházeli už jen z CSS 2 a bloky nezarovnávají.

    Vznikl zbytečný konflikt, kterému šlo snadno předejít. Stačilo by, kdyby konsorcium nedělalo dodatečně z vlastní chyby chybu jiných.

    Zafixujte pozadí

    Vlastnost background-attachment podporuje Explorer od verze čtyři. Použitelná však byla již ve verzi tři skrze zkrácený zápis background: url('obrázek') fixed. První implementace je tedy starší, než specifikace CSS 1. Jak je tomu v Exploreru u mnoha dalších vlastností, i zde je první implementace na dlouhou dobu poslední.

    Vůči čemu je fixní pozadí fixní? Obě doporučení konsorcia říkají, že vůči zobrazovací ploše prohlížeče. Obě zároveň dovolují vyhovujícímu prohlížeči podporovat fixní pozadí pouze u elementu <body>. Navzdory všeobecnému přesvědčení podporuje modré éčko tuto vlastnost od pradávna na všech elementech. Jenže jinak.

    Podle Exploreru je fixní pozadí fixní v rámci elementu, což se projeví jen tehdy, má-li dotyčný element posuvník. Uživatel posouvá jeho obsah, pozadí zůstává na místě. V případě elementu <body> se tato implementace „náhodou“ kryje s představou W3C. Je starší než ta představa. Byla první a po mnoho let i jediná. Posloužila jako vzor pro jiné prohlížeče, kupříkladu Opera ji opustila až ve verzi 7.

    Další zbytečný konflikt. Kdyby W3C zavedlo k již implementovaným fixed a scroll třetí hodnotu (třeba canvas) problém by neexistoval. Že by se tři hodnoty hodily nakonec stejně pochopilo.

    Přejeďte element

    Internet Explorer 4 představil světu úžasnou novinku: pseudotřídu :hover. Aplikovala se výhradně na odkazy, přesněji řečeno na všechny elementy <a> s atributem href. Nebyla sama s takto omezenou působností, zapadla mezi pseudotřídy :link a :visited, s nimiž přišel Explorer 3.

    Konsorciu se zmíněné omezení patrně nelíbilo, proto o rok později v CSS 2 zadefinovalo, že by :hover měl fungovat na všech elementech. Uživatelé dnešních poslušných prohlížečů proto na postarších webech nechápavě klikají na nadpisy, jejichž barva se po přejetí myší mění:

    <style> a:link { color: #barva1 } a:visited { color: #barva2 } a:hover { color: #barva3 } </style> [...] <h3><a name="kotva">Kapitola, na níž lze odkázat pomocí #kotva</a><h3>

    Autoři takových stránek nepočítali s doporučením W3C. I zde bylo modré éčko po mnoho let jediným prohlížečem, jenž pseudotřídu :hover znal.

    Nejotravnější demonstraci důsledku konfliktu doporučení s první implementací si můžete prohlédnout paradoxně přímo na serveru W3.org. Některé návrhy specifikací z roku 1999 mají totiž ve stylopisu takovýto obecný předpis:

    :link { color: rgb(0, 0, 153) } :visited { color: rgb(153, 0, 153) } :active { color: rgb(255, 0, 102) } :hover { color: rgb(0, 96, 255) }

    Ani lidé z konsorcia si necelý rok po vydání CSS 2 zjevně neuvědomovali, že natírají na modro vše, na co zavítá myší kurzor.

    Sporných míst je více

    Spousta CSS vlastností implementovaných ve třetím a čtvrtém Exploreru předcházela specifikacím. Velká část z těch, které konsorcium předefinovalo jinak, nebyla v původní podobě pro zdravý vývoj World Wide Webu škodlivější, než předefinování samotné. Následky těchto sabotáží pociťujete dodnes.

    Správná standardizační autorita má spory urovnávat. Ne vytvářet.