PI-Seminar: WWW für Fortgeschrittene
1. 9. bis 3. 9. 1999, PI Hollabrunn
Mag. Michael Überall, BG und BRG Hollabrunn
Sie haben sich für das Seminar "WWW für Fortgeschrittene" angemeldet, daher nehme ich an, dass Sie mit den grundlegenden Dingen der HMTL-Seitengestaltung vertraut sind. Dabei meine ich aber nicht die Gestaltung von Web-Seiten mit Hilfe eines WYSIWYG-Editors a lá Frontpage, Frontpage Express oder Netscape Composer, sondern pures HMTL-"Programmieren".
Ich möchte in meinen Ausführungen zeigen, welche Gestaltungsmöglichkeiten in der Seitenbeschreibungssprache HTML stecken und welche neuen Möglichkeiten Cascading Style Sheets (kurz CSS) bieten. CSS sind eine Erweiterung für HTML, eine Zusatzsprache, die unzählige neue Gestaltungselemente bieten, die "reines" HTML derzeit nicht, oder nur über Umwege zur Verfügung stellt. CSS folgt allerdings einer völlig anderen Syntax und muss entsprechend in ein HTML-Dokument eingebunden werden.
Für unsere heutige Arbeit plane ich folgende Punkte:
Inhalt:
Eine Institution zur Normierung und Vereinheitlichung der verschiedensten Web-Techniken ist das WorldWideWeb-Konsortium (W3C).
Grundlage für HTML (Hypertext Markup Language) war SGML (Standard Generalized Markup Language), eine von der ISO (International Standardization Organization) mit der Nummer 8879 im Jahre 1986 genormte Sprache zur Kennzeichnung der Struktur von Daten und Dokumenten. Allerdings war zu Beginn der 90er Jahre HTML von den Erfindern des WWW (World Wide Web) als einfache übersichtliche Seitenbeschreibungssprache gedacht. Die noch heute in HTML bekannten, aber selten verwendeten logischen Textauszeichnungssymbole, die Tags, stammen von der ursprünglichen Version. 1995 wurde die Version HTML 2.0 offizieller Standard.
Im Laufe der Zeit waren die sehr eingeschränkten Gestaltungsmöglichkeiten dieser rein auf logischen und hierarchischen Textstrukturen aufbauenden Sprache den Programmierern von Web-Seiten und Web-Browsern viel zu wenig, sodass zuerst Netscape und dann auch Microsoft eigene Erweiterungen einführten, die das W3C nach und nach aber nur zum Teil absegnete. Das W3C war nahe daran, seine "Autorität" als Standardisierungsinstitution zu verlieren. Es hinkte dem Stand der Technik immer um einige Zeit nach.
Das W3C versuchte eine Version 3.0 zu etablieren, diese fand jedoch keine Akzeptanz unter den Browser-Programmierern und Web-Autoren. Die Institution begann nun endlich mit den kommerziell-orientierten Software-Herstellern zu kooperieren und so wurde gemeinsam der noch heute weit verbreitete Standard mit der Version HTML 3.2 gesetzt, der am 14. 1. 1997 veröffentlicht wurde. Doch darin fehlten z.B. wichtige Elemente wie Frames, die zu dieser Zeit bereits im Web weit verbreitet waren.
Mit der Einführung der Cascading Style Sheets CSS 1.0 (Veröffentlichung im Dezember 1997) und der HTML-Version 4.0 mit 18. 12. 97 versuchte das W3C auf die Überholspur hinauszulenken und die Web-Autoren dazu zu bringen, mit HTML wieder ausschließlich die Seitenstruktur zu beschreiben - das Aussehen soll in Stilvorlagen mittels CSS festgelegt werden.
Im Mai des Jahres 1998 veröffentlichte das W3C die CSS 2, die viele neue Eigenschaften in Bezug auf die Bildschirmdarstellung und den Ausdruck brachte. Viele Layout-Elemente aus dem Drucksatz werden nun auch in HTML möglich. Wichtigste Neuerung aber sind die sogenannten Media Types, die es ermöglichen, einem HTML-Dokument je nach Ausgabemedium (Bildschirm, Drucker, Sprachausgabe, HandHeld, ...) ein anderes Aussehen (Hören?) zu verleihen.
Übrigens: vor wenigen Tagen, am 24. 8. 1999, hat das W3C die HTML Version 4.01 in einer Vorversion veröffentlicht, die allerdings nur geringe Korrekturen enthält.
Am selben Tag wurde eine Vorversion der neuen Sprache XHTML Version 1.0 vom W3V veröffentlicht. Diese Sprache passt HTML weiter der XML an.
XML (eXtensible Markup Language) wurde in der Version 1.0 im Februar 1998 vom W3C veröffentlicht und soll eine flexible, einheitliche, "multifunktionale" Auszeichnungssprache zur Speicherung und Übertragung jeglicher Art von Daten, seien es Texte, Datenbanken, Multimedia-Daten, u.s.w. sein. Die Eigentliche Darstellung oder Wiedergabe wird mit Hilfe von XSL (eXtensible Style Sheets) gesteuert.
DynamicHTML (DHTML) nennt man das Zusammenspiel von HTML, CSS und der Interpreter-Sprache JavaScript. Netscape führte letztere mit dem Navigator 2.0 in der Version 1.0 ein. (Früher trug diese Scriptsprache den Namen LiveScript, wurde aber in Anlehnung an die plattformunabhängige Compilersprache Java der Firma SUN später so benannt.) Mittlerweile hat es Netscape mit JavaScript bis zur Version 1.2 geschafft, wobei Microsoft speziell für den MSIE eigene Erweiterungen eingeführt hat (speziell für dynamicHTML), die aus Lizenzgründen JScript genannt werden. Über das ECMA-Kommitee, dem sowohl Netscape als auch Microsoft angehören, wurde inzwischen der Versuch einer Standardisierung unternommen. Das Ergebnis wurde in der Norm ECMA-262 festgehalten und soll sich ECMA-Script nennen.
Die Version 1 der CSS wird von den meisten aktuellen Broswsern mehr oder weniger zufriedenstellend dargestellt.
Der Microsoft Internet Explorer beherrschte grundlegende CSS-Eigenschaften bereits seit der Version 3.0, tatsächlich brauchbare Ergebnisse liefert er aber erst seit der Version 4.0. Die Version 5.0 zeigt keine wesentlichen Verbesserungen bezüglich CSS gegenüber seiner Vorgängerversion, CSS2 wird nur in geringem Umgang unterstützt. (JavaScript wird seit der Internet-Explorer-Version 3.0 unterstützt, seit dem Explorer 4 gibt es spezielle MS-Erweiterungen dafür, die JScript genannt werden.)
Netscape war zwar früher immer Marktführer im Bereich der kommerziellen Browser-Hersteller, hat aber immer wieder versucht, eigene Elemente in die Sprache HTML einzuführen (z.B. layer). Vorgaben des W3-Konsortiums wurden immer wieder ignoriert, so wurden die Cascading Style Sheets auch lange Zeit nicht den Navigator integriert. Da der Netscape Navigator 3.0 oft noch als Standard-Browser angesehen wird, dieser aber keine CSS versteht, werden diese auch heute noch spärlich eingesetzt. (JavaScript wurde von Netscape mit der Version 2.0 des Navigators eingeführt.)
Netscape hat sogar eine eigene Style-Sheet-Sprache kreiert: JSSS (JavaScript Style Sheets). Die Syntax dieser Sprache hätte sich grundsätzlich an der von JavaScript orientiert und wäre daher grundätzlich recht günstig. Aber da JSSS nur vom Netscape Navigator verstanden wird, wird diese keine weite Verbreitung finden.
Erst die Version 4.0 des Navigators beherrscht in sehr eingeschränktem Maße CSS1. Ab dieser Version hat sich der Navigator in Bezug auf die Darstellung von CSS-Eigenschaften nicht wesentlich verbessert und weist in der aktuellen Version 4.6 noch große Mängel auf. Allerdings wurde für die Zeitschrift c't eine Vorversion des Netscape Navigator 5.0 (Codename: Gecko oder Raptor) gestestet. Die künftige Version soll völlig überarbeitet worden sein und sogar große Teile der CSS-2-Spezifikationen zufriedenstellend darstellen.
Das Hauptargument gegen die Verwendung von Style Sheets ist, dass ältere, oder besser gesagt alte Browser diese nicht darstellen können. Dies ist zwar richtig, aber gerade die Computerbranche und erst recht das Internet ist ein so rasant wachsendes und sich veränderndes Gebiet, dass auf neue Techniken und Technologien nicht verzichtet werden kann. Und wir wollen unseren Schülern Zukunftstechnilogien aufzeigen und nicht technologischen Geschichtsunterricht geben. (Die beiden großen Browser und auch einige kleine gibt es auch für Window 3.x bzw. es existieren sogar einige DOS-Browser.)
Beispiel 1:
| Anzeige | HTML-Code | Dateigröße: 16.377 Byte (16,0 kB) |
Gestaltung einer HTML-Seite mit "puren" HTML unter Verwendung logischer Textauszeichnung. Dabei wird allerdings die im jeweiligen Browser eingestellte Standardschriftart und -größe (meist Times New Roman) verwendet. Die Dateigröße und damit die Ladezeit sind relativ gering.
Beispiel 2:
| Anzeige | HTML-Code | Dateigröße: 53.451 Byte (52,2 kB) |
Times New Roman ist nicht jedermanns Sache. Das von Netscape eingeführte proprietäre HTML-Tag erlaubt die Schriftformatierung in eingeschränktem Maß, allerdings muss es für jeden Absatz neu angegeben werden, was die große Dateigröße und damit Übertragungszeit erklärt.
Beispiel 3:
| Anzeige | HTML-Code | Dateigröße: 16.499 Byte (16,1 kB) |
Dasselbe Ergebnis wie Beispiel 2, allerdings mit wesentlich weniger Speicher- und Übertragungsaufwand, erreicht man mit Cascading Style Sheets!
Wir kennen alle den grundsätzlichen Aufbau einer HTML-Datei, er sei an dieser Stelle nur zur Vollständigkeit angeführt:
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Dateititel</title> </head> <body> Texte, Verweise, Graphiken, ... </body> </html> |
Dateikopf (head)
Dateikörper (body) |
Die in Spitzen Klammern <...> geschriebenen HTML-"Befehle" nennt man Tags, zusätzliche Angaben heißen Attribute.
Die erste Zeile gibt den Dokumententyp und damit die verwendete Version von HTML an. Diese Zeile ist SGML-konform und verweist auch auf die DTD (Document Type Definitions) beim W3C.
Ich möchte jetzt nicht weiter über alle verschiedenen Tags, die HTML kennt, sprechen, im Folgenden geht es um die logische Textauszeichnung, das heißt die Angabe der reinen Textstruktur als HTML-Dokument. Dies bildet die Grundlage zur Verwendung von CSS.
Die logische Grundstruktur eines Textdokumentes war schon immer Ziel des W3C, weshalb ja HTML als Abkömmling von SGML entstand. Wesentlich ist, dass Text und vor allem Überschriften hierarchisch gegliedert sein sollten. Dazu sind folgende Tags zu verwenden:
| <h1>Überschrift 1</h1> | Überschrift der höchsten Ebene (Ebene )1 |
| <h2>Überschrift 2</h2> | Überschrift eine Ebene tiefer (Ebene 2) |
| <h3>Überschrift 3</h3> | ... |
| <h4>Überschrift 4</h4> | ... |
| <h5>Überschrift 5</h5> | ... |
| <h6>Überschrift 6</h6> | Tiefeste Überschriften-Ebene |
Jeder Browser stellt die Überschriften etwas anders dar, so dass die Hierarchie allerdings erkennbar ist, meist in der Schrift Times New Roman, oder in der Nicht-Windows-Welt in einer entsprechenden Sans-Serifen-Schrift.
| <p>Die ist ein Text eines Absatzes</p> | Der Text jedes Absatzes sollte in die entsprechende Paragraph-Tags eingeklammert sein. |
Im Prinzip entsprechen diese Tags den sogenannten Formatvorlagen, wie sie in Textverarbeitungsprogrammen oder DTP-Programmen eingesetzt werden. Allerdings genauso wie dort werden diese von den Webseitengestaltern nur selten verwendet, weil die dahintersteckende Logik meist nicht erkannt wird.
Innerhalb eines Absatzes können andere logische Textauszeichnungstags verwendent werden:
| <em>Text</em> | Hervorgehoben (meist kursiv) |
| <strong>Text</strong> | Stark hervorgehoben (meist fett) |
| <cite>"Ich denke, darum bin ich"</cite> | ein Zitat (meist kursiv) |
| <code>writeln('Hallo!');</code> | Code-Abschnitt (meist monospace) |
| <kbd>dir</kbd> | Tastatureingabe (meist monospace) |
Für bestimmte Zwecke kennt HTML eigene Absatz-Tags, die von den Browsern dann auch entsprechend dargestellt werden:
| <pre> writeln('Hi!'); </pre> |
Präformatierter Text. Text wird so wie eingegeben, mit allen Leerzeichen und Einrückungen in einer Monospace wiedergegeben. Allerdings können und müssen darin HTML-Befehle verwendet werden! |
| <blockquote>Heureka!</blockquote> | Ein Zitat, das als eigener Absatz meist etwas eingerückt und kursiv dargestellt wird |
| <address> michael.ueberall@bghollabrunn.ac.at </address> |
Leitet einen eigenen Absatz für Internetadressen ein, vor allem im Zusammenhang mit Verweisen sinnvoll. |
Tags, die einen eigenen Absatz bilden heißen Block-Tags. Tags, die innerhalb eines Absatzes verwendet werden heißen Inline-Tags.
Fast jedes HTML-Tag existiert in zweifacher Form, ein öffnendes und ein schließendes Tag. Z.B. <p> und </p>. Ein Zeichen guten Programmierstils ist es, diese auch gepaart zu verwenden, ähnlich wie Klammern in der Mathematik, oder wie ein jedes BEGIN in Pascal ein END fordert! Unter reinem HTML hat das Weglassen eines End-Tags meist keine Rolle gespielt, der Browser hat es trotzdem meist korrekt dargestellt, aber bei der Verwendung von CSS ist es wichtig, die Syntax hier einzuhalten! Die neue Sprache XHTML forder dies strikt!
In HTML gibt es dazu noch die erlaubten Ausnahmen wie z.B.: <br>, <hr>, <img>). XHTML fordert in Zukunft auch noch die Angabe des entsprechenden End-Tags wie </br> oder statt dieser Kombination z.B. das neue Tag <br/> oder <hr/>
Häufig werden Tags von Web-Designern zweckentfremdet, um einen gewissen optischen Effekt zu erzielen. Paradebeispiel dafür ist das Tag <blockquote>, das von seinen Erfindern als Auszeichnung für Zitate in einem eigenen Absatz gedacht war. Da dieses Tag den entsprechenden Absatz einrückt und auch geschachelt werden kann, wird es oft dazu verwendet, eine Absatz einzurücken, sprich den Einzug zu vergrößern. Da dies mit CSS heute wesentlich einfacher geht, sollte man darauf in Zukunft verzichten.
Da verschiedenste Betriebssysteme im Internet miteinander kommunizieren und daher die Rechner unterschiedlichste Zeichensätze verwenden, sollte man bei der Verwendung von deutschen Umlauten und von Sonderzeichen darauf Rücksicht nehmen und die in HTML zur Verfügung stehenden Entities wie Ü für Ü oder ß für ß verwenden. Damit ist sichergestellt, dass die betreffenden Zeichen im Browser jedes Betriebssystems richtig dargestellt werden. (Sogar MS Frontpage 98 verzichtet auf diese Transskription! Warum wohl?)
Obwohl es in HTML 4.0 keinen unterschied zwischen Groß- und Kleinschreibung der Tags und Attribute gibt, sollte man sich auf eine einheitliche Handhabung einigen. Im Hinblick auf XHTML sei die generelle Kleinschreibung empfohlen. Setzt man Werte für einzelne Attribute, sollte diese generell in Anführungszeichen gesetzt werden, unabhängig ob es sich um eine Zeichenkette oder einen Zahlenwert handelt.
Beispiel
|
<td name="bezeichner" width="100%"> |
Die folgenden physischen Textauszeichnungstags können bei Bedarf noch verwendet werden, sollten aber nur sparsam zum Einsatz kommen!
| <b>Text</b> | Fettdruck (bold) |
| <i>Text</i> | Kursiv (italic) |
| <u>Text</u> | Unterstrichen (underline) |
| <s>Text</s> | Duchgestrichen (strike out) |
| <sub>Text</sub> | tiefgestellt |
| <sup>Text</sup> | hochgestellt |
| <tt>Text</tt> | Schreibmaschinschrift |
Auf ein von Netscape eingeführtes Tag sollte man in Zukunft vollständig verzichten, nämlich das <font>-Tag mit all seinen Attributen. Dieses ist als überholt zu betrachten, hat nur eine geringe Funktionalität und kann durch entsprechende CSS-Angaben ersetzt werden.
Auch einige andere Angaben zur physischen Textauszeichnung, die im Laufe der Zeit in HTML integriert wurden, sollten parallel zu CSS nicht verwendet werden.
| <font> <big> <small> <center> <blink> <marquee> |
Diese Tags sollten parallel zu CSS nicht mehr verwendet werden! |
Zu vielen Tags kennt HTML Attribute (z.B. align), die eventuell bei paralleler Verwendung von CSS-Eigenschaften ignoriert oder falsch dargestellt werden.
Das W3C stellt auf ihrer WebSite ein kleines Programm namens TIDY zum Download bereit, das HTML-Dateien automatisch von Fehlern bereinigt und die korrekte Syntax herstellt. Bei Bedarf werden sogar alte Tags wie <font> oder <center> durch CSS-Angaben ersetzt!
Wie schon oben angedeutet, funktionieren logische Textauszeichnungen ähnlich Formatvorlagen guter Textverarbeitungsprogramme oder DTP-Programme. Normalerweise werden die entsprechenden Tags vom verwendeten Browser interpretiert und in der Schriftart Times New Roman in verschiedenen Größen und Schnitten dargestellt.
Beispiel 4
Mit Hilfe von CSS kann man nun die Layout-Eigenschaften (fast) aller Tags (Ausnahme: Tags zur physischen Textauszeichnung) verändern. Wir werden dies jetzt an Hand der obigen Datei des Beipiels 4 ausprobieren.
Die häufigste Variante Style-Angaben für verschiedene Tags zu defnieren ist im Head-Bereich der HTML-Datei, dazu werden die Angaben innerhalb eines eigenen Style-Tags getätigt. Als Attribut wird noch der Typ der Styleangaben mit CSS gesetzt, allerdings kann darauf verzichtet werden. Damit ältere Browser die Styleagaben ingnorieren, werden diese als HTML-Kommentare mit <!-- und //--> gekennzeichnet, auch dies ist verzichtbar.
|
<html> <head> <title>Dateititel</title> <style type="text/css"> <!-- body{background-color:yellow} p,h1,h2,h3{font-family:Arial;color:#00CC00} h1{font-face:bold} //--> </style> </head> <body> ... </body> <html> |
Das Tag, dessen Eigenschaften (für das gesamte Dokument) verändert werden soll, wird angegeben, mehrere Tags, die die selben Eigenschaften haben sollen, werden durch Beistriche getrennt. In geschwungenen Klammern werden dann die entsprechenden Angaben gemacht. Die entsprechenden Eigenschaften werden nach einem Doppelpunkt auf einen passenden Wert gesetzt, mehrere verschiedene mögliche Werte werden durch Beistrich getrennt, mehrere zu ändernde Eigenschaften werden durch Strichpunkte getrennt. Leerzeichen können angegeben werden, müssen aber nicht. Besteht ein Wert einer Eigenschaft (zB Schriftart) aus mehreren durch Leerzeichen getrennten Worten, so muss diese unter Anführungszeichen gesetzt werden.
Eine Eigenschaft ein und desselben Tags kann auch mehrmals festgelegt werden, wobei "cascading" bedeutet, dass eine Definition jede vorherige überschreibt kurz: die letzte gilt!
Kommentare innerhalb einer zentralen CSS-Definition werden mit /* eingeleitet und mit */ geschlossen.
Übung
(Grundlage: sofi.htm)
Die Datei soll so abgeändert werden, dass im Head-Bereich Style-Angaben gemacht werden können. Wir versuchen nun einfache CSS-Eigenschaften aus.
Die selben zentralen Angaben können auch in einer eigenen Datei abgelegt werden, wobei die Syntax die selbe ist, wie im Head-Bereich einer HTML-Datei innerhalb des Style-Tags.
Beispiel einer CSS-Datei:
|
body{background-color:yellow} p,h1,h2,h3{font-family:Arial;color:#00CC00} h1{font-face:bold} |
Die Datei wird mit folgendem Befehl im Head-Bereich der HTML-Datei eingebunden:
| <link rel=stylesheet type="text/css" href="datei.css"> |
Übrigens kann ein und dieselbe CSS-Datei für mehrere HTML-Dateien verwendet werden, und so für ein einheitliches Aussehen einer ganzen Site gesorgt werden.
Innherhalb einer zentralen CSS-Definition, sei es im HTML-Kopf oder in einer separaten Datei, kann noch einmal eine CSS-Datei eingebunden werden. Allerdings wird dies von NS derzeit nicht durchgeführt!
| @import url(formate.css); |
Möchte man z.B. einen einzelnen Absatz oder einen durch ein Tag eingeklammertern Bereich direkt eigene Eigenschaften zuweisen, so lässt sich dies durch das Attribut style bewerkstelligen, wobei dann innerhalb der Anführungszeichen die selbe Syntax gilt wie bei der zentralen Definition innerhalb der geschwungenen Klammern.
z.B.:
| <p style="font-family:Tahoma;font-size:16pt;color:red; background-color:red">Absatztext</p> |
In HTML kann ein Bereich aus mehreren Absätzen als Bereich zwischen <div> und </div> zusammengefasst werden, auch dieses Tag kann das Attribut style erhalten und so können Eigenschaften einem ganzen Bereich zugewiesen werden.
z.B.:
| <div style="text-align:center">Bereich</div> |
Das Tag <span> alleine bewirkt gar nichts, allerdings gemeinsam mit dem Attribut style erlaubt es CSS-Angaben für einige Zeichen oder Wörter.
z.B.:
| <p>Es war die <span style="color:red">rote</span> Armee!</p> |
Die folgenden Angaben legen keinen Wert auf Vollständigkeit, sie sollen nur beispielhaft die Möglichkeiten der CSS-Eigenschaften und deren Werte aufzeigen. Für eine genauere Referenz sei auf andere Werke z.B. SelfHTML von Stefan Münz verwiesen!
Gerade dieses Werk wurde selbst unter Verwenung von CSS erstellt und die entsprechende Datei wselfhtm.css mit seinen ausführlichen Erklärungen kann sehr hilfreich beim Erlernen von CSS sein.
| Abkürzung | Einheit | Hinweis |
|---|---|---|
| mm | Millimeter | absolute Maße (für Bildschirmdarstellung eher ungeeignet, aber für Druckerausgabe verwendbar) |
|
cm |
Centimeter | |
| in | Inch (Zoll) | |
| pt | Punkt | absolutes Maß für Schriftgrößen |
| px | Pixel (Bildschirmpunkt) | relative Maße |
| % | Prozent gegenüber Norm |
Wie schon in HMTL werden Farben meist in einem Hexadezimalen Format angegeben. Eingeleitet durch # folgen darauf die Werte für die Farben Rot, Grün und Blau, wobei diese Werte von 0 bis 255 in hexadedzimaler Schreibweise annehmen dürfen.
Für viele Farben sind bereits in HTML spezielle Farbnamen definiert (mehr als 100), darunter die 16 Grundfarben:
| black maroon green olive navy purple teal grey silver red lime yellow blue fuchsia aqua white |
Da das Hexadezimalsystem nicht jedermanns Sache ist, führt man mit CSS auch die Möglichkeit der dezimalen Angabe der RGB-Werte ein.
Beispiel:| rgb(0,125,200) | Die Zahlenangaben sind wieder die Farbwerte für rot, grün und blau von 0 bis 255. |
| rgb(0%,45%,90%) | Wieder die Farbwerte für rot, grün und blau, allerdings von 0% bis 100%. |
| Eigenschaft | Wert | Bedeutung |
|---|---|---|
| font-family: | 'Arial Black' | beliebige Schriftart Bei auftretendem Leerzeichen unter Anführungszeichen |
| serif | Serifen-Schrift | |
| san-serif | Serifenlose Schrift | |
| font-style: | italic | kursiv |
| oblique | kursiv | |
| normal | ||
| font-variant: | small-caps | Kapitälchen |
| normal | ||
| font-size: | 10pt | beliebige Größenangabe |
| xx-small | winzig | |
| x-small | sehr klein | |
| small | klein | |
| medium | mittel | |
| large | groß | |
| x-large | sehr groß | |
| xx-large | riesig | |
| smaller | sichtbar kleiner als normal | |
| larger | sichtbar größer als normal | |
| font-weight: | bold | fett |
| bolder | extra-fett | |
| lighter | dünner | |
| text-decoration: | underline | unterstrichen |
| overline | überstrichen | |
| line-through | durchgestrichen | |
| blink | blinkend | |
| none | normal | |
| color: | red | Textfarbe, beliebig (siehe oben!) |
| text-shadow: | grey | Schattenfarbe für Text |
| Eigenschaft | Wert | Bedeutung |
|---|---|---|
| text-align: | left | linksbündig |
| right | rechtsbündig | |
| center | zentriert | |
| justify | Blocksatz | |
| text-indent: | 15px | Texteinrückung (beliebige Zahlenangabe) |
| line-height: | 12pt | Zeilenhöhe (beliebige Zahlenangabe) |
| white-space: | nowrap | kein Textumbruch |
| margin-top: | 10px | Abstand/Rand oben |
| margin-bottom: | 10px | Abstand/Rand unten |
| margin-left: | 10px | Abstand/Rand links |
| margin-right: | 10px | Abstand/Rand rechts |
| margin: | 10px | alle Ränder |
| Eigenschaft | Wert | Bedeutung |
|---|---|---|
| background-color: | aliceblue | Hintergrundfarbe |
| background-image: | url(images/back.gif) | Hintergrundbild (Pfadangabe in Klammern wie HTML) |
| background-repeat: | repeat | Wiederholung des Hintergrundbildes |
| repeat-x | nur eine Zeile lang wiederholen | |
| repeat-y | nur eine Spalte lang wiederholen | |
| norepeat | nicht wiederholen, nur Einzelbild | |
| background-attachment: | scroll | mitscrollen |
| fixed | Hintergrundbild bleibt stehen | |
| background-position: | 100px 150px | Hintergrundposition |
| background: | url(images/back.gif) norepeat fixed 100px 150px | zusammengesetzte Angabe |
| border-top-width: | thin | Rahmendicke oben |
| border-bottom-width: | medium | Rahmendicke unten |
| border-left-width: | 1px | Rahmendicke links |
| border-right-width: | 0.3cm | Rahmendicke rechts |
| border-width: | 1px | Angabe für alle Rahmenlinien |
| border-color: | blue | Rahmenfarbe |
| border-style: | dotted | gepunktet |
| dashed | gestrichelt | |
| solid | durchgezogen | |
| double | doppelt | |
| ridge | 3D-Effekt | |
| groove | 3D-Effekt | |
| inset | 3D-Effekt | |
| outset | 3D-Effekt | |
| none | kein Rahmen (unsichtbar) | |
| padding-top: | 2px | Innenabstand oben |
| padding-bottom: | 2px | Innenabstand unten |
| padding-left: | 1cm | Innenabstand links |
| padding-right: | 10mm | Innanabstand rechts |
| padding: | 3px | zusammengesetzte Angabe |
| Eigenschaft | Wert | Bedeutung | |
|---|---|---|---|
| list-style-type: | decimal | Nummerierung mit 1, 2, 3, ... | für<ol> |
| lower-roman | Nummerierung mit i, ii, iii, ... | ||
| upper-roman | Nummerierung mit I, II, III, ... | ||
| lower-alpha | Nummerierung mit a, b, c, ... | ||
| upper-alpha | Nummerierung mit A, B, C, ... | ||
| circle | rundes Bulletzeichen | für<ul> |
|
| square | rechteckiges Bulletzeichen | ||
| disc | Scheibe | ||
| none | keine Nummerierung, kein Bulletzeichen | für<ul>und <ol> |
|
| list-style-position: | inside | eingerückt | |
| outside | hinausgerückt | ||
| list-style: | square inside | zusammengesetzte Angabe |
Das Tag <body> leitet in HTML den eigentlich darzustellenden Dokumentbereich ein und erlaubt diverse Attribute für zentrale Einstellungen wie Hintergrund und Farbdarstellung der Links. Wesentlich mehr Layout-Eigenschaften lassen sich per CSS-Definition für das <body>-Tag einstellen. Links werden bekanntlich mit dem anchor-Tag <a> ausgezeichnet, und auch dieses lässt sich festlegen:
Beispiel:
|
<style type="text/css"> body{margin:10px;background-image:url(hinter.gif);background-attachment:fixed} a:link{color:blue;text-decoration:underline} a:visited{color:purple;text-decoration:underline} a:active{color:purple;text-decoration:none;font-style:italic} a:hover{color:red;font-weight:bold} </style> |
Hinter einem Dopplepunkt nach der Tag-Angabe werden sogenannte Pseudoformate festgelegt, wobei beim Anchor-Tag <a> die folgenden erlaubt sind:
| a:link | Link, der noch nicht aufgerufen wurde |
| a:visited | Link, der schon einmal besucht wurde |
| a:active | Link, der gerade aufgerufen wird |
| a:hover | Link, wenn Mauszeiger darüber (wird derzeit nur von MSIE interpretiert) |
Grundsätzlich kann man nur die in HTML zur Verfügung stehenden Tags mit Hilfe von CSS umdefinieren. Günstig wäre es, wenn man sich für spezielle Zwecke seine eigenen Tags einführen könnte, aber dafür müssen wir noch auf XML (eXtensible Markup Language) warten. Wenn Ihnen also das vorhandene Repertoire von HTML-Tags zu klein ist, so können sie Varianten davon, sogenannte Klassen, bestimmen.
Dazu wird in der zentralen Definition zuerst das entsprechende Tag notiert und daran durch einen Punkt getrennt der Klassennamen.
|
<style> p{font-family:Arial;font-size:12pt; text-align:justify} /* ohne Klasse */ p.autor{font-style:italic;text-align:right} p.klein{font-size:10pt} .rot{color:red} /* bezieht sich auf alle Tags */ all.blau{color:blue} /* ebenso */ .gross{font-size:130%} /* sowieso */ </style> |
Im Dokument muss dann beim entsprechenden Tag als Attribut die zugrundeliegende Klasse angegeben werden.
|
<p class="klein">Kleiner geschriebener Text</p> <h1 class="rot">Rote Überschrift</h1> <h3 class="rot">Kleine rote Überschrift</h3> |
Wenn in der zentralen Definition vor der Klassebezeichnung kein Tag angegeben ist oder das Schlüsselwort all steht, so spricht man von einer leeren Klasse und die Angaben bezeihen sich auf alle Tags. Dabei ist es allerdings sinnvoll auf absolute Größenangaben zu verzichten und dafür relative wie % zu verwenden!
Mit Hilfe von StyleSheets kann man auch bestimmen, dass ein HTML-Tag bestimmte Eigenschaften nur dann hat, wenn es innerhalb eines anderen HTML Tags vorkommt.
|
<style type="text/css"> em{font-style:italic;color:red} h1 em{font-weight:bold;color:blue} </style> |
Die obige Definition legt das Aussehen für <em> fest, allerdings zeigt es innerhalb einer Überschrift der Ebene 1 ein anderes Bild. Für abhängige Formate wird in der zentralen Definition zuerst das übergeordnete Tag notiert und danach, durch ein Leerzeichen getrennt, das untergeordnete Tag.
Die Spezifikationen zu CSS in der Version legen sogar noch andere Arten von Abhängigen Formaten fest, die aber derzeit nocht nicht in den Browsern implementiert sind.
Für ein einzelnes, benanntes Tag, ist es möglich im Dateikopf oder in einer externen CSS-Datei Style-Angaben zu machen.
In der zentralen Style-Definition wird der Name (= die ID) des Tags durch ein # eingeleitet:
|
#supi{font-family:'Arial Black',sans-serif;font-size:50pt;color:red} |
Das Tag, das diesen Namen (diese ID) und damit diese Eigenschaften tragen soll, wird mit dem Attribut id benannt. Jede ID muss in einem HTML-Dokument eindeutig sein!
| <p id="supi">Juuubeeel!</p> |
Für bestimmte Tags gibt es zusätzliche Layout-Angaben, die in Form von sogenannten Pseudo-Formaten angegeben werden. Für das <a>-Tag haben wir bereits die Pseudo-Formate :link, :visited, :active und :hover kennengelernt
Für Absatz-Formate bzw. Block-Tags werden in CSS2 folgende Pseudoformate ermöglicht, da allerdings noch kein aktueller Browser interpretiert.
| p:first-letter{font-size:20pt} | In jedem mit <p> ausgezeichneten Absatz wird der erste Buchtstabe entsprechend den Style-Angaben speziell dargestellt. (Initial) |
| p.spezi:first-line{font-weight:bold} | In den Absätzen der Klasse spezi wird die gesamte erste Zeile entsprechend den Angaben speziell dargestellt. |
| h1:befor{content:"Thema: "} | Allen Überschriften der Ebene 1 werden mit der in Anführungszeichen angegebenen Zeichenkette eingeleitet. Dieser Text wird automatisch hinzugefügt! |
| h2:after{content:"...!!!"} | Allen Überschriften der Ebene 2 werden mit der in Anführungszeichen angegebenen Zeichenkette abgeschlossen. Dieser Text wird automatisch angefügt! |
Mit herkömmlichem HTML musste man sich bisher mit Tabellen behelfen, um Text, Graphiken und Bilder an die richtige oder exakte Position im Browser-Fenster zu bekommen. Mit CSS hat man nun die Möglichkeit einzelne Elemente pixel-genau auf den Bildschirm zu setzen.
Schon mit dem <layer>-Tag hat vor einigen Jahren Netscape selbständig versucht Ähnliches zu erreichen, aber aus Inkompatibilitätsgründen hat sich diese sogenannte Layer-Technik nicht durchgesetzt.
Die hier vorgestellte Technik ist unter anderem auch die Grundlage von dynamicHTML, weil sich die Positions- und Größeneigenschaften eines benannten Elements dynamisch per JavaScript ändern lassen.
Folgendes stellt CSS zur Verfügung:
| Eigenschaft | Wert | Bedeutung |
|---|---|---|
| position: | absolute | Positionsangaben werden vom Fensterrand weg gemessen, Objekte werden beim Scrollen mitbewegt |
| relative | Positionsangaben werden vom Vorgängerelement weg gemessen | |
| static | Element bleibt im Textfluss (Normalfall!) | |
| fixed | Positionsangaben werden vom Fensterrand weg gemessen, Objekte werden beim Scrollen nicht mitbewegt |
|
| top: | 100px | Oberer Rand des Elements |
| left: | 30px | Linker Rand des Elements |
| width: | 100px | Breite des Elements |
| height: | 150px | Höhe des Elements |
ACHTUNG: Netscape reagiert bei der Verwendung von <img>-Objekte, sprich eingebundenen Graphiken, sehr eigenwillig, wenn die Breite und Höhe einer Graphik als CSS-Angabe gemacht wird!
| Eigenschaft | Wert | Bedeutung |
|---|---|---|
| float: | left | Element wird links angeordnet, nachfolgender Text fließt rechts davon |
| right | Element wird rechts angeordnet, nachfolgender Text fließt links davon | |
| none | Kein Umfließen des Elements durch Text | |
| clear: | left | Mit float:left eingestellter Umfluss wird abgebrochen. |
| right | Mit float:right eingestellter Umfluss wird abgebrochen. |
|
| both | Mit float:left oder mit float:right eingestellter Umfluss wird abgebrochen. |
|
| none | Umfluss wird nicht abgebrochen. |
| Eigenschaft | Wert | Bedeutung |
|---|---|---|
| z-index: | 5 | Schichtnummer |
Bei absolut positionierten, einander überlappenden Elementen kann die Schichtreihenfolge angegeben werden. Je höher die Zahl, desto weiter oben. Ohne diese Angabe werden sie in der Reihenfolge, in der sie definiert wurden, übereinandergelegt.
| Eigenschaft | Wert | Bedeutung |
|---|---|---|
| display: | block | Erzwingt einen Block - das Element erzeugt einen eigenen Absatz |
| inline | Erzwingt die Anzeige direkt im Fließtext - das Element erzeugt keinen eigenen Absatz | |
| list-item | Wie block, jedoch wird davor ein Aufzählungszeichen gesetzt |
|
| none | Element wird nicht angezeigt, es wird auch kein Platz freigehalten | |
| visibility: | visible | Element ist sichtbar (nach CSS-Spezifikation) |
| hidden | Element ist unsichtbar (nach CSS-Spezifikation) | |
| show | Element ist sichtbar (wie es Netscape versteht) | |
| hide | Element ist unsichtbar (wie es Netscape versteht) | |
| clip: | rect(10px 30px 100px 150px) | Von einem Element wird nur der angegebene Bereich angezeigt. Bedeutung der Zahlen: oben rechts unten links |
Leider interpretieren MS Internet Explorer und Netscape Navigator die CSS-Angaben erstens unterschiedlich, zweitens unvollständig und drittens widersprüchlich. Noch dazu verwenden beide Browser eine unterschiedliche Syntax von JavaScript, was die Änderung von Style-Eigenschaften aus diesem Bereich betrifft.
Grundsätzlich läßt sich feststellen, dass der MS Internet Explorer eine wesentlich flexiblere Handhabung ermöglicht und wirkliche "Dynamik" zulässt. So können fast alle Eigenschaften jedes beliebigen mit dem Attribut id="..." benannten Tag per JavaScript verändert werden.
Zwar kennt Netscape das <layer>-Objekt, das auch sehr viele Manipulationsmöglichkeiten ermöglicht, allerdings ist es weder W3C-konform, noch wird es von anderen Broswern verstanden. Solche Objekte lassen sich durch <div>-Bereiche simulieren.
Um Inkompatibilitäten zu vermeiden, sollte man dynamische Objekte, d.h. Objekte deren Position, Größe oder andere Eigenschaften per JavaScript geändert werden sollen, als Bereich zwischen <div> und </div> eingefasst sein. Sobald die Style-Angabe dafür dann mit position:absolute gesetzt wird, erkennen ältere Versionen der beiden Browser, dass es sich um ein dynamisches Objekt handelt.
Ein dynamisches Objekt könnte daher folgendermaßen in einem HTML-Dokument definiert sein:
| <div id="kasten" style="position:absolute;left:75px;background-color:yellow;color:red;visibility:visible;visibility:show">text</div> |
Dieses Objekt wird im Browser über dem Fließtext liegend dargestellt. Daher sollte man mit den CSS-Eigenschaften background-color: oder background-image: einen Hintergrund festlegen, sodass der Hintergrund nicht durchscheint. Oder man muss im Fließtext einen Platzhalter einbauen.
Die folgenden JavaScripts, im Head-Bereich der HTML-Datei untergebracht, lassen das oben definierte Objekt vom Bildschim verschwinden oder auch wieder erscheinen.
<script language="javascript">
function verstecken()
{
if(document.layers)
document.layers['kasten'].visibility="hide";
else
document.all['kasten'].style.visibility="hidden";
}
function zeigen()
{
if(document.layers)
document.layers['kasten'].visibility="show";
else
document.all['kasten'].style.visibility="visible";
}
</script>
|
Die if-Abfrage ist auf Grund der unterschiedlichen Syntax von Netscape Navigator (if-Zweig) und MS Internet Explorer (else-Zeig) notwendig.
Aufgerufen werden diese beiden Scripts z.B. durch folgende Links:
| <a href="javascript:verstecken();">Verstecken</a> <a href="javascript:zeigen();">Anzeigen</a> |
Möchte man die Position des Objektes verändern, so kann man folgendes Script verwenden:
function nachrechts()
{
if(document.layers)
document.kasten.left+=10;
else
kasten.style.left=parseInt(kasten.style.left)+10;
}
|
Hier ist wieder die unterschiedöiche Handhabung für die beiden großen Browser erkennbar. Während NS diese Eigenschaften numerisch speichert, werden alle Eigenschaften von MSIE als Zeichenketten (samt Einheit) behandelt.
Diese Beispiele sollen nur die Möglichkeiten aufzeigen, die CSS und JavaScript in Kombination bieten. Ich hoffe damit nicht zu sehr auf den noch folgenden Seminarteil "JavaScript" vorgegriffen zu haben. Aber ich hoffe, sie haben einen Eindruck bekommen von den Möglichkeiten, die dynamicHTML bietet, und die Schwierigkeiten, die die verschiedenen Ansätze von NS und MSIE hervorrufen.
Wer mehr über dynamicHTML wissen möchte, dem sei die Internet-Seite "Milch & Zucker" empfohlen, die es in gezippter Form auch zum Download gibt, und die detailierte Lösungsvorschläge zu dynamischen Webseiten gibt und dabei beide großen Browser berücksichtigt!
Unter dem Schlagwort "Cross Media" bieten CSS unterschiedliche Formatvorlagen für unterschiedliche Ausgabemedien. So kann eine WebSite angepasst werden für die normale Bildschirmausgabe, für den Ausdruck, für das Mini-Display eines HandHeld usw.
|
<head> <link rel="stylesheet" media="screen" href="bildschirm.css"> <link rel="stylesheet" media="print" href="drucker.css"> <link rel="stylesheet" media="aural" href="sprache.css"> </head> |
Wobei folgende Medienangaben erlaubt sind:
| erlaubte Angaben | Medium | Erläuterung |
|---|---|---|
| screen | Bildschirm | StyleSheet als Grundlage für die Bildschirmausgabe |
| Drucker | StyleSheets, die bei der Ausgabe über den Drucker wirksam werden sollen | |
| aural | Lautsprecher | StyleSheet, das bei der Sprachausgabe über Lautsprecher verwendet werden soll |
| projection | Projektor | StyleSheets für Projektionsapparate |
| braille | Braille-Medien | Ausgabe in Blindenschrift |
| tv | Fernseher | Ausgabe über Fernsehtechnik |
| handheld | kleines Display | Ausgabe auf Handys, Handheld-PCs oder ähnlichen Geräten mit sehr kleinem Display |
| all | alle Medien | StyleSheets, die in allen Medientypen wirksam sein sollen |
Viele dieser Medien sind zwar schon vorgesehen, die entsprechenden CSS-Eigenschaften sind allerdings kaum bis noch gar nicht spezifiert und schon gar nicht in den Browsern implementiert. Für die Zukunft können wir gerade in diesem Bereich noch einiges erwarten.
Übrigens nur der MS Internet Explorer interpretiert derzeit (Versionen 4 und 5) das Attribut media im <link>-Tag.
In Zukunft sollen die Browser, geht es nach dem W3C Konsortium, noch besser mit verschiedenen Ausgabemedien in Zusammenarbeit mit CSS umgehen können. Grundlage ist dazu das "Media Type Model" der CSS2-Norm. Eine CSS-Angabe könnte dann folgendermaßen aussehen:
<style type="text/css">
@media screen{
body,p,td,li{font-family:Arial;font-size:12pt}
}
@media print{
body,p,td,li{font-family:'Times New Roman';font-size:10pt}
@page{size:29.7cm 21cm;margin 2cm}
@page:header{content: ,first(chapter), ;border-bottom:thin solid black}
@page:footer{content: ,"Seite " decimal(pageno), ;border-top:thin solid black}
}
</style>
|
Diese Angaben interpretiert noch keiner der aktuellen Browser. Für die verschiedenen Ausgabemedien hält CSS2 neue zusätzliche Befehle bereit, die in Zukunft noch einiges erwarten lassen!
Die beiden großen Browser-Hersteller bauen in ihre Produkte ständig neue Features ein, die allerdings nicht standardisiert sind und daher meist nicht von der Konkurrenz anerkannt werden.
Mit Hilfe von verschiedenen Filtern mit unterschiedlichsten Optionen lässt sich das Aussehen von Schriften und Graphiken stark verändern und kann damit Effekte Erzielen, die heute nur durch byte-intensive GIF-Graphiken erzeilt werden können. Dazu wird eine neue CSS-Eigenschaft filter: eingeführt, die als Wert die entsprechenden Einstellungen erfordert. (MSIE ab 4.0)
Das Aussehen des Mauszeiger lät sich verändern, je nach dem über welchem Objekt dieser sich gerade befindet. Ein CSS-Eigenschaft cursor: läßt dafür Standard-Mauszeiger einstellen, oder sogar ein spezielles Cursor-Symbol aus einer Datei laden. (MSIE ab 4.0)
Beim Aufrufen oder Verlassen einer Seite könne verschiedene Arten der Überblednung zwischen zwei Seiten eingestellt werden. Realisiert wird dies durch die Angabe in einem <meta>-Tag. (MSIE ab 4.0)
Da die Darstellung einer WebSite oft durch das Fehlen von Schriftarten auf der Client-Seite beieinträchtigt sein kann, hat Netscape diese neue Technik entwickelt, bei der zu verwendete Schriftarten ebenfalls heruntergealden werden (müssen). Es ist soweit sichergestellt, dass diese Fonts vom Client nicht weiterverwendet werden können. Eingebunden können diese Fonts in HTML durch Angabe der URL in einem eigenen link-tag und anschließender Verwendung im Font-Tag, oder durch eine spezielle CSS-Angabe. (NS ab 4.0, MSIE mit speziellem ActiveX-Control
Großer Nachteil dabei ist, dass die notwendige Font-Datei durch ein Tool erst erstellt werden muss. Microsoft arbeitet an einem eigenen Ansatz zur Verwendung von TrueType- und Type1-Schriften. Hier waäre eine Standardisierung durch das W3C notwendig.
Stand: Mittwoch, 01. September 1999 09:20:08
Autor: Mag. Michael Überall