Warum man CSS nicht validieren kann
18.12.2008 in: CSS, Sprache und Webdesign ⢠6 Kommentare
Letzte Ãnderung: 25.01.2009, 16:18 Uhr.
Eins vorab: Der CSS-Validator ist ein äuÃerst nützliches und wichtiges Werkzeug, mit dem wir Stylesheets auf Fehler prüfen können. Die Leute, die ihre Freizeit opfern, um uns diesen Dienst kostenlos zur Verfügung zu stellen, verdienen Dank und Respekt.
Aber er ist kein Validator. Er heiÃt nur so.
Warum? Was heiÃt »validieren« überhaupt?
Der Ausdruck »valid« stammt vom lateinischen validus, was »gesund« oder »kräftig« bedeutet. Im technischen Sinne kommt er aus dem SGML- und XML-Kontext: Da meint er die Konformität zu formalen Regeln. Ein Validator ist also ein Werkzeug, das einen Datenstrom daraufhin überprüft, ob er einem bestimmten Satz formaler Regeln entspricht, ob der Autor sich also an den Vertrag â die Spezifikation â gehalten hat.
In HTML ist dieses formale Regelwerk in der DTD gegeben, der Document Type Definition. In XML-Derivaten wie XHTML kann das auch ein Schema sein; Christoph Schneegansâ Schema-Validator arbeitet beispielsweise damit.
Nach welchem Regelwerk wird nun ein Stylesheet überprüft? CSS 2.0 sagt ebenso wie 2.1
A valid CSS2 style sheet must be written according to the grammar of CSS2. 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.
Zu deutsch: Ein Stylesheet muà der Grammatik entsprechen, es darf nur At-Regeln, Eigenschaften und Werte enthalten, die in dieser Spezifikation genannt werden.
Demnach ist dieses Stylesheet »valid«:
* { font-size: blue; }
Offensichtlich fehlt in der oben zitierten Definition ein entscheidendes Detail: Die Werte müssen zu den Eigenschaften passen.
Der Checker des W3C ergänzt den fehlenden Satz stillschweigend. Das entspricht zwar nicht mehr der Vorgabe der Spezifikation â aber es gibt keine Alternative. Ãberginge der Checker solche Konstrukte, so wäre er wertlos.
Akzeptieren wir also, daà der Checker eine engere und vernünftigere Definition für »valid« benutzt als die Spezifikation. Und nehmen wir weiterhin an, daà er dafür eine formalisierte Referenz benutzt, die über die Grammatik hinausgeht und aus den Definitionen der einzelnen Eigenschaften und Werte gespeist wird.
Zu font-size heiÃt es beispielsweise:
Value: <absolute-size> | <relative-size> | <length> | <percentage> | inherit
Das ist schon eine formale Bestimmung. Die gibt es zu jeder Eigenschaft und jedem Wert. Wenn man sie alle in ein einziges Dokument packt, hat man eine formale Referenz. Prima.
Allerdings muà dieser Schritt über die reine Grammatik hinaus konsequent vollzogen werden, um glaubwürdig zu sein. Man kann die Beziehungen zwischen Eigenschaften und Werten ja nicht nur deshalb zusätzlich aufnehmen, weil sie leicht umzusetzen sind.
Die Spezifikation enthält noch mehr Beziehungen dieser Art, die dann ebenfalls geprüft werden müssen: Welche Eigenschaften und Werte in welchen Medien erlaubt sind etwa, oder daà eine Float-Box in CSS 2 immer eine explizite Breite haben muÃ. Dafür existieren aber nicht immer formalisierbare Referenzen. Und im letztgenannten Fall ist aus dem Stylesheet alleine nicht einmal ersichtlich, ob die Bedingung überhaupt erfüllt wird:
.a { width: 20px; } .b { float: left; }
Haben jetzt alle flieÃenden Boxen eine explizite Breite?
Wenn die Menge der geprüften formalen Anforderungen gröÃer ist als die Vorgabe der Spezifikation und kleiner als »vollständig«, dann kann man diesen Prozeà nicht mehr »validieren« nennen.
Was heiÃt das in der Praxis? Wir müssen uns bewuÃt sein, daà ein »Valides Stylesheet«, wie es der W3C-Dienst nennt, eigentlich nicht existieren kann. Das Gütesiegel bedeutet nur: Wir haben keine groben syntaktischen Fehler gemacht. Dennoch kann unser Stylesheet Fehler enthalten oder Probleme verursachen, die kein automatisches Werkzeug findet.
Wir müssen in kritischer Distanz bleiben â zu allem, was wir schaffen, benutzen oder zu wissen glauben. Wer ob der Anerkennung des CSS-Checkers das Denken einstellt, der hat sie nicht verdient.
Zu diesem Artikel wurde ich durch eine kleine Diskussion im XHTML-Forum angeregt.
Lektüre zum Thema
- Jukka Korpela: âHTML validationâ is a good tool, but just a tool
- W3C CSS Validator FAQ
- Offene Bugs des CSS-Validators
Oh, its a Toscho!
Wunderbar formuliert und absolute full ACK!
Kompliment und GruÃ
"Die SchriftgröÃe ist blau" ist grammatikalisch korrekt, aber in der Regel Unsinn. Aber auch wenn man den zulässigen Werten der Spezifikation folgte und, wie Du richtig sagst, eine stillschweigende Ãberprüfung vornimmt, mag eine Auszeichnung wie: "Die SchriftgröÃe ist 1%" in der Praxis zu völlig untauglichen Ergebnissen führen.
Schön dargestellt. Deinem Schluà stimme ich zu.
Deine Beiträge sind eigentlich super. Den Beitrag finde ich aber ehrlich gesagt kleinlich. Das kein Validator der Welt bestimmen kann ob die Webseite gut oder schlecht aussieht ist doch klar. Und das kein Validator Kaffee kochen kann auch. Dafür gibt es Informatiker und Kaffeemaschinen ;).
@T-Rex: In diesem Text prüfe ich nur, ob der Ausdruck »Validator« das Werkzeug korrekt beschreibt. Alles darüber hinaus ist mir schnuppe.
T-Rex am 01.07.2011 · 10:39
Und das ist das Problem (um mal abschweifen zu dürfen). Menschen wie du (also intelligente Menschen) sollten sich über wichtigere Dinge den Kopf zerbrechen als über einen Namen. In meiner Berufschulklasse war es ähnlich. Da wurde in manchen Unterrichtsstunden 30 min über eine Wortherkunft diskutiert. Am Ende waren alle einstimmig der Meinung das die Wortherkunft quatsch wäre. Sinnvoll ist was anderes.
@T-Rex: Wenn Menschen miteinander reden, dann brauchen sie gemeinsame Begriffe. Sie müssen sich auf die Bedeutung zumindest der relevanten Ausdrücke einigen. Als ich den Artikel geschrieben habe, hat mich CSS noch sehr interessiert, und »valides CSS« war eine Forderung, die ich in meinen Gesprächen zu oft lesen muÃte.