Validita CSS

Je podtržítkový trik validní, nebo ne? Co vlastně do kaskádových stylů patří? Inu, patří do nich jen to, co připouští specifikace. Ta vlastnosti začínající podtržítkem sice připouští, ale jen syntakticky. Dovolím si proto tvrdit: Podtržítkový trik validní není. Ale zároveň k tomu propašovávám: Ale je poměrně bezpečný.

Až do nedávné doby mi toto téma bylo ukradené. Více, méně! Věděl jsem, že podtržítkový trik funguje spolehlivě a vesele jsem jej tedy v opodstatněných případech používal. Jednoho dne, právě když jsem se pustil do psaní článku o tricích pro Interval.cz (článek brzy vyjde), jsem stál před úkolem sám sobě odpovědět na otázky kolem validity. Věděl jsem, že se na tom lidé, které po odborné stránce uznávám, neshodnou. Vilém Málek říkal nevalidní, Petr Staníček (Pixy) říkal validní. Po ICQ jsem na téma pohovořil i s Pavlem Koutem, který se kloní spíše k Pixymu. Ten mě utvrdil v tom, že podtržítkovvý trik bych neměl zavrhovat, protože je bezpečný. Plaváček jakbysmet. Validita ale zůstala ve hvězdách.

Nelenil jsem proto a obeslal Marka Prokopa, Dušana Janovského a Petra Staníčka emailem, kde jsem je požádal o podrobnější vyjádření k tématu. První mi odpověděl Marek Prokop:

  1. Validita. To je plná shoda s doporučením W3C. Podle něj je podtržítkový hack nyní nevalidní. To slovo „nyní“ zdůrazňuji proto, že CSS nevyznačuje verze ani nemá žádnou obdobu DTD a validita tedy jde vztáhnout pouze k určitému historickému okamžiku, nikoli ke kódu obecně.
  2. Syntaktická (gramatická) správnost. Gramatiku CSS také definuje specifikace W3C a podle ní je podtržítkový hack OK.
  3. Bezpečná nevalidita. Tu bych definoval jako gramaticky správnou konstrukci, která sice není validní, ale zároveň je specifikací jednoznačně definováno, jak ji má UA interpretovat. Z tohoto pohledu je podtržítkový hack bezpečně nevalidní.

Pokud jde o mne, já jsem pragmatik a z důvodů dle bodu 3 považuji tento hack (a mnoho dalších) za OK.

Praktik rozměru „Yuhůovského“, Dušan Janovský, odpověděl stručně, jasně, až vzbudil úsměv na mé tváři:

Hele to je blbý, já validitě vůbec nerozumím. Řeknu ti na to ale následující a můžeš mě i citovat: Podtržítkový hack funguje.

Za několik dnů znovu svůj názor potvrdil Petr Staníček na svém weblogu: Co je a co není validní CSS? (Pixylophone, 8. října 2004). Někteří komentující v diskusi pod příspěvkem, jmenovitě Richard Chudoba (Ritchie) a Anatoly Papirovsky (Raven), si vzali na pomoc specifikaci CSS 2.1, čímž začínají problém rozjasňovat.

  1. Pojem validita vymezuje sama specifikace (Definitions): A valid CSS 2.1 style sheet must be written according to the grammar of CSS 2.1. Furthermore, it must contain only at-rules, property names, and property values defined in this specification. An illegal (invalid) at-rule, property name, or property value is one that is not valid.

    Je řečeno, že validní stylopis musí odpovídat gramatické (syntaktické) definici CSS 2.1. A nejen to. Povoleny jsou jen takové názvy vlastností, které jsou přímo ve specifikace definované.

  2. Povoluje specifikace vlastnosti začínající podtržítkem? Ano, povoluje (Vendor-specific extensions): In CSS 2.1, identifiers may begin with '-' (dash) or '_' (underscore). Keywords and property names, beginning with -' or '_' are reserved for vendor-specific extensions. Such vendor-specific extensions should have one of the following formats:
    '-' + vendor identifier + '-' + meaningful name,
    '_' + vendor identifier + '-' + meaningful name.

    Povolené jsou názvy vlastností podle dvou výše jmenovaných vzorů. Vzory lze v odůvodněných případech porušit (slovo „should“ vykládá dokument RFC2119).

