# CSS – Layout fürs Internet

Wenn man bedenkt, wie viele Fehler die Computer machen, dann kann man sie als die teuersten Trottel der Welt bezeichnen.
Renzo Favalli

CSS ist wohl die interessanteste Entwicklung zur Gestaltung einer Webseite und wird mittlerweile im gleichen Atemzug mit HTML genannt. Die Möglichkeiten sind vielfältig und übersteigen die bescheidenen Gestaltungsmöglichkeiten von HTML bei weitem. Ich werde Ihnen zu Beginn die Grundstrukturen und die Implementation in HTML erklären, sodass Sie schließlich alle wichtigen CSS-Elemente kennen gelernt haben.

# CSS – Make-up fürs Web ...

CSS ist die Abkürzung für »Cascading StyleSheets« und stellt eine Erweiterung zu HTML dar, die vom W3C entwickelt wurde. Ihr Ziel ist es, zu den Wurzeln von HTML zurückzukehren und den Inhalt von der Gestaltung zu trennen. Schließlich ist die eigentliche Aufgabe von HTML, Daten und Inhalte zu strukturieren. Diese Aufgabe kann HTML nur schwerlich erfüllen, wenn es mit font-Elementen überladen wird. An dieser Stelle greift nun CSS ein. Es kümmert sich um die optische Gestaltung der Inhalte, während HTML diese nur kennzeichnet und zur Verfügung stellt.

Die Übersetzung von »Stylesheet« ins Deutsche macht diese Aufgabe sogar noch konkreter: Formatvorlage. Formatvorlagen dürften Ihnen vielleicht aus Programmen wie Microsoft Word bekannt vorkommen. Denn auch dort können Sie Textbausteine als Überschrift oder Absatz kennzeichnen und das Aussehen dieser Elemente durch eine Formatvorlage verändern. In HTML bedeutet das für Sie, nicht jedes einzelne Element durch das font-Element verändern zu müssen, sondern eine Vorlage anzufertigen, die für jedes HTML-Dokument verwendet werden kann. So können Sie einer Überschrift der 2. Ordnung (h2-Element) in jedem Dokument die gleiche Farbe zuweisen und müssen eine Änderung der Farbe nur einmal durchführen. Sie führen also eine logische Formatierung des Inhalts des HTML-Dokuments durch, ähnlich wie mit dem em- oder kbd-Element, ganz wie es dem ursprünglichen Gedanken einer Auszeichnungssprache entspricht, und überlassen die optische Formatierung dann CSS.

# Wie funktioniert CSS?

Bisher haben Sie das Aussehen eines HTML-Elements über das font-Element verändert.

<h2><font color="#0000FF">Blaue &Uuml;berschrift</font></h2>

Diese Angabe mussten Sie aber, um ein einheitliches Aussehen beizubehalten, für jedes h2-Element wiederholen, und eine Änderung der Farbe brächte zwangsläufig eine erneute Änderung aller h2-Elemente mit sich (bzw. der font-Elemente). Dies nennt man direkte Formatierung. Lange HTML-Dokumente, die z. B. sehr viele h2-Elemente enthalten, benötigen – ohne entsprechendes Tool – viel Zeit, damit sie überarbeitet werden können. Mit CSS können Sie nun dokumentweit die Farbe für alle h2-Elemente verändern, und zwar mit der folgenden Angabe:

