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
Paracelsus am 18.12.2008 · 20:15
Oh, its a Toscho!
Wunderbar formuliert und absolute full ACK!
Kompliment und Gruß
andir am 19.12.2008 · 09:11
"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.
T-Rex am 28.06.2011 · 11:00
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 ;).
Thomas Scholz am 28.06.2011 · 13:13
@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.
Thomas Scholz am 01.07.2011 · 10:52
@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.