CSS anwenden

Werbung
165.book Page 329 Wednesday, July 24, 2002 10:20 AM
CSS anwenden
CSS – Die Basis
Wertangaben
Selektoren
Pseudo-Klassen
Pseudo-Elemente
At-Regeln
Die Kaskadierungsfolge
E
CSS – Die Basis
Das World Wide Web Consortium (W3C, www.w3c.org) setzt bei HTML 4.0 auf
eine möglichst strikte Trennung von Inhalt und Gestaltung der Webseiten. Mit
anderen Worten: Die HTML-Datei soll nur die Texte und Bildverweise sowie die
Struktur (Überschriften, Absätze, Listen etc.) des Dokuments enthalten. Direkte
Formatieranweisungen über Attribute wie color (engl. Farbe) oder align (engl.
ausrichten) sollen wegfallen. Deshalb sind die entsprechenden Attribute und
auch einige Tags in HTML als deprecated (engl. missbilligen) gekennzeichnet.
Diese Schlüsselwörter sollen Webdesigner nicht mehr verwenden, obwohl die
Browser sie weiterhin unterstützen. Das ist unumgänglich, denn Abermillionen
von alten Webseiten wären sonst nicht mehr kompatibel.
Wie der Browser Inhalte darstellt, zum Beispiel Überschriften 1. Ordnung mit 16
Punkt großer Schrift soll getrennt von HTML festgelegt werden. Dafür entwarf das
W3C eine eigene Sprache, die Cascading Stylesheets oder kurz CSS. Die Recommendation zu CSS Level 1 oder kurz CSS1 wurde im Dezember 1996 veröffentlicht, CSS Level 2 folgt in etwa zeitgleich mit HTML 4.0 im Mai 1998. Weitere
Informationen finden Sie in Kapitel 1 im Abschnitt »CSS: Cascading Stylesheets«.
CSS ist als unabhängige Formatierungssprache gedacht, die nicht auf die Unterstützung von HTML beschränkt ist. Prinzipiell lässt sie sich auch für die Formatierung von XML-Dokumenten einsetzen. Allerdings hat sich hier in der Praxis die
spezielle Formatiersprache XSL (Extensible Stylesheet Language) durchgesetzt.
Deshalb konzentriert sich das folgende Kapitel auf die Zusammenarbeit mit
HTML und XHTML.
329
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
CSS – Cascading Stylesheet
329
338
343
348
351
352
355
165.book Page 330 Wednesday, July 24, 2002 10:20 AM
Grundlegende Syntax
Die Syntax von CSS ist sehr praxisnah. Ein CSS-Befehl muss zwei Dinge festlegen:
b Was soll formatiert werden: Selektor
b Wie soll formatiert werden: Deklaration
Der Selektor legt fest, welche Elemente einer Webseite der CSS-Befehl betrifft.
Die Deklaration bestimmt, wie die betroffenen Elemente formatiert werden. Im
einfachsten Fall sieht das so aus:
Selektor {Eigenschaft: Wert;}
Die Kombination aus Selektor und Deklaration wird CSS-Regel genannt. Der
Selektor leitet die CSS-Regel ein. Es gibt eine Vielzahl von Selektoren, mit denen
sich ganz einfache oder auch sehr komplexe Anweisungen formulieren lassen.
Weitere Details dazu lesen Sie im Abschnitt »Selektoren« in diesem Kapitel.
Darauf folgen die Deklarationen, die in geschweifte Klammern eingefasst sind.
Die geschweiften Klammern markieren einen Deklarationsblock, der beliebig
viele einzelne Deklarationen enthalten kann. Jede Deklaration besteht aus einem
Wertepaar Eigenschaft und Eigenschaftswert. Die Eigenschaft ist der Aspekt in
der Darstellung eines Elements, den Sie verändern wollen. Die Eigenschaft
schließt ein Doppelpunkt ab, darauf folgt der Wert. Ein Strichpunkt schließt die
Deklaration ab, wenn Sie mehrere Deklarationen notieren ist der Strichpunkt
Pflicht. Steht nur eine Deklaration in den geschweiften Klammern, dann können
Sie den Strichpunkt vor der schließenden Klammer auch weglassen. Eine Übersicht aller Eigenschaften finden Sie thematisch sortiert in Kapitel 14.
Doppelpunkt (:) und Gleichheitszeichen (=)
TIPP
HTML-Attribute und CSS-Deklarationen weichen in einem entscheidenden
Detail voneinander ab: Bei HTML trennen Sie Attribut und Wert mit einem
Gleichheitszeichen, bei CSS Eigenschaft und Wert mit einem Doppelpunkt:
size="25"
color: red;
Wer viel HTML-Quelltext tippt läuft schnell Gefahr, auch bei CSS ein Gleichheitszeichen einzuschmuggeln. Laut CSS-Standard ist eine Deklaration wie
color=red;
aber ungültig und der Browser ignoriert sie. Es kann bei der Fehlersuche recht
lange dauern, solche Vertipper auszumerzen. Aber es kommt noch schlimmer:
Der Internet Explorer gibt sich nämlich besonders tolerant und akzeptiert auch
das Gleichheitszeichen (=) und führt die CSS-Deklaration aus. Andere Browser
wie Netscape oder Opera sind dagegen pingelig und ignorieren die Angabe. Verfallen Sie dann nicht auf die Idee, einen CSS-Fehler in Netscape oder Opera zu
vermuten (obwohl es davon nicht wenige gibt). Prüfen Sie zunächst, ob überall
Doppelpunkte eingetragen sind.
330
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 331 Wednesday, July 24, 2002 10:20 AM
Groß- und Kleinschreibung spielt bei CSS keine Rolle. Sowohl die Eigenschaften
als auch die Eigenschaftswerte können Sie beliebig schreiben. Anders sieht es nur
aus, wenn Sie als Wert eine Zeichenkette in Anführungszeichen angeben. Innerhalb der Anführungszeichen zählt die Groß-/Kleinschreibung sehr wohl. Weitere
Details dazu lesen Sie im Abschnitt »Wertangaben« in diesem Kapitel.
Das folgende konkrete Beispiel lässt Überschriften 1. Ordnung (<h1>...</h1>) in
roter Schrift erscheinen:
h1 {color: red;}
h1 ist das HTML-Tag, für das die Deklaration gilt. Es handelt sich im Beispiel um
einen Typselektor, der sämtliche <h1>-Tags im HTML-Dokument betrifft (siehe den
Abschnitt »Typselektor« in diesem Kapitel). Sie müssen die CSS-Angabe also
nur einmal machen, um sämtliche Überschriften 1. Ordnung zu formatieren.
Andere Überschriften (<h2>, <h3> etc.) sind davon nicht betroffen. In HTML müssten Sie bei jeder einzelnen Überschrift zusätzlich das Tag <font> einfügen:
<h1><font color="red">Überschrift</font></h1>
Mehrere Selektoren
In der Praxis kommt es häufig vor, dass identische CSS-Deklarationen auf verschiedene Tags (genauer Selektoren) anzuwenden sind. Denken Sie beispielsweise an Überschriften, die Sie mit einer anderen Schriftart als den normalen Text
formatieren wollen. Dabei handelt es sich um mehrere Tags von <h1> bis <h6>. Statt
nun für jedes Tag eine eigene CSS-Regel aufzustellen, notieren Sie einfach alle
Selektoren durch Kommata getrennt:
h1, h2, h3, h4, h5, h6 {font-family: sans-serif}
Diese Schreibweise hat die gleich Wirkung wie sechs einzelne Regeln:
h1
h2
h3
h4
h5
h6
{font-family:
{font-family:
{font-family:
{font-family:
{font-family:
{font-family:
sans-serif}
sans-serif}
sans-serif}
sans-serif}
sans-serif}
sans-serif}
Kommentare einfügen
Wie bei HTML und auch Programmiersprachen macht es Sinn, in Stylesheets
Kommentare anzubringen. So fällt es später leichter Änderungen vorzunehmen.
Ein Kommentar beginnt mit den Zeichen /* und endet mit */.
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
331
E
CSS – Cascading Stylesheet
Das alleine würde den Einsatz von Stylesheets bereits mehr als rechtfertigen, denken Sie nur an eine nachträgliche Änderung der Farbe in einem ganzen Projekt.
Natürlich ist es nicht immer sinnvoll, sämtliche Überschriften in einem Dokument zu formatieren. Über den Selektor schränken Sie den Wirkungsbereich einer
Deklaration ein.
165.book Page 332 Wednesday, July 24, 2002 10:20 AM
p{
color: blue;
text-align: justify;
}
/* Schrift blau */
/* Blocksatz
*/
Die Kommentare dürfen überall im Stylesheet notiert werden, also sowohl innerhalb von Blöcken als auch dazwischen. Die einzigen Ausnahmen sind wieder Zeichenketten in Anführungszeichen, hier gilt der Kommentar als Teil der Zeichenkette.
CSS in HTML einbinden
Wie Sie eine CSS-Regel definieren ist jetzt im Prinzip klar. Aber wie und wo binden Sie die Regel in ein HTML-Dokument ein? HTML 4.0 und 3.2 sehen mehrere
Wege dafür vor, die alle ihre besonderen Vor- und Nachteile haben.
b Inline-Stylesheet im HTML-Tag
b Stylesheet-Bereich im Kopf des HTML-Dokuments
b Externe Stylesheet-Datei
Eine ausführliche Diskussion der Tags, Attribute und der Kompatibilität der
Browser finden Sie in Kapitel 11 im Abschnitt »Stylesheet-Bereiche«. Die folgenden Abschnitte fassen das Wesentliche zusammen.
Inline-Stylesheet
Ein Inline-Stylesheet notieren Sie direkt in einem HTML-Tag mit dem Attribut
style. In diesem Fall müssen Sie keinen Selektor angeben, denn die Deklaration
bezieht sich automatisch auf dieses Tag.
<h1 style="color: red; font-size: 16pt">Überschrift</h1>
Das Attribut style gehört zu HTML 4.0, wird aber auch von älteren Browsern
problemlos unterstützt. Das Beispiel setzt mit zwei Deklarationen die Schriftfarbe
auf rot (color: red) und die Schriftgröße auf 16 Punkt (font-size: 16pt). Diese
Deklarationen gelten nur für dieses eine <h1>-Tag, andere Überschriften im Dokument bleiben davon unberührt. Sie dürfen als Attributwert sämtliche Eigenschaften notieren, die auch in einer CSS-Regel erlaubt sind.
Es liegt auf der Hand, dass Sie mit Inline-Stylesheets wichtige Vorteile von CSS
aus der Hand geben: Die Formatierung ist wieder eng mit einzelnen HTML-Tags
verbunden. Bei einer Änderung müssen Sie im gesamten Quelltext die CSSDeklarationen aufspüren und anpassen. Zudem verbauen Sie sich die Option,
CSS-Deklarationen in mehreren Dokumenten zu nutzen.
Stylesheet-Bereich
Ein Stylesheet-Bereich wird im Kopf einer HTML-Datei irgendwo zwischen <head>
und </head> notiert. Der Bereich beginnt mit dem HTML-Tag <style> und endet
mit </style>. Dieses Tag wurde bereits mit HTML 3.2 eingeführt und ist deshalb
auch älteren Browsern bekannt.
332
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 333 Wednesday, July 24, 2002 10:20 AM
<head>
<style type="text/css">
h1 {color: red; font-size: 16pt;}
</style>
</head>
Im einleitenden Tag zeigt das Attribut type="text/css" an, dass der Bereich CSSRegeln enthält. Ohne dieses Attribut weiß der Browser nicht was folgt und ignoriert unter Umständen die CSS-Regeln. Das macht Sinn, weil es durchaus andere
Stylesheet-Sprachen gibt, die allerdings in der Praxis so gut wie nie zum Einsatz
kommen. Schließlich unterstützen alle großen Browser nur CSS.
Innerhalb des Stylesheet-Bereichs notieren Sie die CSS-Regeln nach der oben
vorgestellten Syntax. Beachten Sie, dass innerhalb des Stylesheet-Bereichs nicht
die bei HTML üblichen Regeln zum Beispiel für Kommentare gelten. Der Browser
behandelt den Stylesheet-Bereich intern völlig anders.
Beachten Sie, dass Sie im Dateikopf beliebig viele Stylesheet-Bereiche notieren
dürfen. Das macht zum Beispiel Sinn, wenn Sie CSS-Regeln nur in bestimmten
Dokumenten verwenden wollen, andere CSS-Regeln dagegen in allen Dokumenten.
<head>
<style type="text/css">
<!-h1 {color: red; font-size: 16pt;}
-->
</style>
</head>
Externe Stylesheet-Datei
Die Stylesheets müssen nicht im HTML-Dokument notiert sein. Seit HTML 3.2
können die Browser auch CSS-Regeln aus einer separaten Datei einlesen und auf
das HTML-Dokument anwenden. In der Stylesheet-Datei notieren Sie nur die
CSS-Regeln. Die Dateierweiterung dafür ist typischerweise css, eine CSS-Datei
könnte format.css heißen. Der Inhalt könnte zum Beispiel so aussehen:
h1 {color: red; font-size: 16pt;}
p {color: blue; font-size: 11pt;}
Im Dateikopf der HTML-Datei notieren Sie dann folgendes Tag:
<head>
<link href="format.css" rel="stylesheet" type="text/css">
</head>
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
333
E
CSS – Cascading Stylesheet
Um kompatibel zu uralten Browsern zu bleiben, die kein CSS unterstützen, werden bisweilen die CSS-Regeln als HTML-Kommentar versteckt. In der Praxis
macht das heute kaum noch Sinn, praktisch jeder Browser erkennt StylesheetBereiche.
165.book Page 334 Wednesday, July 24, 2002 10:20 AM
Die Typangabe entspricht einem normalen Stylesheet-Bereich. Das Attribut
rel="stylesheet" sagt dem Browser, dass es sich um eine Stylesheet-Datei handelt
und er den Inhalt wie einen Stylesheet-Bereich behandeln soll.
Der Vorteil externer Stylesheet-Dateien liegt auf der Hand: Sie können einen Satz
CSS-Regeln in vielen HTML-Dokumenten verwenden und verkürzen damit die
HTML-Dokumente. Änderungen müssen Sie nur an der zentralen CSS-Datei vornehmen, beim nächsten Aufruf nutzen alle HTML-Dokumente die geänderten
Regeln.
Kaskadierte Gültigkeit
In einem HTML-Dokument können Sie Stylesheets aus verschiedenen Quellen
zusammenführen. Dabei kann es vorkommen, dass sich die Stylesheet-Angaben
widersprechen. Mit anderen Worten: In der externen CSS-Datei legen Sie als
Schriftgröße für normalen Text 12 Punkt fest. In einem style-Attribut legen Sie als
Schriftgröße aber 10 Punkt fest. Was passiert? Die Schrift wird mit 10 Punkt
Größe formatiert. Diese Kaskadierung ist fester Bestandteil von CSS (und für den
ersten Teil des Namens zuständig: Cascading Stylesheets).
Bei externen Stylesheet-Dateien gibt die Reihenfolge der <link>-Tags im HTMLDokument den Ausschlag. Die CSS-Angabe im Stylesheet an letzter Stelle benutzt
der Browser. Das gilt auch für Stylesheet-Bereiche im Kopf des HTML-Dokuments, die der Browser genauso wie externe CSS-Dateien behandelt. Wenn Sie
einzelne Tags mit dem Attribute style formatieren, so hat diese Angabe im Einzelfall den Vorrang gegenüber Stylesheet-Bereichen und externen CSS-Dateien.
Dieses Überschreiben gilt nur, wenn identische CSS-Deklarationen vorliegen, die
dieselbe Eigenschaft und dieselben Elemente betreffen. Es ist dagegen kein Problem, in verschiedenen Quellen dasselbe Element mit verschiedenen Deklarationen zu formatieren. Die verschiedenen Deklarationen zu einem Element addieren
sich sozusagen auf. Weitere Details zur Kaskadierung lesen Sie im Abschnitt
»Die Kaskadierungsfolge« in diesem Kapitel.
Standards-Compliant-Mode
Die Darstellung von HTML-Dokumenten und insbesondere CSS-Regeln entspricht beim Internet Explorer bis zur Version 5.5 nicht unbedingt dem CSS-Standard. Die CSS-Eigenschaften werden zwar interpretiert und umgesetzt, kleine
Details sind aber anders geregelt. So ist die Breite eines Elements nach CSS ohne
Auffüllbereich und Rahmen gerechnet, während der Internet Explorer standardmäßig inklusive Rahmen rechnet (siehe in Kapitel 14 den Abschnitt »Außenabstand und Auffüllbereich«).
!DOCTYPE auswerten
Die Entscheidung, ob der Internet Explorer 6 den Normalmodus (kompatibel zu
IE 5.5) oder den Standards-Compliant-Mode verwendet fällt über die !DOCTYPEDeklaration. Als erste Zeile eines »offiziellen« HTML-Dokuments zeigt diese
Deklaration an, welche HTML-Version und Variante das Dokument benutzt
334
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 335 Wednesday, July 24, 2002 10:20 AM
(siehe Kapitel 2, Abschnitt »Dokumenttyp festlegen«). Anhand dieser Deklaration entscheidet der IE6, in welchem Modus er die Webseite anzeigt.
Eine !DOCTYPE-Deklaration hat einige feste Bestandteile. Die vollständige
Deklaration für HTML 4.0 Transitional sieht so aus:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Das Label gibt die HTML-Version an, also im Beispiel HTML 4.0. Die Definition
beschreibt, um welche Variante (von HTML) es geht, im Beispiel Transitional. Am
Ende folgt ein URL, der auf die DTD der jeweiligen HTML-Version verweist, im
Beispiel "http://www.w3.org/TR/html4/loose.dtd". Die folgende Tabelle zeigt, bei welcher Kombination dieser Bestandteile der Standards-Compliant-Mode aktiviert
wird.
Label
Definition
URL vorhanden
URL nicht vorhanden
Kein !DOCTYPE
vorhanden
–
Normalmodus
Normalmodus
HTML (ohne Versionsangabe)
–
Normalmodus
Normalmodus
HTML 2.0
–
Normalmodus
Normalmodus
HTML 3.0
–
Normalmodus
Normalmodus
HTML 3.2
–
Normalmodus
Normalmodus
HTML 4.0
keine Definition
vorhanden
Standards-Compliant
Standards-Compliant
HTML 4.0
Frameset
Standards-Compliant
Normalmodus
HTML 4.0
Transitional
Standards-Compliant
Normalmodus
HTML 4.0
Strict
Standards-Compliant
Standards-Compliant
XHTML
–
Standards-Compliant
Standards-Compliant
XML
–
Standards-Compliant
Standards-Compliant
Unbekanntes !DOCTYPE
–
Standards-Compliant
Standards-Compliant
E
Die folgenden drei Beispiele schalten den Standards-Compliant-Mode ein.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">
HINWEIS
Individueller Modus bei Frames
Diese Entscheidung für oder gegen den Standards-Compliant Mode fällt der
Internet Explorer 6 für jede HTML-Datei einzeln. So können in einem Frameset
die einzelnen HTML-Dokumente in verschiedenen Modi angezeigt werden. Auch
ein Dokument in einem Inline-Frame kann einen anderen Anzeigemodus haben
als das umgebende Dokument (siehe Kapitel 10).
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
335
CSS – Cascading Stylesheet
Tabelle 13.1:
Die Bedingungen für den
Standards-Compliant-Mode
beim Internet
Explorer 6
165.book Page 336 Wednesday, July 24, 2002 10:20 AM
Unterschiede zum Normalmodus
Die Unterschiede zwischen Standards-Compliant Mode und Normalmodus
beziehungsweise zum Internet Explorer 5.5 und älteren Versionen betreffen
Details, die aber im Einzelfall große Auswirkungen haben können. Es gebt um
zwei Gruppen von Unterschieden. Die erste Gruppe umfasst Unterschiede in der
Darstellung oder Berechnung von Ausmaßen.
b Höhe und Breite von Elementen: Die Höhe und Breite von Elementen (height
und width) berechnet der IE6 jetzt ohne Auffüllbereich und Rahmen. Nur der
Inhalt des Elements zählt für die Maße.
b Tabellen: Bei Tabellen mit Fixed-Layout (table-layout: fixed im <table>-Tag)
werden Auffüllbereich, Ränder und Außenabstand der Zellen bei der Berechnung der Zellenbreite und -höhe berücksichtigt.
b Grafiken (<img>): Die Höhe und Breite von Bildern wird jetzt unter Berücksichtigung des Auffüllbereichs berechnet.
b Bereich der Webseite (<body> und <html>): In älteren Versionen des Explorer
entsprach das <body>-Tag dem kompletten Hintergrund einer Webseite. Auf diesem Hintergrund stellte der Browser den Inhalt des Dokuments dar. Die Größe
des Hintergrunds legt das Browserfenster fest. Im Standards-Compliant Mode
dagegen entspricht das <html>-Tag dem kompletten Seitenhintergrund. Sie können die Größe des <body>-Bereichs über CSS-Eigenschaften sogar nach Belieben setzen. Daraus folgt, dass Sie ein Hintergrundbild oder eine Hintergrundfarbe in <body> und <html> festlegen sollten. Der IE6 zeigt dann im
Normalmodus und im Standards-Compliant Mode den Hintergrund korrekt
an. Außerdem berechnet der IE6 dann die absolute Position von Elementen
(siehe in Kapitel 14 den Abschnitt »Positionierung«) ausgehend von <html>.
b Rollbalken: Über das Attribut scroll legen Sie fest, ob der Browser Rollbalken
anzeigt oder nicht. Im Normalmodus und älteren Browserversionen gehört dieses Attribut zu <body>. Im Standards-Compliant-Mode dagegen müssen Sie das
Attribut in <html> eintragen.
b Die zweite Gruppe von Unterschieden bezieht sich auf die Interpretation (engl.
parsing) von Cascading Stylesheets. Bis zum Internet Explorer 5.5 ist der Browser recht tolerant bei Schreibweisen, die nicht ganz dem CSS-Standard entsprechen. Im Standards-Compliant Mode dagegen weist der Browser eine Reihe von
nachlässigen Schreibweisen ab. Dadurch können Stylesheets, die bisher einwandfrei funktioniert haben, plötzlich unvorhersehbare Ergebnisse liefern.
b Kommentare: Der Internet Explorer akzeptiert die Kommentarzeichen <!-und --> von HTML auch innerhalb von CSS-Stylesheets. Im Standards-Compliant Mode sind nur noch die CSS-Kommentarzeichen /* und */ erlaubt. Es
gibt nur eine Ausnahme: Die Markierung eines gesamten Stylesheet-Bereichs
als HTML-Kommentar ist erlaubt:
<style>
<!-/* Beginn CSS-Regeln */
H1.blue { background-color:blue }
...
/* Ende CSS-Regeln */
-->
</style>
336
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 337 Wednesday, July 24, 2002 10:20 AM
b Unbekannte Schlüsselwörter in Sammeleigenschaften: Wenn Sie bei Sammeleigenschaften wie margin oder font einen falschen Wert angeben interpretiert
der Internet Explorer die Werte bis zum falschen Wert korrekt. Laut CSS-Standard sollte der Browser aber die Sammeleigenschaft komplett ignorieren. Dieses Verhalten gilt im Standards-Compliant Mode.
b Unvollständige font-Eigenschaft: Laut CSS-Standard müssen Sie bei der fontEigenschaft mindestens die Werte für font-size und font-style angeben. Sonst
gilt die font-Deklaration als ungültig. Im Standards-Compliant Mode ist konsequent die Deklaration font: 14pt; ungültig, es müsste zum Beispiel font: 14pt
normal; notiert werden.
b RGB-Farbangaben: Wenn das führende Zeichen # in einer RGB-Farbangabe
wie color: #FF0000 fehlt, ignoriert der Browser im Standards-Compliant Mode
die Farbangabe komplett.
line-height: 200%;
b Schlüsselwörter in Anführungszeichen: Schlüsselwörter wie etwa die Farbnamen (red etc.) dürfen nach CSS nicht in Anführungszeichen stehen. Sonst
interpretiert sie der Browser als Zeichenkette. Der Internet Explorer akzeptiert
Deklarationen wie color: "red"; trotzdem. Im Standards-Compliant Mode
ignoriert der Browser dagegen solche Deklarationen.
b Class- und ID-Werte: Nach CSS darf der Wert eines class- oder id-Attributs
nicht mit einer Ziffer (0-9) beginnen. <img class="0rand"> ist also für CSS eine
ungültige Schreibweise, die sich nicht als Klassenselektor einsetzen lässt (siehe
den Abschnitt »Klassenselektor« in diesem Kapitel). Zudem wird nach
HTML 4.0 Groß- und Kleinschreibung in beiden Attributwerten unterschieden. Der Internet Explorer akzeptiert beide Problemfälle dennoch, allerdings
nicht im Standards-Compliant-Mode.
Netscape: Quirks Mode
Auch Netscape 6 beziehungsweise Mozilla kennen eine vergleichbare Vorgehensweise. Anhand der !DOCTYPE-Deklaration in Dokument versucht der Browser herauszufinden, welcher Darstellungsmodus angemessen ist. Die Details lesen Sie
auf den Webseiten des Mozilla-Projekts unter www.mozilla.org/docs/web-developer/quirks/doctypes.html nach. Netscape kennt nicht nur zwei Modi, sondern
sogar drei:
b Full Standards Mode: In diesem Modus hält sich Netscape 6 eng an die Vorgaben von HTML 4.0 beziehungsweise CSS Level 1 und Level 2. Damit entspricht der Modus dem Standards-Compliant Mode des Internet Explorer 6.
Der Modus wird aktiv, wenn in der !DOCTYPE-Deklaration keine DTD angegeben
ist (<!DOCTYPE HTML>), HTML 4.0/4.01 ("-//W3C//DTD HTML 4.01//EN") oder XHTML
1.0 ("-//W3C//DTD XHTML 1.0 Strict//EN").
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
337
E
CSS – Cascading Stylesheet
b Fehlende Einheit bei Längen: Viele CSS-Eigenschaften erwarten als Wert eine
Längenangabe, für die CSS eine Reihe von festen Einheiten erlaubt (siehe den
Abschnitt »Längen« in diesem Kapitel). Der Internet Explorer interpretiert
eine Längenangabe ohne Einheit wie width: 600; automatisch als Pixel (width:
600px). Im Standards-Compliant-Mode wertet der IE6 das als Fehler und ignoriert die Deklaration. Die einzige Ausnahme ist die Eigenschaft line-height, die
Zahlen ohne Einheit als Prozentwert interpretiert: line-height: 2; entspricht
165.book Page 338 Wednesday, July 24, 2002 10:20 AM
b Almost Standards Mode: Der Modus entspricht weitgehend dem Full Standards Mode, hat aber einige Ausnahmen. Die !DOCTYPE-Deklaration ist für
die Transitional- und Frameset-Versionen von HTML 4.0 und XHTML 1.0 ausgelegt: "-//W3C//DTD XHTML 1.0 Transitional//EN" und "-//W3C//DTD HTML 4.01 Transitional//EN". Bei HTML 4.0 muss in der Deklaration ein URL für die DTD angegeben werden.
b Quirks Mode: Für die meisten bestehenden Webseiten empfehlen die Entwickler von Netscape 6 den Quirks Mode (quirk = Schrulle, Marotte). Dieser
Modus entspricht dem Normalmodus des Internet Explorers beziehungsweise
älteren Explorerversionen (die üblichen Unterschiede in der Darstellung einmal ausgenommen). Der Modus wird aktiv, wenn die !DOCTYPE-Deklaration ganz
fehlt oder die URL für die DTD weggelassen wurde. Daneben gibt es noch eine
ganze Reihe von Ausnahmen. Welche Besonderheiten den Quirks Mode auszeichnen lesen Sie bei www.mozilla.org/docs/web-developer/quirks/quirklist.html nach. Es finden sich darunter viele der Ausnahmen, die den Normalmodus des Internet Explorers ausmachen.
Insgesamt verhalten sich Internet Explorer 6 und Netscape 6/Mozilla bei der Auswahl des Darstellungsmodus sehr ähnlich. Was beim einen Browser den Standards-Compliant Mode aktiviert schaltet den anderen ebenfalls in den Full Standards Mode oder zumindest den Almost Standards Mode. Nur in wenigen Fällen
ergibt sich eine unterschiedliche Bewertung der !DOCTYPE-Deklaration.
Wertangaben
In einer CSS-Deklaration mit Eigenschaft und Eigenschaftswert gibt es eine Vielzahl von erlaubten Werten: Farben, Zahlen, Prozentwerte, URIs, Winkel, Zeiten,
Zeichenketten, Frequenzen. Wie die einzelnen Werte auszusehen haben, legt der
CSS-Standard exakt fest.
Ganzzahlen und Fließkommazahlen
Ganzzahlen (Integer) und Fließkommazahlen sind nur in Dezimalschreibweise
erlaubt. Eine Ganzzahl besteht logischerweise nur aus den Ziffern 0 bis 9, eine
Fließkommazahl kann auch einen Punkt (.) als Fließkomma enthalten. Die Zahl
der Vor- und Nachkommastellen ist beliebig. In jedem Fall kann vor einer Zahl
ein Pluszeichen (+) oder ein Minuszeichen (-) für positive und negative Zahlen
stehen. Beachten Sie aber, dass manche Eigenschaften den gültigen Wertebereich
einschränken, etwa auf positive Zahlen oder Werte von 0 bis 100.
Punkt statt Komma!
HINWEIS
In CSS gilt die amerikanische Schreibweise für Fließkommazahlen: Das Dezimaltrennzeichen ist ein Punkt und kein Komma. Die Zahl
2,37
ist falsch, die Zahl
2.37
ist richtig.
338
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 339 Wednesday, July 24, 2002 10:20 AM
Längen
Längenangaben tauchen in CSS-Regeln häufig auf, um zum Beispiel die Breite
eines Absatzes festzulegen, die Schriftgröße oder die Position eines Bereichs. Eine
Länge besteht immer aus einer Zahl (Ganz- oder Fließkommazahl) und einer Einheit (cm, px etc.). Vor der Zahl ist noch ein Vorzeichen (+ oder -) erlaubt. Es gibt
zwei Arten von Längenangaben: Relative und absolute Längen.
Relative Längen
Eine relative Länge gibt eine Länge relativ zu einer anderen Längeneinheit wieder.
Dadurch passen sich CSS-Regeln mit relativen Längen leichter an unterschiedliche Ausgabegeräte, zum Beispiel Monitore mit unterschiedlicher Auflösung an.
Es gibt folgende Einheiten:
b em: Die Schriftgröße im betroffenen Element. Wenn Sie in einem Absatz mit 12
Punkt großer Schrift einen linken Rand von 2em einstellen (text-indent: 2em;),
dann ist die Einrückung 2 mal 12 Punkt gleich 24 Punkt tief.
b ex: Die x-Höhe der Schrift im betroffenen Element.
Einige Beispiele:
h1 {margin:
0.5em}
h1 {margin:
1ex}
p {font-size: 11px}
Absolute Längen
Eine absolute Länge bezieht sich auf einen festen Maßstab, der vom Ausgabegerät
unabhängig ist. Es gibt folgende Einheiten:
b in: Ein Inch (oder Zoll) entspricht 2,54 cm.
b cm: Zentimeter
b mm: Millimeter
b pt: Die Einheit Punkt ist im Layout für Schriftgrößen gebräuchlich. 1 Punkt
entspricht für CSS2 1/72 Zoll, also etwa 0,35 mm.
b pc: Ein Pica entspricht 12 Punkt, also 1/6 Zoll oder 0,4 cm.
Einige Beispiele:
h1
h2
h3
h4
{margin:
{line-height:
{word-spacing:
{font-size:
0.5in}
3cm }
4mm }
14pt }
Prozentwerte
Ein Prozentwert ist eine Ganz- oder Fließkommazahl, die ein Prozentzeichen (%)
abschließt. Optional stellen Sie vor die Zahl noch ein Vorzeichen (+ oder -). Prozentwerte sind immer relativ zu einem anderen Wert, etwa der Breite eines Elements. Bei jeder Eigenschaft, die Prozentwerte unterstützt, ist in Kapitel 14
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
339
E
CSS – Cascading Stylesheet
b px: Pixel, relative Größe zum Ausgabegerät (zum Beispiel verschiedene PCs mit
unterschiedlicher Bildschirmauflösung).
165.book Page 340 Wednesday, July 24, 2002 10:20 AM
angegeben, worauf sich der Prozentwert bezieht. Das folgende Beispiel legt die
Zeilenhöhe in einem Absatz prozentual zur Schriftgröße fest.
p {font-size: 10pt}
p {line-height: 120%}
Achtung: Kindelemente erben üblicherweise die berechneten Werte ihrer Eltern.
Im Beispiel erben die Kindelemente des Absatzes also die Schriftgröße 12pt und
nicht 120%.
URLs und URIs
In einigen CSS-Eigenschaften geben Sie als Wert die Web-Adresse einer Ressourcendatei an, zum Beispiel eine Bilddatei als Hintergrundbild. In diesem Fall nutzen Sie die bei HTML üblichen URIs (Uniform Resource Identifier). Ein URI
kann eine URL (Uniform Resource Locator, die verbreitete Form einer WebAdresse) sein oder ein URN (Uniform Resource Name). Ein URN weist auf den
Speicherort einer Ressource ohne direkt eine Adresse anzugeben. Es ist ein Server-Dienst zwischengeschaltet, der einem URN einen URI zuweist. In der Praxis
werden Sie kaum jemals auf einen URN treffen. Einen URI klammern Sie mit dem
Ausdruck url(). Die folgenden Beispiele weisen einer Webseite ein Hintergrundbild zu:
body {background: url(/bilder/back.jpg)}
body {background: url("back.jpg")}
body {background: url('http://www.domain.de/bilder/back.jpg')}
Den URI schreiben Sie optional innerhalb von einfachen oder doppelten Anführungszeichen. Sie dürfen nur nicht beide Schreibweisen für Anführungszeichen
vermischen. Auch ein Dateiname, der sich auf eine Datei im selben Verzeichnis
wie die CSS- oder HTML-Datei bezieht, ist ein gültiger URI.
Farben
Ein Farbwert ist entweder ein festes Schlüsselwort oder ein RGB-Wert. Die
Schlüsselwörter beschränken sich auf wenige gebräuchliche Farben, die RGBWerte sind kompliziert in der Berechnung (sofern Ihr HTML-Editor Ihnen diese
Arbeit nicht abnimmt).
Farbnamen
Die Schlüsselwörter oder Farbnamen kennzeichnen bestimmte gebräuchliche
Farben wie rot (red), braun (maroon) etc. Die sechzehn erlaubten Farbnamen finden
Sie in Anhang A im Abschnitt »Standardfarbnamen ab HTML 3.2« aufgelistet.
Das folgende Beispiel setzt für ein HTML-Dokument die Schriftfarbe auf weiß
(color: white) und die Hintergrundfarbe auf schwarz (background-color: black).
body {color: white; background-color: black}
340
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 341 Wednesday, July 24, 2002 10:20 AM
Nicht im CSS-Standard (oder im HTML-Standard) stehen die erweiterten Farbnamen. Die Liste umfasst rund 140 Farben, die über das ganze Spektrum verteilt
sind. Sie finden eine Zusammenstellung in Anhang A unter »Erweiterte Farbnamen«. Internet Explorer und Netscape 4 und 6 unterstützen diese Liste komplett, Opera 5 aber nur etwa 90 Prozent. Deshalb ist es in angebracht, in der Praxis auf diese Farbnamen zu verzichten und stattdessen RGB-Werte zu benutzen.
Einen anderen Zweck verfolgt CSS 2 mit den Systemfarbnamen. Diese Farbnamen geben keinen festen Farbwert an, sondern beziehen sich auf die Farben der
grafischen Benutzeroberfläche, die der Anwender benutzt. Hier gibt es zum Beispiel das Schlüsselwort menutext, das der Schriftfarbe in Menüs entspricht. Mit diesen relativen Systemfarbnamen passen Sie also eine Webseite an das Desktop der
Besucher an. Der Internet Explorer unterstützt Systemfarbnamen ab Version 4.0,
Netscape und Opera ab Version 6.0.
RGB-Werte
Tabelle 13.2:
Die verschiedenen
Schreibweisen
für RGB-Farbwerte. Alle
Beispiel ergeben
dieselbe Farbe,
ein sattes Rot.
Schreibweise
Beispiel
Erklärung
#RGB
#f00
Die hexadezimal Schreibweise beginnt immer
mit dem Zeichen #. In der verkürzten Form
tragen Sie für jeden Farbanteil eine Zahl zwischen 0 und F ein (dezimal 0 – 15). Großoder Kleinschreibung spielt keine Rolle, es hat
sich aber Großschreibung eingebürgert. Die
verkürzte Schreibweise wird intern zur sechsstelligen Variante erweitert, aus #F00 wird
#FF0000.
#RRGGBB
#FF0000
Die übliche hexadezimale Schreibweise
erlaubt pro Farbanteil Werte zwischen 00 und
FF (dezimal 0 bis 255). Damit lassen sich
255*255*255 Farben darstellen. Auch hier
spielt Groß- und Kleinschreibung keine Rolle.
rgb(Zahl, Zahl,
Zahl)
rgb(255, 0, 0)
Dezimale Zahlen für die Farbanteile nutzen
Sie mit dem Ausdruck rgb(). Erlaubt sind
Werte zwischen 0 und 255.
rgb(Prozent,
Prozent, Prozent)
rgb(100%, 0%, 0%)
Die Prozentwerte (0.0% bis 100.0%) steuern
den Anteil der jeweiligen Grundfarbe.
Winkel
Winkel werden bei einigen CSS-Eigenschaften für Sprachausgabe benutzt. Es sind
folgende Einheiten erlaubt:
b deg: Klassische Einteilung von 0 bis 360 Grad.
b grad: Ein rechter Winkel entspricht 100grad, ein Vollkreis hat 400grad.
b rad: Unterteilt einen Vollkreis in 2*pi, also Werte von 0 bis 6,28 (gerundet).
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
341
E
CSS – Cascading Stylesheet
Über den RGB-Werte erhält man etwa 16,4 Millionen Farben. Dabei geben Sie
den Rot-, Blau- und Grünanteil der Farbe jeweils getrennt an. Bereits seit CSS1
gibt es verschiedene Schreibweisen, die die folgende Tabelle auflistet. Internet
Explorer, Netscape und Opera unterstützen alle Schreibweisen spätestens ab der
4er-Version.
165.book Page 342 Wednesday, July 24, 2002 10:20 AM
Winkelwerte dürfen auch negativ sein. Derzeit unterstützt kein Browser der 6erGeneration Winkelangaben (ebenso wenig wie Sprachausgabe).
Zeiten
Zeitangaben finden bei CSS2 nur im Zusammenhang mit der Sprachausgabe Verwendung. Es sind folgende Einheiten erlaubt:
b ms: Millisekunden
b s: Sekunden
Zeitwerte dürfen nicht negativ sein. Derzeit unterstützt kein Browser der 6erGeneration Winkelangaben (ebenso wenig wie Sprachausgabe).
Frequenzen
Frequenzen finden bei CSS2 nur im Zusammenhang mit der Sprachausgabe Verwendung. Es sind folgende Einheiten erlaubt:
b Hz: Hertz
b kHz: Kilohertz
Frequenzen dürfen nicht negativ sein. Derzeit unterstützt kein Browser der 6erGeneration Winkelangaben (ebenso wenig wie Sprachausgabe).
Zeichenketten
Zeichenketten, also beliebigen Text, schließen Sie wahlweise mit doppelten oder
einfachen Anführungszeichen ein. Sie müssen nur darauf achten, die Anführungszeichen immer paarweise zu verwenden. Doppelte Anführungszeichen dürfen
nicht in einer Zeichenkette vorkommen, die in doppelte Anführungszeichen eingeschlossen sind. Das gilt im übertragenen Sinn auch für einfache Anführungszeichen. In diesem Fall müssen Sie die inneren Anführungszeichen maskieren: \"
oder \22 beziehungsweise \' oder \27. Gemischt dürfen die Anführungszeichen
aber innerhalb einer Zeichenkette auftreten. Einige Beispiele:
"das
"das
'das
'das
ist
ist
ist
ist
eine
eine
eine
eine
'Zeichenkette'"
\"Zeichenkette\""
"Zeichenkette"'
\'Zeichenkette\''
Eine Zeichenkette kann keinen Zeilenumbruch enthalten. Einen Zeilenumbruch
fügen Sie mit \A ein. Wenn Sie eine lange Zeichenkette im Quelltext über mehrere
verteilen wollen, dürfen Sie nicht einfach einen Umbruch einbauen. Vielmehr
müssen Sie den Umbruch mit \ maskieren. Die beiden folgenden CSS-Deklarationen sind gleichwertig:
font-family: "Bookman Old\
Style Fett Kursiv";
font-family: "Bookman Old Style Fett Kursiv";
342
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 343 Wednesday, July 24, 2002 10:20 AM
Selektoren
Der Selektor legt in einer CSS-Regel fest, auf welche Elemente im HTML-Dokument die Regel angewendet wird. Es gibt eine ganze Reihe verschiedener Selektoren, mit denen Sie genau auswählen, was Sie formatieren möchten. Alle Selektoren lassen sich auch kombinieren, sodass sehr komplexe Konstrukte entstehen. In
99 Prozent aller Fälle genügt aber einer, der im Folgenden aufgeführten Selektoren, um den gewünschten Effekt zu erzielen.
Universalselektor
Der Universalselektor * bezieht sich auf alle Tags in einem HTML-Dokument.
Das folgende Beispiel legt die Schriftgröße für alle Tags auf 12 Punkt fest:
* { font-size: 12pt}
Beachten Sie, dass Netscape 4 den Universalselektor nicht unterstützt.
Der Typselektor bezeichnet ein bestimmtes Tag. An jeder Stelle, an der dieses Tag
im HTML-Dokument vorkommt wird die Regel angewandt. Dabei geben Sie den
Namen des Elements ohne die spitzen Klammern an. Alle CSS-fähigen Browser
unterstützen Typselektoren bereits seit etlichen Versionen. Das folgende Beispiel
legt fest, dass sämtliche Überschriften 1. Ordnung (<h1>) eine serifenlose Schrift
(zum Beispiel Arial) benutzen:
h1 {font-family: sans-serif}
Nachfahrenselektor
Ein Nachfahrenselektor erfasst nur solche Elemente, die innerhalb eines anderen
Elements notiert sind. Stellen Sie sich folgenden Fall vor: Auf einer Webseite gibt
es hervorgehobene Wörter (<em>), die blau dargestellt werden. Das funktioniert in
Überschriften wunderbar. Absätze haben allerdings ebenfalls blaue Schrift, die
Hervorhebung geht unter. Die Stellen im Haupttext sollen nun anders aussehen.
Die dritte Regel im folgenden Beispiel betrifft nur hervorgehobene Wörter (<em>),
die innerhalb eines Absatzes (<p>) notiert sind.
p
{color: blue}
em {color: blue}
p em {color: red }
Wenn Sie zwei Tagnamen durch Leerzeichen getrennt hintereinander schreiben,
entsteht ein abhängiger Selektor: Nur wenn <em> innerhalb von <p> notiert ist gilt
die Regel. In HTML hat die Regel die folgende Wirkung:
Dieses <em>Wort</em> ist wichtig.
<p>Ein Absatz mit einem <em>hervorgehobenen</em> Wort</p>
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
343
E
CSS – Cascading Stylesheet
Typselektor
165.book Page 344 Wednesday, July 24, 2002 10:20 AM
Kindselektor
Ein Kindselektor beschreibt alle Kindelemente eines Elements. Im Gegensatz zum
Nachfahrenselektor sind nur die Elemente betroffen, die unmittelbar innerhalb
eines Elements notiert sind. Zwischen Eltern- und Kindelement fügen Sie ein
Größer-als-Zeichen (>) ein. Das folgende Beispiel legt für alle Absätze, die Kinder
von <body> sind, eine Zeilenhöhe von 120% fest:
body > p {font-size: 18pt}
Der folgende HTML-Ausschnitt zeigt, dass der Kindabsatz eine größere Schrift
nutzt.
<body>
<p>Absatz mit 18 Punkt.</p>
<ul>
<li>
<p>Absatz mit normaler Schriftgröße.</p>
</li>
</ul>
</body>
Abbildung 13.1:
Nur unmittelbar
unterhalb des
<body>-Elements wirkt die
CSS-Regel mit
dem Kindselektor
Beachten Sie: Über die Pseudo-Klasse :first-child sprechen Sie in einer CSSRegel gezielt das erste Kind eines Elements an (siehe den Abschnitt »:firstchild« in diesem Kapitel).
Nachbarselektor
Der Nachbarselektor betrifft zwei Elemente, die auf derselben Ebene innerhalb
der Hierarchie des HTML-Dokuments stehen. Mit anderen Worten: Beide Elemente sind Kinder desselben Elements. Der Selektor K1 + K2 betrifft das Element
K2, wenn es in der Hierarchie unmittelbar auf K1 folgt. Das folgende Beispiel verringert den Abstand vor einer Überschrift 2. Ordnung, wenn Sie unmittelbar auf
eine Überschrift erster Ordnung folgt:
h1 + h2 { margin-top: -5mm}
Beachten Sie, dass <h1> davon nicht beeinflusst wird, hier bleiben die Abstände
unverändert. Das folgende Bild zeigt, dass die erste Zwischenüberschrift näher an
die vorhergehende <h1>-Überschrift rückt. Die folgenden <h2>-Zwischenüberschriften haben einen wesentlich größeren Abstand.
344
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 345 Wednesday, July 24, 2002 10:20 AM
Abbildung 13.2:
Nur bei der
Zwischenüberschrift, die
unmittelbar auf
<h1> folgt, ist der
Abstand zum
vorhergehenden
Text reduziert
Attributselektoren
Die Attributselektoren beziehen sich auf Attribute, die einem Tag zugeordnet ist.
Es gibt nach CSS2 vier verschiedene Schreibweisen für Attributselektoren. Die
Unterstützung durch die Browser sieht ziemlich mager aus und beschränkt sich
auf die teilweise Unterstützung durch Netscape 6 und Opera. In der Praxis spielen
die Attributselektoren deshalb keine große Rolle. Die folgende Tabelle listet die
vier Varianten sowie die Unterstützung durch die Browser auf.
Schreibweise
Bedeutung
[att]
Der Selektor prüft, ob ein bestimmtes Attribut
namens att vorhanden ist. Der Attributwert
spielt keine Rolle.
[att=wert]
Das Attribut att muss einen ganz bestimmten
Wert haben.
[att~=wert]
Das Attribut att hat als Wert eine Liste, deren
einzelne Einträge durch Leerzeichen getrennt
sind. Ein Eintrag in der Liste muss wert entsprechen.
[att|=wert]
Das Attribut att hat als Wert eine Liste, deren
einzelne Einträge durch Minuszeichen
getrennt sind. Ein Eintrag in der Liste muss
wert entsprechen. Diese Schreibweise soll es
möglich machen, Länderkennungen mit Untergruppen (zum Beispiel de-ch, de-at oder
de-lu) zu unterscheiden (siehe in Ï Anhang A
den Abschnitt »Ländercodes«).
Browser
Ein Attributselektor ist immer in eckige Klammern eingeschlossen. Als Attributwert sind entweder Bezeichner oder Zeichenketten erlaubt. Zeichenketten müssen Sie in Anführungszeichen setzen. Ob Groß- und Kleinschreibung eine Rolle
spielen, hängt von der Dokumentsprache ab. Bei HTML 4.0 müssen Sie auf Großund Kleinschreibung achten (siehe den Abschnitt »Standards-CompliantMode« in diesem Kapitel).
Das folgende Beispiel betrifft alle <h1>-Überschriften, die das Attribut title haben.
Der Wert von title spielt dagegen keinen Rolle:
h1[title] {color: green}
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
E
CSS – Cascading Stylesheet
Tabelle 13.3:
Verschiedene
Varianten für
Attributselektoren
345
165.book Page 346 Wednesday, July 24, 2002 10:20 AM
Die Anwendung in HTML zeigt das folgende Beispiel. Die erste Überschrift wird
mit grüner Schrift dargestellt, die zweite Überschrift dagegen mit der normalen
Schriftfarbe:
<h1 title="Besonders wichtig">CSS anwenden</h1>
<h1>CSS-Eigenschaften</h1>
Wenn das Attribut einen bestimmten Wert haben soll, schreiben Sie wie im nächsten Beispiel. Nur Überschriften mit linksbündiger Ausrichtung (align="left") werden um 1cm eingerückt:
h2[align=left] {text-indent: 1cm}
Es ist natürlich auch möglich, mehrere Attributselektoren anzugeben. Das folgende Beispiel prüft, ob das Attribut title vorhanden ist und außerdem eine linksbündige Ausrichtung mit align erfolgt ist. Nur dann wird die Schriftgröße auf 24
Punkt gesetzt.
h1[title][align=left] {font-size: 24pt}
HTML-spezifische Selektoren
CSS ist eine eigenständige Stylesheet-Sprache, die sich theoretisch mit jeder Auszeichnungssprache einsetzen lässt, zum Beispiel auch XML. In der Praxis ist CSS
jedoch eng mit HTML verknüpft. Und deshalb gibt es zwei besondere Selektoren,
die nur in Verbindung mit HTML-Dokumenten Sinn machen.
Klassenselektor
Ein Klassenselektor ist eigentlich eine besondere Variante eines Attributselektors.
Denn es geht um den Wert des Attributs class. Die folgende CSS-Regel betrifft alle
Elemente, die mit dem Attribut class="fett" versehen sind:
.fett {font-weight: bold}
Der Selektor beginnt mit einem Punkt. Darauf folgt der Attributwert von class.
Die nach CCS2 gleichwertige Schreibweise ist
*[class~="fett"] {font-weight: bold}
Allerdings unterstützen nur Netscape 6 und Opera diese Schreibweise, in der Praxis ist sie deshalb wertlos. Das folgende komplette Beispiel verdeutlicht den
Zusammenhang zwischen Klassenselektor und class-Attributwert:
<html>
<head>
<title>Klassenselektor</title>
<style type="text/css">
.fett {font-weight: bold}
</style>
</head>
<body>
346
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Listing 13.1:
Der Klassenselektor .fett formatiert
den zweiten
Absatz
Kapitel 13
165.book Page 347 Wednesday, July 24, 2002 10:20 AM
<p>
Dieser Absatz nutzt die Standardschrift.
</p>
<p class="fett">
Dieser Absatz erscheint in fetter Schrift.
</p>
</body>
</html>
Abbildung 13.3:
Der zweite
Absatz erscheint
in fetter Schrift
.fett {font-weight: bold}
.kursiv {font-style: italic}
.kursiv.fett {
font-style: italic
font-weight: bold
}
Die erste CSS-Regel tritt in Kraft, wenn das Attribut class die Zeichenkette fett
enthält, die zweite Regel entsprechend bei kursiv. Die dritte Regel .kursiv.fett
kommt nur zum Zug, wenn class sowohl fett als auch kursiv enthält. Auf die Reihenfolge im Attributwert kommt es dabei nicht an. Derzeit unterstützt allerdings
kein Browser Mehrfachklassen.
ID-Selektor
In einem HTML-Dokument können Sie mit dem Universalattribut id (siehe in
Kapitel 2 den Abschnitt »Universalattribute«) beliebige Tags ergänzen. Die
Besonderheit an id ist, dass der Attributwert pro HTML-Dokument nur einmal
vorkommen darf. Damit identifiziert dieses Attribut ein Element eindeutig:
<h1 id="anhang-a">Anhang A</h1>
Eine CSS-Regel speziell für dieses Element sieht so aus:
h1#anhang-a {color: red}
Ein ID-Selektor beginnt mit dem Gatterzeichen (#), darauf folgt der Wert des idAttributs. Der Unterschied zu h1[id="anhang-a" liegt in der Kaskadierungsreihen-
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
347
E
CSS – Cascading Stylesheet
Laut CSS unterstützt ein Klassenselektor auch eine Hierarchie von Klassen. In
HTML notieren Sie dazu als Attributwert mehrere Klassen, zum Beispiel
class="fett kursiv". Die verschiedenen Klassen müssen durch Leerzeichen
getrennt sein. Damit gehört ein Element zwei Klassen an, nämlich fett und kursiv.
Die folgenden Beispiele zeigen, wie sich diese Mehrfachklassen im Selektor einsetzen lassen.
165.book Page 348 Wednesday, July 24, 2002 10:20 AM
folge: Der ID-Selektor liegt vor dem Attributselektor (siehe den Abschnitt »Die
Kaskadierungsfolge« in diesem Kapitel).
Pseudo-Klassen
Nicht alle Elemente auf einer Webseite lassen sich über Selektoren ansprechen.
Es handelt sich sozusagen um »immaterielle« Zustände, die erst beim Aufbau der
Webseite oder durch Benutzeraktionen entstehen. Die Pseudo-Klassen erlauben
den Zugriff auch auf diese Zustände/Elemente. Eine Pseudo-Klasse beginnt mit
einem Doppelpunkt, auf den ein Schlüsselwort folgt. Es gibt folgende PseudoKlassen:
b Aktiviertes Element::active
b Erstes Kindelement::first-child
b Element mit Fokus::focus
b Überfahren eines Elements mit der Maus::hover
b Sprache des Elements::lang
b Noch nicht besuchter Link::link
b Bereits besuchter Link::visited
b Nur in Verbindung mit seitenorientierten Ausgabemedien und der Regel @page
sind folgende Pseudoklassen zugelassen:
b Erste Seite::first
b Linke Seite::left
b Rechte Seite::right
:active
Die Pseudo-Klasse :active tritt in Aktion, wenn der Surfer ein Element im Browser gerade aktiviert. Einfacher gesagt: Wenn der Surfer einen Button mit der Maus
anklickt ist der Button aktiv, bis der Surfer die Maustaste wieder loslässt. Das folgende Beispiel definiert für aktivierte Links die Schriftfarbe rot:
a:active {color: red}
:first, :left und :right
Diese drei Pseudo-Klassen sind nur im Zusammenhang mit seitenorientierten
Ausgabemedien wie Drucker und der Regel @page erlaubt. Weitere Details lesen Sie
in Kapitel 14 im Abschnitt » Seitenorientierte Ausgabemedien«. Die Klassen
haben folgende Bedeutung:
b :first: Erste Seite des Dokuments
b :left: Eine linke Seiten des Dokuments. Beim Ausdruck teilt der Browser lange
HTML-Dokumente in einzelne Seiten auf. Beim Layout unterscheidet man wie
bei einem aufgeklappten Buch zwischen linker und rechter Seite. Auf einer lin-
348
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 349 Wednesday, July 24, 2002 10:20 AM
ken Seite sitzt beispielsweise die Seitennummer links, auf einer rechten Seite
rechts.
b :right: Eine rechte Seite des Dokuments, weitere Details siehe :left.
:first-child
Die Pseudo-Klasse :first-child kennzeichnet das erste Kind eines anderen Elements. Die folgende CSS-Regel bezieht sich auf den ersten Absatz in einem <div>Bereich:
div > p:first-child {text-indent: 0}
In den folgenden HTML-Zeilen wurde der erste Absatz entsprechend behandelt:
<p>Ein Absatz davor.</p>
<div>
<p>Dieser Absatz keine Einrückung</p>
</div>
<p>Ein Absatz davor.</p>
<div>
<h1>Uuml;berschrift</h1>
<p>Dieser Absatz keine Einrückung</p>
</div>
:focus
Wenn ein Element auf einer Webseite den Fokus hat, dann nimmt es Tastendrücke entgegen, zum Beispiel ein Eingabefeld. Es kann immer nur ein Element auf
einer Webseite den Fokus haben. Und genau diesen Element ist über die PseudoKlasse :focus adressierbar. Das folgende Beispiel definiert , dass ein Eingabefeld
mit Fokus eine rote Hintergrundfarbe hat:
input:focus {background-color: red}
Beachten Sie, dass diese Regel sämtliche Arten von Eingabefeldern von Textfeldern über Radiobuttons bis hin zu Auswahllisten erfasst. Um wirklich nur die einzeiligen Textfelder zu erfassen bietet sich ein Klassenselektor an.
:hover
Wenn Sie den Mauszeiger über ein Element bewegen wird die Pseudo-Klasse
:hover aktiv. Wenn der Mauszeiger den Bereich des Elements verlässt, verliert
:hover wieder die Zuständigkeit. Damit erzeugen Sie einfach den beliebten
Mouseover-Effekt:
a:hover {font-weight: bold}
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
349
E
CSS – Cascading Stylesheet
Im folgenden Beispiel greift die CSS-Regel aber nicht, denn der Absatz ist nicht
das erste Kind:
165.book Page 350 Wednesday, July 24, 2002 10:20 AM
Sobald Sie den Mauszeiger über einen Link bewegen, wird er mit fetter Schrift
dargestellt. Achtung: Weil eine fette Schrift mehr Platz benötigt verändert sich in
den meisten Fällen das Layout der Webseite. Sie sollten solche Effekte beim Einsatz von :hover einkalkulieren und entsprechend Platz bereitstellen.
Abbildung 13.4:
Beim Überfahren mit der
Maus wird der
Link fett
:lang
In HTML legen Sie über das Universalattribut lang die Sprache für jedes Element
fest. Das kann sinnvoll sein, um etwa Suchmaschinen bei der korrekten Klassifizierung von Stichworten zu unterstützen. Über die Pseudo-Klasse :lang werten
Sie die Sprache eines Elements aus.
html:lang(fr) {quotes: '«' '»'}
html:lang(de) {quotes: '"' '"'}
Die CSS-Regel legt für Abschnitte in französischer und deutscher Sprache als
Anführungszeichen die passende Variante fest. In den runden Klammern geben
Sie den entsprechenden Ländercode an (siehe in Anhang A den Abschnitt
»Ländercodes«). Mehr über das automatische Einfügen von Anführungszeichen
lesen Sie in Kapitel 14 im Abschnitt »Inhalte erzeugen«.
:link und :visited
Normale und besuchte Links haben bei allen Browsern unterschiedliche Farben.
Diese Farbgebung haben Sie mit den beiden Pseudo-Klassen im Griff.
b :link: Ein Link, der noch nicht besucht wurde.
b :visited: Ein Link, der bereits besucht worden ist.
Das folgende Beispiel sorgt dafür, dass Links nach einem Besuch rotbraun
erscheinen:
:visited {color: maroon}
Die CSS-Regel gilt für alle <a>-Elemente in einem HTML-Dokument. Wenn Sie
zwischen projektinternen Links und Links auf externe Adressen unterscheiden
wollen, verwenden Sie am besten einen Klassenselektor. Die CSS-Regel
a.external:visited {color: maroon}
wirkt nur auf Links mit der folgenden HTML-Schreibweise:
<a class="external" href="http://www.spiegel.de">Spiegel Online</a>
350
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 351 Wednesday, July 24, 2002 10:20 AM
Pseudo-Elemente
Ein Pseudo-Element steht für ein Element, das in der Hierarchie einer Webseite
nicht enthalten ist. So gibt es in HTML kein Tag, das die erste Zeile oder den
ersten Buchstaben eines Elements kennzeichnet. Außerdem lassen sich mit zwei
Pseudo-Elementen Inhalte in eine Webseite einfügen, die vorher noch nicht vorhanden waren.
:after und :before
Mit den beiden Pseudo-Elementen fügen Sie vor (:before) oder nach (:after)
einem Element generierten Inhalt ein. Das kann zum Beispiel eine automatische
Nummerierung über Zähler sein oder Anführungszeichen. Eine ausführliche
Beschreibung und Beispiele finden Sie in Kapitel 14 im Abschnitt »Inhalte
erzeugen«.
:first-letter
p:first-letter {
color: #ffd800;
font-size: 400%;
float: left;
}
Abbildung 13.5:
Das Initial ist
400% größer als
der normale Text
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
351
E
CSS – Cascading Stylesheet
Den ersten Buchstaben eines Elements sprechen Sie mit dem Pseudo-Element
:first-letter an. Der typische Anwendungsfall dürfte ein Initial für einen Textabsatz sein. Das folgende Beispiel formatiert den ersten Buchstaben in größerer
Schrift und mit goldener Schriftfarbe. Die Deklaration float: left sorgt dafür, dass
der Fließtext rechts vom Initial weiterläuft, sodass er über mehrere Zeilen reichen
kann. Das Bild zeigt, dass es optisch besser wirkt, wenn Sie die ersten Wörter im
Absatz mit Großbuchstaben schreiben. Sonst ragt das Initial zu weit über den
Text hinaus.
165.book Page 352 Wednesday, July 24, 2002 10:20 AM
Satzzeichen inklusive
TIPP
Beachten Sie, dass Satzzeichen wie Punkte oder Anführungszeichen mit zum ersten Buchstaben gerechnet werden. Wenn Sie also den Absatz mit
"ES WAR EINMAL
beginnen, dann besteht das Initial aus den zwei Zeichen "E.
:first-line
Das Pseudo-Element :first-line bezieht sich auf die erste Zeile in einem Element.
Was zur ersten Zeile gehört, hängt ganz vom Layout im Browser ab und kann sich
bei einer anderen Fenstergröße des Browsers dynamisch anpassen. Typischerweise kommt :first-line bei Text zum Einsatz. Das folgende Beispiel wandelt die
erste Zeile im Absatz in Großbuchstaben um:
p:first-line {text-transform: uppercase}
Abbildung 13.6:
Das Pseudo-Element :first-line
bei unterschiedlich breitem
Browserfenster
At-Regeln
Die At-Regeln haben ihren Namen von dem vorangestellten @, das im englischen
als »at« gesprochen wird. At-Regeln nehmen den Platz von normalen CSS-Regeln
(Selektor plus Deklaration) ein, führen aber besondere Funktionen aus oder enthalten Steueranweisungen für die Bearbeitung des Stylesheets. So ist es beispielsweise mit einer At-Regel möglich, besondere Anweisungen für die Druckausgabe
zu machen oder weitere CSS-Dateien einzubinden.
@charset
Über @charset beschreiben Sie, welchen Zeichensatz eine externe CSS-Datei
benutzt. In einem Style-Bereich in HTML darf die At-Regel nicht verwendet werden. Hier bestimmt die HTML-Umgebung den Zeichensatz. @charset muss die
erste Zeile der Datei sein. In Anführungszeichen schreiben Sie hinter die Regel
den Zeichensatz, zum Beispiel Shift-JIS für japanisch. Den Abschluss macht ein
Semikolon.
@charset "Shift-JIS";
Mit dieser Regel überschreiben Sie alle Angaben zum Zeichensatz, die im einbindenden Dokument (CSS oder HTML) stehen.
352
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 353 Wednesday, July 24, 2002 10:20 AM
@font-face
Über @font-face binden Sie eine externe Schriftdatei in eine Webseite ein und
legen die Eigenschaften der Schrift fest. Das ist wichtig, damit der Browser die
externe Schrift mit CSS-Deklarationen wie font-variant: italic verwenden kann.
Weitere Informationen und Beispiele finden Sie in Kapitel 14 im Abschnitt »
Schrift einbinden«.
@import
Mit der Regel @import fügen Sie in einem Stylesheet eine externe CSS-Datei ein. So
ist es zum Beispiel möglich, CSS-Regeln in Module aufzuteilen und nach Bedarf
zusammenzustellen. Die At-Regel muss vor allen anderen CSS-Regeln notiert
sein. Entsprechend werden die CSS-Regeln aus dem Import vor den Regeln im
einbindenden Stylesheet ausgeführt. Die zwei folgenden Beispiele binden dieselbe
Datei stile.css ein.
@import "stile.css";
@import url("stile.css");
In CSS2 ist die Syntax von @import um Medientypen erweitert. Hinter den URI
schreiben Sie die Medientypen, für den die externe CSS-Datei gedacht ist. Der
Browser lädt das externe Stylesheet nur, wenn der Medientyp passt. Kein Browser
der 6er-Generation unterstützt dieses Feature. Deshalb weichen Sie besser auf die
Regel @media aus (siehe nächster Abschnitt, dort finden Sie auch weitere Informationen zu den Medientypen).
@media
Verschiedene Ausgabegeräte wie Browser, Handhelds oder Sprachausgabe stellen
ganz unterschiedliche Anforderungen. CSS2 definiert eine ganze Reihe von
Medientypen, die solchen Ausgabegeräten entsprechen. Über die Regel @media
machen Sie CSS-Deklarationen vom Medientyp abhängig. Das Ausgabegerät
(sprich: der Browser) kennt seinen Medientyp und wählt entsprechend die Deklarationen aus. Die erlaubten Medientypen listet die Tabelle 13.4 auf.
Das folgende Beispiel definiert zwei @media-Regeln. Die erste ist für die Druckausgabe (print) zuständig, die zweite für die Bildschirmausgabe (screen). Für den Ausdruck ist eine kleinere Schrift geeignet, am Bildschirm liest sich meistens eine
etwas größere Schrift besser.
@media print {
body {font-size: 10pt;}
}
@media screen {
body {font-size: 12pt;}
}
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
353
E
CSS – Cascading Stylesheet
Sie haben die Wahl, ob Sie direkt den Dateinamen der CSS-Datei in Anführungszeichen angeben oder mit dem Ausdruck url() klammern. Beide Schreibweisen
sind gleichwertig, Sie dürfen in beiden Fällen auch einen vollständigen URI als
Adresse angeben. Der abschließende Strichpunkt ist unbedingt notwendig.
165.book Page 354 Wednesday, July 24, 2002 10:20 AM
Sie dürfen auch mehrere Medientypen durch Komma getrennt angeben.
@media print, screen {...}
Media-Typ
Browser
Beschreibung
all
geeignet für alle Geräte
aural
Ausgabe mit Sprachsynthesizer
braille
Ausgabe auf Geräten für Blindenschrift (Braille-Schrift)
embossed
Braille-Drucker
handheld
Handheld-Geräte (kleiner Bildschirm, monochrom, geringe
Bandweite zur Datenübertragung)
print
Seiten für den Ausdruck auf Papier
projection
Projektoren
screen
Normaler Computerbildschirm ohne Seitenbegrenzung,
das heißt, die Seiten könne beliebig lang sein
tty
Ausgabegeräte mit nichtproportionaler Schrift wie Fernschreiber (=teletype), Terminals oder Mobilgeräte mit
begrenzten Anzeigefähigkeiten (Pager etc.)
tv
TV-artige Geräte (geringe Bildauflösung, Farbe, begrenzte
Fähigkeiten beim Verschieben des Bildausschnitts)
Medientyp in HTML
Tabelle 13.4:
CSS2 definiert
eine Reihe von
Medientypen
TIPP
Eine Alternative zu @media bietet HTML 4.0 mit dem Attribut media in den Tags
<link> und <style>. Über <link> binden Sie CSS-Dateien in eine HTML-Datei ein,
<style> definiert einen Stylesheet-Bereich. Bei media geben Sie als Attributwert den
Medientyp an, die unterstützten Werte entsprechen bis auf embossed den Medientypen von CSS2. Weitere Informationen finden Sie in Kapitel 3 im Abschnitt
»Logische Dateibeziehungen« und in Kapitel 11 im Abschnitt »StylesheetBereiche im HTML-Kopf«.
@page
Über die At-Regel @page definieren Sie einen Seitenkontext für die Ausgabe auf seitenorientierten Geräten. Typischerweise sind das Drucker, aber auch seitenorientierte Browser oder Präsentationsfolien sind denkbare Ziele. Weitere Informationen zu @page finden Sie in Kapitel 14 im Abschnitt »Seitenorientierte
Ausgabemedien«.
354
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Kapitel 13
165.book Page 355 Wednesday, July 24, 2002 10:20 AM
Die Kaskadierungsfolge
Der Name Cascading Stylesheets weist auf eine besondere Eigenschaft dieser
Stylesheet-Sprache hin: CSS-Regeln ergänzen oder überschreiben sich gegenseitig, wenn Sie dasselbe Element oder dieselbe Eigenschaft betreffen. Die Kaskadierungsfolge legt fest, welche CSS-Regel am Ende gültig ist.
Das erste Kriterium ist die Reihenfolge, in der CSS-Regeln im Quelltext notiert
sind: Die letzte CSS-Regel überschreibt alle ihre Vorgänger. Wenn Sie mit @import
externe CSS-Dateien einbinden, so behandelt der Browser diese CSS-Regeln, als
stünden Sie ganz am Anfang des Stylesheets. Bei mehreren CSS-Dateien kommt
es auf die Reihenfolge @import-Regeln an. Ein Inline-Stylesheet (mit dem Attribut
style direkt im HTML-Tag) überschreibt für dieses eine Tag alle vorhergehenden
CSS-Regeln.
Das zweite Kriterium betrifft den Selektor. Grundsätzlich gilt: Je spezieller der
Selektor ist, desto höher steht die Regel in der Rangfolge. Ein Beispiel macht das
klar:
Die erste CSS-Regel betrifft alle Absätze (Tag <p>) und ist deshalb sehr allgemein.
Die zweite Regel betrifft nur Absätze, die zusätzlich das Attribut class="besonders"
aufweisen. Dieser spezielle Selektor überschreibt den allgemeinen Selektor p.
Eine Besonderheit sind ID-Selektoren, die alle anderen Selektoren überschreiben.
Reihenfolge aushebeln: !important
Mit dem Schlüsselwort !important kennzeichnen Sie einzelne Regeln als besonders
wichtig. Diese überschreiben dann andere Regeln, auch wenn dies der normalen
Kaskadierungsfolge widerspricht. Im folgenden Beispiel müsste die CSS-Regel für
<p> eigentlich vom Inline-Stylesheet überschrieben werden. Allerdings ist die
Regel mit !important gekennzeichnet, sodass sie Vorrang hat. Deshalb erscheint
der Text im Absatz in roter statt grüner Schrift.
<head>
<style>
p { color:red !important }
</style>
</head>
<body>
<p style="color:green">Dieser Text erscheint rot.</p>
</body>
CSS anwenden
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
355
E
CSS – Cascading Stylesheet
p {color: red}
p.besonders {color: blue}
165.book Page 356 Wednesday, July 24, 2002 10:20 AM
Wolfgang Nefzger: XHTML/HTML 4. ISBN: 3-86063-165-9. Microsoft Press 2002
Herunterladen