h2 { color: #0000FF; }

Jedes h2-Element, das Sie nun in Ihrem HTML-Dokument notieren, bekommt die Farbe Blau zugewiesen, selbst dann, wenn Sie kein font-Element notiert haben. Sie definieren das Aussehen eines HTML-Elements an einer Stelle, nehmen also eine zentrale Formatierung vor.

Formatierungen mit CSS sind natürlich nicht auf h2-Elemente beschränkt, sondern können für jedes Element vorgenommen werden. Auch die Art der Formatierung ist nicht nur auf die zentrale Variante festgelegt. Sie können Elemente auch direkt formatieren, wenn Sie das möchten. Im Gegensatz zu HTML stehen Ihnen weitaus mehr Möglichkeiten zur Verfügung. So können Sie beispielsweise jeder Überschrift einen kompletten Rahmen in einer von Ihnen gewählten Farbe, Breite und einem Stil zuweisen.

Von einer direkten Formatierung sollten Sie jedoch Abstand nehmen, da Sie dadurch den eigentlichen Sinn und Nutzen von CSS ad absurdum führen.

# CSS-Versionen

Seit der ersten Veröffentlichung des CSS-Standards 1.0 im Jahre 1996 unterliegt auch CSS einer regelmäßigen Erneuerung und Überarbeitung, sodass 1998 bereits die Version 2.0 als offizieller Standard verabschiedet wurde. Aktuell ist die Version 3.0 in Arbeit, die jedoch noch einige Zeit auf sich warten lassen wird.

Das Hauptproblem ist, ähnlich wie bei HTML, die sehr unterschiedliche Unterstützung durch die Browser, da z. B. Microsoft anfängt, sein eigenes Süppchen zu kochen, und viele CSS-Sprachelemente eingeführt hat, die nur mit dem Internet Explorer funktionieren und die auch nicht als offizieller Standard gelten. Ob Microsoft damit versucht, den Internet Explorer noch stärker auf dem Markt zu verbreiten, ist sicherlich eine Überlegung wert, sollte uns jedoch nicht weiter interessieren. Ob mit den oder ohne die IE-spezifischen Sprachelemente: Ein mit CSS formatiertes HTML-Dokument sieht in jedem Browser und abhängig vom Betriebssystem unterschiedlich aus.

Prinzipiell kann man feststellen, dass der Internet Explorer seit der Version 3.0 und Netscape seit der Version 4.0 den CSS-Sprachstandard kennen und ihn auch bedingt unterstützen, dass vor allem aber Netscape-Benutzer häufig mit Fehlinterpretationen zu kämpfen haben. Der Internet Explorer und Opera ab Version 5 und Netscape ab Version 6 haben sich gegenüber ihren Vorgängern deutlich gebessert und warten mit einer beinahe vollständigen Unterstützung des CSS-Standards 1.0 auf; Defizite bei CSS 2.0 sind aber noch häufig anzutreffen. Es ist deshalb sehr schwer, sich für eine der beiden CSS-Versionen zu entscheiden, und es macht daher Sinn, einen Mittelweg zu wählen.

# Direkte Formatierung

Damit Sie einen schnellen und einfachen Einstieg in CSS bekommen, werde ich Ihnen zuallererst die Direktformatierung eines HTML-Elements erklären. Solche Formatierungen gelten nur für das gewählte Element und haben keinen Einfluss auf die restlichen Elemente.

HTML stellt dafür das Attribut style zur Verfügung, das für fast jedes HTML-Element verwendet werden kann. Wie alle HTML-Attribute wird auch dieses im Start-Tag des Elements notiert.

<element ... style="formatierung">...</element>

Als Parameter für das style-Attribut werden nun die unterschiedlichen Formatierungen notiert. Auch dafür gibt es eine standardisierte Schreibweise. Zuerst wird die CSS-Eigenschaft notiert, gefolgt von einem Doppelpunkt »:« und anschließend dem entsprechenden Wert.

Eigenschaft:Wert

In einem HTML-Dokument könnte dies dann folgendermaßen aussehen:

<h2 style="color:#00FF00">&Uuml;berschrift in blau</h2>

Möchten Sie mehrere Eigenschaften ändern, müssen Sie die Angaben durch ein Semikolon »;« voneinander trennen.

Eigenschaft1:Wert1; Eigenschaft2:Wert2; EigenschaftN:WertN

In einem HTML-Dokument könnte dies dann folgendermaßen aussehen:

<h2 style="color:black; background-color:yellow">Text</h2>

Versuchen Sie, die Eigenschaft, den Doppelpunkt und den Wert immer direkt hintereinander ohne Leerzeichen zu notieren. Zwar sind Leerzeichen erlaubt, ältere Netscape-Versionen haben damit jedoch Probleme, was dazu führen kann, dass eine solche Angabe wie

Eigenschaft: Wert

einfach ignoriert wird. Und dies ist sicherlich nicht in Ihrem Interesse.

# Das erste Stylesheet

Übertragen Sie das folgende Listing 1.1 in Ihren Editor, und speichern Sie die Datei als HTML-Dokument ab.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Das erste StyleSheet //-->
<html>
  <head>
    <title>Listing 1.1</title>
  </head>
  <body>
    <h1 style="color:#0000FF">Eine blaue &Uuml;berschrift der 1. Ordnung</h1>
    <h1 style="font-family:sans-serif">Eine &Uuml;berschrift der 1. Ordnung mit einer serifenlosen Schrift</h1>
    <h1 style="font-size:16px">Eine &Uuml;berschrift der 1. Ordnung mit einer 16 Pixel gro&szlig;en Schrift</h1>
  </body>
</html>

Listing 1.1: Das erste Stylesheet

Darstellung des Listing 1.1 im Internet Explorer 6.0 Abbildung 1.1: Darstellung des Listing 5.1 im Internet Explorer 6.0

In diesem ersten Beispiel wurden drei h1-Elemente mit unterschiedlichen Formaten definiert. Dem ersten h1-Element wurde mit der Anweisung color:#0000FF eine andere Farbe zugewiesen, dem zweiten wurde mit der Anweisung font-family:sans-serif eine andere Schriftart zugeteilt, und dem letzten Element wurde durch die Anweisung font-size:16px eine Schrifthöhe von 16 Pixel zugewiesen.

Wie Sie sehen, ist die Formatierung mit CSS sehr einfach. An diesem Beispiel können Sie jedoch schon den Nachteil der Direktformatierung erkennen. Wenn Sie nur eine Eigenschaft des Elements verändern, wirkt der Quelltext des Dokuments noch sehr sauber und aufgeräumt. Sobald es aber mehr werden, kann es schnell unübersichtlich werden.

# Zentrale Formatierung

Eingangs erwähnte ich bereits, dass sich HTML-Elemente zentral formatieren lassen und dass dies eine der großen Stärken von CSS ist. Dafür benötigen Sie allerdings ein neues Element: das style-Element. Damit ist es jedoch nicht getan. Bei der direkten Formatierung müssen Sie nicht explizit angeben, für welches Element diese Formatierung angewendet werden soll, da Sie dies ja schon festlegen, wenn Sie das style-Attribut im entsprechenden Element notieren. Bei der zentralen Formatierung müssen Sie zuerst den Selektor angeben. Der Selektor basiert auf dem zu formatierenden Element, genauer gesagt entspricht der Selektor dem Namen des Elements. Für das h1-Element lautet der Selektor also h1, für das p-Element p.

Die bereits bekannte Syntax aus der direkten Formatierung wird nun also um den Selektor erweitert. Der Selektor wird zuerst notiert. Danach folgen die CSS-Eigenschaften und die entsprechenden Werte. Diese werden in geschweiften Klammern »{« und »}« angeführt, woraus sich dann die folgende Syntaxstruktur ergibt:

Selektor { Eigenschaft:Wert }

Ein Beispiel:

h2 { color:#0000FF; }

Es wäre allerdings ein wenig umständlich, für jede Eigenschaft eines HTML-Elements, das Sie formatieren möchten, immer wieder aufs Neue den Selektor, die Eigenschaft und den Wert zu notieren. Deshalb ist es auch hier möglich, die einzelnen Eigenschaften und Werte durch ein Semikolon zu trennen.

Selektor { Eigenschaft1:Wert1;  
           Eigenschaft2:Wert2;  
           EigenschaftN:WertN; }

Beispiel:

h2 { color:#0000FF;  
     font-family:sans-serif;  
     font-size:16px; }

Damit haben Sie nun gesehen, wie Sie die CSS-Eigenschaften und Werte notieren und den jeweiligen Elementen zuordnen können. Fehlt nur noch die Implementierung in HTML. Das style-Element wird im Gültigkeitsbereich des head-Elements notiert und enthält in seinem Gültigkeitsbereich wiederum die Formatierungen. Außerdem sollten Sie den MIME-Typ angeben, der für CSS text/css lautet und als Parameter für das Attribut type notiert wird.

<head>  
  ...
  <style type="text/css">  
    h1 { color:#0000FF;  
         font-family:sans-serif;  
         font-size:16px; }
  </style>  
  ...  
</head>

In diesem Beispiel würden Sie jedem im HTML-Dokument verwendeten h1-Element die Farbe Blau (#0000FF), den Schrifttyp sans-serif und eine Schriftgröße von 16 Pixel zuweisen. Browser, die kein CSS unterstützen, könnten mit einer solchen Angabe jedoch Probleme haben, die CSS-Formatierungen fälschlicherweise als Text interpretieren und dann entsprechend im Browser ausgeben. Um dies zu verhindern, werden die Formatierungen als Kommentar notiert. Browser, die kein CSS unterstützen, ignorieren die Angaben vollständig. Browser, die CSS unterstützen, interpretieren diese Angaben korrekt und ignorieren dann einfach den Kommentar.

<head>  
  ...  
  <style type="text/css">  
  <!--  
    h1 { color:#0000FF;  
         font-family:sans-serif;  
         font-size:16px; }  
  //-->  
  </style>  
  ...  
</head>

Natürlich können Sie CSS-Formatierungen für mehrere Elemente innerhalb des style-Elements notieren. Die einzelnen Konstrukte werden dann hintereinander bzw. untereinander notiert.

<style type="text/css">  
  <!--  
    Selektor1 { Eigenschaft1:Wert1;  
                Eigenschaft2:Wert2;  
                EigenschaftN:WertN; }  
    Selektor2 { Eigenschaft1:Wert1;  
                Eigenschaft2:Wert2;  
                EigenschaftN:WertN; }  
    SelektorN { Eigenschaft1:Wert1;  
                Eigenschaft2:Wert2;  
                EigenschaftN:WertN; }  
  //-->  
</style>

Sehen Sie sich dazu einfach ein vollständiges Beispiel an. Wenn Sie sich die Arbeit sparen möchten, das Listing abzutippen, finden Sie es auf der beiliegenden CD‑ROM im Verzeichnis x:\listings\css\list1.2.htm. Ich möchte Sie aber darauf hinweisen, dass selbst das sture Abtippen eines Listings bereits übt. Und Übung macht ja bekanntlich den Meister.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Zentrale Element-Formatierung //-->
<html>
  <head>
    <title>Listing 1.2</title>
    <style type="text/css">
      <!--
        h1 { color:#336699;
             font-family:sans-serif; }
        p  { font-size:14px;
             font-family:sans-serif; }
      //-->
    </style>
  </head>
  <body>
    <h1>Zentrale Formatierung</h1>
    <p>Die Elemente die in diesem HTML-Dokument verwendet werden, wurden durch CSS zentral formatiert.</p>
    <p>Dies kann besonders viel Arbeit sparen, wenn man dabei geschickt vorgeht.</p>
  </body>
</html>

Listing 1.2: Beispiel für die zentrale Element-Formatierung

In Listing 1.2 werden zentral zwei verschiedene Elemente formatiert: zum einen das p-Element und zum anderen das h1-Element. Beide Elemente bekommen ihre eigenen Eigenschaften zugewiesen. So werden alle Elemente des Typs h1 in der Farbe #336699 und in einer serifenlosen Schrift dargestellt. Auch die p-Elemente erhalten eine serifenlose Schrift. Nur die Farbe ist eine andere, und zwar #000000.

Darstellung des Listing 1.2 im Internet Explorer 6.0 Abbildung 1.2: Darstellung des Listing 1.2 im Internet Explorer 6.0

# Externe Formatierung

Je mehr HTML-Elemente Sie formatieren, umso länger werden die CSS-Angaben. Wenn Sie außerdem die CSS-Formatierungen in mehreren HTML-Dokumenten verwenden möchten, ist es sinnvoll, diese in eine externe Datei auszulagern. Das Auslagern der Formatierungen kann man auch als eine externe Formatierung bezeichnen. Als Dateiendung hat sich für Cascading StyleSheets .css durchgesetzt.

Der Aufbau einer solchen Datei ist einfach. Exakt so, wie Sie die Formatierungen im style-Element notieren würden, werden sie auch in einer externen Datei als reiner Text gespeichert (natürlich ohne style- und Kommentar-Tags).

Um nun diese Datei in einem HTML-Dokument als Vorlage verwenden zu können, müssen Sie das link-Element einsetzen (dt. Verweis). Dieses Element wird ebenfalls im Gültigkeitsbereich des head-Elements notiert.

<head>  
  ...  
  <link rel="stylesheet" type="text/css" href="beispiel.css">
  ...  
</head>

Die Angaben rel="stylesheet" und type="text/css" weisen die einzubindende Datei als Stylesheet des Typs css aus (rel = engl. relation, dt. Bezug). Im Attribut href (engl. hyper reference, dt. Hyperreferenz) geben Sie dann die entsprechende CSS-Datei an. Dabei gelten die gleichen Regeln wie bei der Angabe eines Verweiszieles im a-Element bezüglich der Verzeichnisse. Sie müssen also absolute und relative Pfadangaben unterscheiden und natürlich auch berücksichtigen, wo die CSS-Datei, von der einbindenden HTML-Datei aus gesehen, liegt.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Externe Element-Formatierung //-->
<html>
  <head>
    <title>Listing 1.3</title>
    <link rel="stylesheet" type="text/css" href="list1.3.css">
  </head>
  <body>
    <h1>Externe Formatierung</h1>
    <p>Die Elemente die in diesem HTML-Dokument verwendet werden, wurden durch CSS zentral formatiert.</p>
    <p>Diese Formatierungen wurden aber in einer externen Datei gespeichert, um sie auch in anderen HTML-Dokumenten verwenden zu k&ouml;nnen.</p>
  </body>
</html>

Listing 1.3: Beispiel für eine externe Formatierung

Darstellung des Listing 1.3 im Internet Explorer 6.0 Abbildung 1.3: Darstellung des Listing 1.3 im Internet Explorer 6.0

Die Datei list1.3.css, die in Listing 1.3 als CSS-Stylesheet referenziert wurde, sieht wie folgt aus:

h1 { color:#996633;  
     font-size:30px; }  
p  { font-size:14px;  
     font-family:sans-serif; }

Auch in diesem Beispiel werden wieder nur die Elemente p und h1 formatiert. Das Element h1 erhält die Farbe #996633 und die Schriftgröße 30 Pixel. Das p-Element erhält hingegen die Schriftgröße 14 Pixel und eine serifenlose Schrift.

# Ausgabemedien

Ein weiterer interessanter Aspekt in CSS ist die Möglichkeit, verschiedene Stylesheets für unterschiedliche Ausgabemedien zu definieren. So ist beispielsweise ein Bildschirm ein ganz anderes Ausgabemedium als ein Drucker, insbesondere in Anbetracht der Darstellungsform. Die Darstellung auf einem Monitor ist im Querformat, während die Ausgabe auf einem Drucker in der Regel im Hochformat erfolgt.

Leider ist Netscape nicht einmal in der Version 6 in der Lage, Stylesheets für unterschiedliche Ausgabemedien zu verwenden. Zwar erkennt er das richtige Stylesheet für die Bildschirmausgabe, ignoriert aber konsequent alle anderen. Anders der Internet Explorer: Dieser ist bereits seit der Version 4 in der Lage, das passende Stylesheet für das entsprechende Medium zu verwenden.

Um verschiedene Stylesheets für unterschiedliche Ausgabemedien verwenden zu können, benötigen Sie erstens eine CSS-Datei und zweitens das Attribut media (dt. Medium), das Sie im link-Start-Tag notieren.

Folgende Angaben für das media-Attribut sind erlaubt:

Parameter Beschreibung
screen Bildschirmausgabe
all Alle Ausgabemedien
aural Sprachausgabe
braille Braille-Displays (Monitor für Blindenschrift)
embossed Braille-Drucker (Drucker für Blindenschrift)
handheld Ausgabe auf tragbaren Kleinstcomputern wie Handhelds, PDAs etc.
print Druckerausgabe
projection Beamer-Ausgabe und Ähnliche
tty Fernschreiber und Ähnliche (tty = engl. teletyper)
tv Ausgabe auf Fernsehgeräten und Ähnlichen

Tabelle 1.1: Schlüsselwörter für die verschiedenen Ausgabemedien

Eine Angabe für die Ausgabemedien Bildschirm oder Drucker könnte dann wie folgt lauten:

<link rel="stylesheet" type="text/css" media="screen" href="screen.css">  
<link rel="stylesheet" type="text/css" media="print, embossed" href="print.css">

Die vorherigen Angaben sind HTML-Syntax, für CSS gibt es entsprechend eine eigene Notation:

@import url(screen.css) screen;
@import url(print.css) print, embossed;

# Einheiten

Anders als HTML kennt CSS die unterschiedlichsten Einheiten, um eine Wertangabe zu machen. Während Sie sich bei HTML auf Prozent- und Pixelangaben beschränken müssen bzw. auf die Angabe einer relativen Schriftgröße, kennt CSS Angaben in Zentimetern, Zoll, Prozent, Pixel etc.

Wertangaben in CSS erfolgen durch die Angabe des Werts, gefolgt von der gewünschten Maßeinheit.

Einheit Typ Beschreibung
cm absolut Zentimeterangabe (1/100 m)
em relativ Relative Angabe in Bezug auf den höchsten Buchstaben im Elternelement
ex relativ Relative Angabe in Bezug auf den niedrigsten Buchstaben im Elternelement
in absolut Zollangabe (engl. inch) = 2,54 cm
mm absolut Millimeterangabe (1/1000 m)
pc absolut Pica (1 Pica = 12 Punkt)
pt absolut Punkt (1 Punkt = 1/72 in)
px absolut Pixelangabe
% relativ Prozentangabe

Tabelle 1.2: Maßeinheiten in CSS

Ein paar Beispiele:

1cm  
1pt  
6pc  
16px  
10%

Als Dezimaltrennzeichen wird nicht das Komma, sondern der Punkt verwendet, da CSS auf der englischen Sprache und den entsprechenden Regeln basiert.

1.2em  
0.8ex  
1.5in  
2.54cm  
6.5pt

Wie Sie sehen, können Sie in CSS die verschiedensten Angaben zu Maßen machen. Es sollte aber erwähnt werden, dass Angaben wie em und ex sehr selten verwendet werden und Sie bei Maßen auch immer darauf achten sollten, dass der Benutzer den Text auch lesen kann.

# Zusammenfassung

  • Für die Direktformatierung eines HTML-Elements wird das Attribut style verwendet, das im Start-Tag des Elements notiert wird.
  • Für die zentrale bzw. externe Formatierung von HTML-Elementen wird das Element style verwendet, das im Gültigkeitsbereich des head-Elements notiert wird.
  • CSS-Dateien sollten über die Endung .css verfügen.
  • Für unterschiedliche Ausgabemedien können verschiedene Stylesheets definiert werden. Jedoch unterstützt nur der IE diese in vollem Umfang.
  • Maße können in CSS in cm, mm, px, pt, in, pc, em, ex und in Prozent angegeben werden.

# Fragen und Übungen

  1. Wie lautet die Syntax für die Direktformatierung eines HTML-Elements?
  2. Wie lautet die Syntax für die zentrale Formatierung von HTML-Elementen?
  3. Mit welchem Symbol werden mehrere Angaben von Eigenschaften und Werten getrennt?
  4. Was sollten Sie bei der zentralen Formatierung notieren, damit Browser, die kein CSS unterstützen, die Angaben nicht fälschlicherweise als Text interpretieren und diesen ausgeben?