Regine Heidorn

CSS –

Grundlagen und Best Practices

ISBN: 978-3-86802-404-3
© 2012 entwickler.press
Ein Imprint der Software & Support Media GmbH

1 Wie wird CSS vom Browser verarbeitet?

Bevor in diesem Shortcut auf die Details eingegangen wird, sollen zur Einführung die wichtigsten Begriffe definiert und die Bearbeitung geladener HTML-/CSS-Dokumente durch den Browser (User Agent) erklärt werden.

Durch die Nutzung der Vorgänge, die im Browser ohnehin stattfinden, wird es möglich, gut wartbare CSS zu erstellen oder vorhandene CSS effizienter zu bearbeiten. Gleiches gilt für die Fehlersuche und Browser-Bugs: Wenn wir verstehen, wie der Browser arbeitet, können wir entscheiden, welche Anweisung ihm hilft, das gewünschte Ergebnis zu liefern. Interessant wird es da, wo das Verhalten von Browsern von den Standards abweicht oder die Empfehlungen des W3C zu ungenau formuliert sind. Das gilt auch für ungeliebte Stiefkinder wie den Internet-Explorer.

CSS-Anweisung

Abbildung 1.1: Bestandteile einer CSS-Anweisung

Eine CSS-Anweisung besteht aus Selektor und Deklaration. Selektoren bezeichnen die HTML-Elemente mit eventuellen ID- und Klassennamen. In der Deklaration wird festgelegt, wie das ausgewählte Element vom Browser dargestellt werden soll. Die Deklaration enthält den Namen einer Eigenschaft und den ihr zugewiesenen Wert.

Schnell kann es passieren, dass einem Element mehrere Eigenschaftswerte zugewiesen werden. Ein Beispiel sich überschreibender Anweisungen sind die im Browser hinterlegten CSS, die durch die im HTML-Dokument mitgelieferten CSS überschrieben werden. Das betrifft unter anderem eine der frühesten Usability-Regeln des Netzes: den unterstrichenen Link in blauer Schriftfarbe (wie er in der Abbildung im Browser-CSS von Opera 10.51 formatiert ist). Sind die Eigenschaftswerte widersprüchlich (im Screendesign sind beispielsweise keine blauen Links vorgesehen), muss der Browser entscheiden, welche Zuweisung letztlich gewinnt.

Browserbearbeitung geladener HTML-/CSS-Dokumente

Gemäß der Spezifikation für CSS2.1 des W3C1 analysiert der Browser zuerst das HTML-Dokument und konstruiert daraus den Dokumentenbaum.2 Danach werden jedem Element Eigenschaftswerte für seine Darstellung zugewiesen.

Abbildung 1.2: Verarbeitung von CSS-Eigenschaftswerten im Browser. In diesem Fall entspricht der errechnete Wert dem angewandten und dem tatsächlichen Wert.

Diese Zuweisung wird in vier Schritten3 ermittelt:

Profitipp: Eigenschaften, die die Darstellung eines Elements ohnehin nicht beeinflussen, sollten gar nicht erst in den CSS notiert werden. Sie können zu Verwirrung im Debugging führen, da ihre Werte möglicherweise unsichtbar an andere Elemente weitergegeben werden oder das Verhalten umgebender Elemente beeinflussen könnten. Außerdem blasen sie den Code unnötig auf. Das betrifft sowohl die Wartbarkeit als auch die Dateigröße.

Profitipp: Das Yahoo-Entwicklerteam hat das Problem des unterschiedlichen Schrift-Renderings in verschiedenen Browsern mit ihrem YUI-2-Framework gelöst. Es definiert Prozentzahlen für Schriftgrößen, die in allen Browsern gleich gerendert werden: http://developer.yahoo.com/yui/fonts/.

