• TwitterRSS
  • Domů na Webylon
  • Kritika W3C
  • CSS, Historie
  • Zbrklá, zmatená a roztříštěná

    30. září 2014

    Evoluce kaskádových stylů prošla pod vedením konsorcia několika druhy kotrmelců, než našla tu správnou cestu. Nebo lépe řečeno: než našla ten stávající kotrmelec.

    Kdyby CSS 1 byla bouda, CSS 2 dřevěná chatrč a CSS 2.1 zděný dům, konsorcium by nyní pod hlavičkou CSS 3 stavělo orbitální stanici. Každá generace má svůj příběh.

    Bouda

    Vše začalo v květnu 1995 v jeskyni obsypané prezentačními HTML elementy a atributy. Tehdy si prastandardizátor usmyslel, že učiní značkovacímu patlání přítrž a vymyslel kaskádové styly. Představoval si to nějak takhle:

    define "červená" "#8F0909" *: font.family = Calibri ! important H2: font.size = H1[font.size] * 0.8 P: font.size = H2[font.size] - 12 pt P: link.color = "červená" ! insist P: line.indent = 4 en /H2 P/: line.indent = 0 en /* odstavec následující hned za nadpisem */ DIV.patka: back.color = 0.2, 0.2, 0.2 ! important DIV.patka: font.color = white ! legal DIV.patka: font.style = italic & bold DIV.patka: add.before = "<H2>Kam dál:</H2>"

    Konstanty, hodnotová aritmetika, meziselektorové závislosti, formátovatelné pseudoelementy, víceúrovňová důležitost… prostě samé zjevné starožitosti. V prosinci se syntaxe až na pár detailů stabilizovala na dnes známých chlupatých závorkách, dvojtečkách a střednících:

    body { /* dáme si na pozadí severozápadní gradient z červené do žluté */ background: red/yellow; bg-blend-direction: NW; bg-style: no-repeat fixed; } "ídéčko" { border-color: "obrazkovy-okraj.gif"; text-align: center; magnification: 3; }

    Definitivní „zatuhnutí“ zápisu a rozsahu vlastností nastalo až v červenci 1996, kdy vyšla betaverze prvního vážně míněného prohlížeče s podporou CSS. Půl roku po vydání finálního Exploreru 3 se z CSS 1 stalo W3C doporučení. Celkem fofr.

    Jelikož si roku 1996 tvůrci CSS dosud neuvědomovali, že vícesloupcovou stavbu půjde docela mazaně seskládat vlastností float, připravovali vedle základního CSS ještě druhou specifikaci, věnovanou exkluzivně šablonovacímu systému stránky. Byla silně inspirovaná tehdy čím dál oblíbenějším proprietárním výmyslem Netscapu — rámy.

    @page { layout: column; } @frame vlevo { width: 200; /* jednotky px jsou výslovně nepovinné */ resize: manual; } @frame vpravo { layout: row; border-width: 3; } @frame hlavička { height: 40; parent: vpravo; content: top.html; } @frame obsah { parent: vpravo; } div.text { flow: obsah; } a { target: obsah; }

    Lidé z W3C krátce předpokládali, že se další verze CSS vydá právě touto cestou. Výrobci prohlížečů názor nesdíleli.

    Dřevěná chatrč

    Měsíc po dokončení CSS 1 začalo pozicování materiálů pro rozšíření čerstvě postavené boudy. Absolutní i relativní, vznikly vlastnosti overflow a visibility.

    Čtyřkové prohlížeče v druhé půli roku 1997 rovnou části pozicování implementovaly. Ještě před jejich dokončením zveřejnilo W3C poznámku rozebírající možné směry vývoje. V ní vymyslelo cursor, včetně později nenáviděné [K.05] hodnoty hand. Také se tam objevila vícesloupcovost jako CSS náhražka za <multicol> z trojkového Netscapu. Explorer 4 implementoval jen ten kurzor, škoda…

    Teprve koncem roku 1997 vyšel první veřejný návrh CSS 2.

    #clanek { columns: 2; column-gap: 2em; column-rule: 1px dotted #888; } p { text-indent: 2em; } /h2~p/ { text-indent: 0; }

    Kuriozitou tohoto návrhu bylo dočasné přejmenování vlastnosti text-align na alignment, aby každý hned pochopil, že slouží i k centrování bloků [K.35], nejen textu.

    V lednu vyšel druhý návrh. V březnu třetí. Tadá!

    CSS 2 se stalo W3C doporučením v květnu 1998 a CSS 3 bude pravděpodobně následovat koncem roku 1999.

    — Håkon Wium Lie a Bert Bos, z knihy CSS: navrhování pro web, 13. července 1999

    Tenhle byrokratický sprint už ovšem neprošel bez následků.

    Mezitím v realitě

    Opustíme-li říši teorie: Necelé dva roky po dokončení CSS 2 vyšel historicky první prohlížeč s úplnou podporou CSS 1 – Explorer 5 pro Macintosh.

    Bez standardů by se web rozbil. Lidi by nemohli přistupovat k určitým stránkám, vývojáři by se zbláznili při pokusech obejít potíže, firmy bez hlubokých kapes by se nemohly zapojit, protože by si nemohly dovolit všechny obezličky a alternativní verze.

    — Jeffrey Zeldman, Proč je Internet Explorer 5 nejvíce standardům vyhovujícím prohlížečem, Mactopia, 2001

    Kvůli tomu, aby se web při honbě za marketingově zvučným milníkem standardu doopravdy nerozbil, zavedl macintoshový Explorer rozdělení režimů na standardní (interně nazvaný CSS1Compat) a quirk (interně BackCompat), které dodnes mnoho začátečníků dezorientuje (s odbornou pomocí na třipět hodin).

    Na filosoficky opačném konci virtuálního spektra autoři prohlížeče Konqueror o takový milník nestáli:

    Konqueror není a nikdy nebude dodržovat CSS 1. Vzhledem k tomu, že je CSS 2 v některých bodech nekompatibilní s CSS 1, vždy následujeme pravidla CSS 2, kvůli tomu selžeme při testování CSS 1, ale to je v pořádku, protože, pokud vím, žádný jiný důležitý prohlížeč nenásleduje CSS 1.

    — Dirk Mueller, Re: Dodržování CSS 1, mailing list kfm-devel, 25. října 2001

    To je ale paráda, když různé standardy zajišťují různý pořádek napříč různými prohlížeči :-)

    Zděný dům

    V následujícím období Netscape pošel a zrodila se Mozilla, která standardizaci silně fandila. Zatímco se ještěří prohlížeč nadšeně vrhnul na XML a CSS 2, Microsoft o druhé pokolení kaskádových stylů nejevil příliš zájem. Explorer pro Windows se vyvíjel trochu jiným směrem. Soustředil se spíš na VML, vázání dat v HTML, procedurální grafické efekty v CSS a JavaScript a DOM a… dalo by se říct vlastně na cokoliv, jen ne na formátovací model z CSS 2.

    Mezi novou generací kodérů krmených evangelizační kašičkou se mnoho let vyprávěly legendy o možných příčinách microsoftí strnulosti. Snaha o světovou nadvládu proprietárními technologiemi? Zneužívání monopolu? Konkurenční boj vedený vražednou letargií? Lenost?

    Z hlediska monopolního prohlížeče byla dřevěná chatrč cosi jako princ Charles. Právoplatný dědic trůnu, kterého bude vhodnější přeskočit. Zástupci Microsoftu v konsorciu začali pracovat rovnou na CSS 3 a nad dvojkou veřejně lámali hůl:

    Proč by měl jakýkoliv prohlížeč podporovat celé CSS 2, když části samotného CSS 2 jsou stále rozbité? Nemyslím si, že někdy bude nějaký prohlížeč podporovat celé CSS 2.

    […]

    Nicméně pro přidání display: inline-block bych byl, kdyby vzniklo CSS 2.1 (které by odstranilo špatné/neimplementované kousky a přidalo pár jednoduchých vylepšení).

    — Tantek Çelik, Re: inline elementy v CSS 2 a inline-block v CSS 3, mailing-list www-style, 17. října 2001

    Pár dní poté zazněla také pamětihodná reakce na dotaz ohledně nemožnosti vertikálního centrování:

    P.S.: Abych odpověděl na rétorickou otázku „Jak je možné navrhnout tak ubohý systém?“ — je možné ho vytvořit tak, že se druhá verze standardu stane Doporučením dříve, než je první zcela implementovaná. Obecenstvo webových vývojářů, které by mohlo poukázat, že je v tomto případě císař nahý, bylo příliš zaneprázdněno prací s tím zlomkem CSS 1, který fungoval, než aby se obtěžovalo CSS 2 kriticky zhodnotit.

    Tohle je další důvod, proč by se z žádného návrhu nemělo dělat Doporučení, dokud neexistují alespoň dvě kompatibilní implementace (dostupné, vydané, neexperimentální) pro každou pasáž v návrhu.

    — Tantek Çelik, Re: Jak je možné navrhnout tak ubohý systém?, mailing-list www-style, 25. října 2001

    Podobných řečí padlo během let mnoho, ale na váze jim ubíralo, že nebyly konkrétní. Zpětně po letech jde podrobnosti odvodit.

    Nehezký přešlap v CSS 2 se nacházel u pozicování: vlastnosti left, top, right i bottom měly určovat hranu obsahu a nikoliv hranu vnějšího okraje. Reálně hrozilo, že vznikne podobné schizma, jako u box modelů [K.10], kdyby minoritní prohlížeče chtěly specifikaci dodržet…

    Ukázka rozdílné interpretace vlastnosti left.

    … ale v tomto případě se na dodržení specifikace naštěstí úplně všichni vybodli, takže nekompatibilita nevznikla. Škoda, že nedopadl stejně i ten box model.

    Podle původního CSS 2 dále platí:

    Tyto drobné zvláštnosti ve specifikaci způsobovaly reálné potíže v prohlížečích, protože Explorer, Mozilla i Opera implementovaly část zmíněných nedostatků a naopak v jiných pasážích sveřepě trvaly na svém navzdory průzračně jasné definici.

    Nápad „nečekejme na CSS 3, opravme CSS 2“ postupně ovládl celou pracovní skupinu ve W3C. V srpnu 2002 vznikl návrh CSS 2.1 — a rovnou jako „poslední výzva“ k připomínkám, přichystaný k urychlenému schválení. Což nevyšlo.

    Tento návrh může být kdykoliv aktualizovaný, nahrazený, nebo překonaný jinými dokumenty. Je nežádoucí citovat tento dokument jako cokoliv jiného než „dílo v zrodu“.

    návrhy CSS 2.1, W3C, od 2. srpna 2002 do 12. dubna 2011

    Konsorcium totiž vylepšilo svůj standardizační proces v duchu toho, co Tantek psal: přibyl požadavek na dvě nezávislé implementace. Co není vyzkoušeno v praxi, to nesmí dostat razítko „W3C Doporučení“.

    Zatímco hnutí technické evangelizace masírovalo mozkovny webových vývojářů nekritickou loajalitou k CSS 2, tvůrci prohlížečů se snažili původní CSS 2 pohřbít a na jeho hrobě postavit životaschopný kompromis. Do specifikace se prokousala i část toho, co se dlouhá léta považovalo za vykreslovací chyby Exploreru — třeba samoclearovací schopnost vlastnosti overflow: hidden.

    Dospívání CSS 2.1 se vleklo, ve stavu „už-už to bude“ se ocitlo dohromady desetkrát, definitivního schválení se dočkalo až v červnu 2011.

    Orbitální stanice

    Konstruování CSS 3 započalo koncem roku 1998 sepsáním několika samostatných neveřejných návrhů. Zveřejněna byla opět W3C poznámka s možnými směry vývoje sloužící zároveň jako anketa. Z šedesáti sedmi odvážných nápadů se některé dočkaly zapomnění a jiné téměř doslovné implementace.

    Kvůli předpokládanému velkému rozsahu specifikace a hypotetickému rozmělnění nároků na prohlížeče padlo rozhodnutí, že CSS 3 nebude jeden rozsáhlý dokument, ale rozdrobí se do desítek menších modulů. Podobně jako u XHTML se vznášela ve vzduchu poněkud střelená idea, že chytrá mobilní zařízení budou vybíravě hloupá.

    W3C si od tohoto kroku slibuje zpřehlednění celého doporučení, včetně možnosti odkazovat zvlášť na jednotlivé moduly místo na jeden obrovský dokument. A také prohlížeče si mohou vybrat, které moduly budou podporovat.

    — Jan Dudek, Současný vývoj standardů, Interval.cz, 17. září 2003

    Evoluce prohlížečů sice má všelijak divně vychýlené priority, ale vize divoké modularizace se naštěstí nikdy neujala. Alespoň zatím.

    Modulů postupně vzniklo několik desítek, někdy obsahovaly pouhý nástřel myšlenky, jindy i docela detailní definice. Tak či tak byly (a dodnes převážně jsou) pořád ve fázi pracovního návrhu. Na různých návrzích se podíleli různí autoři pracující pro různé firmy, čímž se elegantně odstranilo žabomyší přetahování konkurenčních firem.

    Rozdělení do modulů odstranilo nejen případné konkurenční naschvály, ale i nutnost vzájemné spolupráce. Vytratila se potřeba koordinace a hledání širšího konsensu, kvůli které konsorcium a standardizace existují. Každý si staví své bábovičky.

    Ani poměrně bezkonfliktní prostředí ale nezajistilo slušnou rychlost vývoje. Na celé desetiletí se stal pojem „CSS 3“ symbolem zářivé budoucnosti, na kterou se fandové správňáckých kodérských technik těšili jak na Ježíška. Rozpracované návrhy skoro nikdy nečetli, aby si nezkazili příjemné překvapení… a aby náhodou neposkvrnili posvátný standardizační proces zpětnou vazbou.

    Strnulost modulů CSS 3 ostře kontrastuje s uspěchaností předchozích verzí. Že by se W3C poučilo? Ukvapenost nebyla jedinou vadou na kráse CSS 2. Dvojku zamordovala nedůslednost a nedomyšlenost vzájemných vztahů jednotlivých vlastností. Ta totiž sehrála podstatnou roli při rozkolu implementací a specifikací, kvůli němuž musela vzniknout revize CSS 2.1. Jak srovnává vzájemné vztahy trojka?

    Nijak. Vlastnosti se vznášejí ve vzduchoprázdnu. Mezimodulové kolize a nejasnosti se neřeší.

    Třebaže nyní buzzword „CSS 3“ vesele bzučí v inzerátech, hlavní slovo mívá většinou CSS 1 se špetkou pozicování a s několika postradatelnými efekty suplujícími obrázky. Prohlížeče stále podporují jen malý zlomek toho guláše, který bublá v kotlech konsorcia. Bublá už čtrnáct let.

    Srovnat celé CSS 2.1 do konzistentního balíčku trvalo devět let. Jak dlouho by asi trvalo učesání několikanásobně rozsáhlejšího a roztahanějšího CSS 3? Nebylo by lepší dělat menší koordinované krůčky?

    Sousední orbitální stanice

    Jakmile se v září 2011 stal modul selektorů z CSS 3 finálním W3C doporučením (jako první z rodiny CSS 3), vyvrhlo konsorcium na veřejnost první návrh modulu selektorů z CSS 4. O rok později přišel člen pracovní skupiny odpovědné za CSS s překvapivým prohlášením:

    Žádné CSS 4 neexistuje. Nikdy nebylo CSS 4, nikdy nebude CSS 4. […]

    Zatímco jsme se snažili dokončit CSS 2.1, uvědomili jsme si, že velké monolitické verze nedělají dobrotu. Obtížně se udržují a pomalu se vyvíjejí.

    Místo toho jsme se rozhodli rozdělit jazyk CSS do nezávislých modulů. Každý modul může být verzovaný nezávisle a obsahovat pouze menší sadu vlastností, takže je pro jednu tvrdohlavou vlastnost těžší brzdit velkou množinu vlastností.

    — Tab Atkins, Pár slov o CSS 4, osobní blog, 5. září 2012

    Přešli jsme z verzování jazyka na verzování nezávislých modulů, abychom si práci usnadnili, nikoliv zpřehlednili.

    — Tab Atkins, v komentáři pod Pár slovy o CSS 4, osobní blog, 5. září 2012

    Fajn. Takže W3C si všimlo, že v praxi neexistují verze a rezignovalo na jednotící snahy. Existují tedy jen de facto proprietární rozšíření CSS, jejichž přibližnou dokumentaci nahrávají výrobci prohlížečů na servery instituce, která se dříve tvářila jako standardizační. Výrobci konkurenčních prohlížečů se o návrhy modulů nemůžou spolehlivě opřít, pokud si to zákulisně nedojednají (čímž je dobře pojištěno, že nevznikne žádné další vlivné vykreslovací jádro), a tvůrci stránek také nemohou od specifikací očekávat žádné záruky.

    V oblasti CSS není již nutné hrát si na standardizaci. Představení skončilo.