Závěr? Podle CSS 2.1 je validní ten stylopis, který je správný nejen gramaticky, ale obsahuje pouze definované názvy vlastností, hodnoty vlastností, atd… Gramatika CSS 2.1 myslí na výrobce koncových zařízení a proto připouští v názvech vlastností podtržítka. Podtržítkový trik je podle CSS 2.1 gramaticky správný, ale nevalidní.

A nyní zpět na zem, mezi product managery, do světa triků a vychytávek. Na celý akademický příspěvek, který právě dočítáte, můžete z vesela zapomenout. Místo něj si raději zapamatujte citát Pavla Kouta:

Validita není dogma, ale vodítko. Mohu jistá pravidla porušit, ale jen tehdy, uvědomuji-li si sakra dobře, co a proč dělám. Dělal-li bych to jen proto, že to dělají ostatní, pak bych byl nebetyčný vůl.

Komentáře

1. Jan Bednařík – 21. října 2004, 22:18

K tomuto tématu se hodí jeden citát:

Pravý profesionál ví, kdy se má řídit pravidly, a kdy je lepší si je přizpůsobit či je dokonce porušit. V první řadě je třeba ale tato pravidla znát a vědět, jak by mohly danému projektu pomoci. (Jakob Nielsen)

2. Pachollini – 22. října 2004, 10:07

Myslím, že není moc důvodů, proč dělat CSS validní v tomto nejpřísnějším smyslu. Viz: Validní CSS? (Pacholliniho příležitostné Seky, 21. října 2004).

3. Raven – 22. října 2004, 16:52

Myslím, že ještě lepší je nepoužívat hack a použít normální selektor, který nemá žádné problémy a není to hack, ale využití toho, že to IE nepodporuje. Navíc podtržítko je potenciálně nebezpečné – až vyjde nové IE, tak to bude špatné, hodně špatné.

4. Brbla – 23. října 2004, 19:56

Krásný článek. Chválím. Jinak si myslím, že obcházet chybu chybou je sice cesta, ale může se z ní stát cesta do pekel v okamžiku, když je jedna z chyb opravena. Uvidíme, co pro nás W3C nastříhá a co z toho Microsoft ušije 87).

5. Vilém Málek – 9. listopadu 2004, 01:11

Poté, co se ukázalo, že pojem „validita“ je pro jistotu definován v samotné normě CSS (a nyní chápu, proč tomu tak je, ačkoli dříve jsem se domníval, že jde o typicky amerikánský polopatizmus), obhajoba podtržítkového hacku se soustředila na sekci „Vendor-specific extensions“ v CSS 2.1. Podle této části specifikace má být hack gramaticky správný, protože se zde použití podtržítek povoluje v proprietárních specifikacích od normy CSS 2.1 odvozených. Přitom všichni diskutující ponechali bez povšimnutí prostý fakt, že podtržítkový hack není součástí nějaké proprietární definice MSIE, ale pouhou chybou tohoto prohlížeče, čímž je argument obhajoby vyvrácen.

Z výše uvedeného plyne, že takzvaný „podtržítkový hack“ nejen že není validní podle normy CSS 2.1 či jiných, není ani gramaticky správný. Jde o docela obyčejné zneužití chyby prohlížeče.

6. mr.gerisson – 18. června 2006, 15:33

Podtržítkový hack není validní proto, že validátor je verze 2.0. Kdyby byl 2.1 je hack validní.

Váš komentář

K článku nelze připojit komentář, Mraveniště bylo zakonzerováno.


Copyright © Jan Bien.
W3C XHTML 1.0  | W3C CSS 2  | UAW adaptive  | Geo URL  | RDF RSS