Im ersten Schritt wird also über Kaskade, Vererbung und Initialwert (in dieser Reihenfolge) festgelegt, welche Eigenschaften für ein HTML-Element gelten sollen. Diese Eigenschaften werden in den folgenden Schritten in Werte umgerechnet, aus denen das Layout finalisiert wird. Sofern es um Browser-Bugs geht, ist es bereits hilfreich, zu wissen, aus welchem dieser vier Schritte eine unerwartete Darstellung resultiert. Tatsächlich wäre es hilfreich, Browser-Bugs in Zukunft bei einem dieser Schritte beziehungsweise Bestandteile des ersten Schrittes zu verorten, um eine Orientierung in der Analyse des abweichenden Browserverhaltens zu erhalten.

Schauen wir uns nun an, wie Vererbung und Kaskade funktionieren, um verstehen zu können, wie die Festlegung auf gültige Eigenschaften erfolgt. Schließlich ist dieser erste Schritt, die Bestimmung des festgelegten Werts, die eigentliche Arena, in der die Eigenschaften um ihre Vorherrschaft kämpfen.

Der Browser: im Herzen arabisch?

Im letzten Abschnitt wurde erläutert, wie der Browser die Zusammenarbeit zwischen HTML-Dokument und CSS umsetzt. Das Ziel besteht darin, den Elementen des Dokumentenbaums eindeutige Stilanweisungen zuzuordnen, aus denen sich finale Werte errechnen lassen. Was wir noch nicht wissen, ist, wie der Browser eigentlich die CSS ausliest und auf die Elemente abgleicht.

Hier lauert der Teufel im Detail: In Abbildung 1.2 wird deutlich, dass zuerst alle Selektoren und Werte ausgelesen werden, um zu einem eindeutigen errechneten Wert zu kommen. Allerdings steht noch nicht fest, wie der Abgleich zwischen Stilanweisung und Element funktioniert, das so genannte Selector Matching. Diesen Abgleich nimmt der Browser sinistrograd, also ähnlich dem Schriftsystem arabischer oder hebräischer Schriften, von rechts nach links vor.6

Die Logik dahinter besteht darin, zuerst das bezeichnete Schlüsselelement im Selektor auszuwählen. Im zweiten Schritt folgt die Verortung im Dokumentenbaum. Das Schlüsselelement ist das Element, das durch einen Selektor letztlich bezeichnet wird und daher ganz rechts im Selektor steht.

Beispiel: header nav a { text-decoration: none; }: Im Selektor header nav a ist das bezeichnete Schlüsselelement der Linkanker a.

Wie wir im nächsten Kapitel sehen werden, spielen Klassen, IDs und die Länge des Selektors eine entscheidende Rolle, um dem Browser den Abgleich von Selektor und Element zu erleichtern und damit eine bessere Performance der Website insgesamt zu erreichen.

1 http://www.w3.org/TR/CSS2/cascade.html#value-stages, abgerufen 23.3.2011

2 Unter Dokumentenbaum versteht das W3C Folgendes: „Der Baum von Elementen codiert im Ursprungsdokument. Jedes Element in diesem Baum hat genau ein Elternteil mit Ausnahme des root-Elements, das keine Eltern hat.“ (freie Übersetzung des Textes unter http://www.w3.org/TR/CSS2/conform.html#doctree, abgerufen 23.3.2011

3 Bei den deutschen Bezeichnungen handelt es sich um Übersetzungen von der Autorin.

4 em als Maßeinheit der Schriftgröße stammt aus dem Druckverfahren und gibt das Verhältnis von Zeilenbreite und Schriftgröße in Punkt wieder. Für analoge Schriften kann ein Buchstabe nicht größer sein als das Geviert des Metallblocks, mit dem der Buchstabe gedruckt wird. Für digitale Schriften wird dieses Verhältnis durch den Schriftdesigner bestimmt.

5 http://www.w3.org/TR/CSS2/about.html#applies-to, abgerufen 23.3.2011: Es gibt Eigenschaften, die keinen Effekt im Rendering haben, beispielsweise clear, das nur für Blockelemente eine Wirkung in der Darstellung hat.

6 Erläuterungen von David Hyatt: https://developer.mozilla.org/en/writing_efficient_css#How_the_Style_System_Matches_Rules, abgerufen 26.6.2011