2. Css: Formatierung und Anordnung mit Cascading Style Sheets

2.1 Gezielt Elemente per Css gestalten: Tags und Klassen

Css erlaubt Ihnen, zentral die Layout-Eigenschaften von HTML-Elementen zu verändern. Wenn Sie zum Beispiel erreichen wollen, dass alle <h1>-Überschriften nicht schwarz sondern blau erscheinen, dass können Sie das im Inline-Stil mit <h1 style="color:blue">Einführende Beispiele</h1> erreichen. Ein Beispiel sehen Sie in der Datei css-styling-h1-00.html. Bitte betrachten Sie unbedingt auch den Quellcode dieser Datei.

Übungsaufgabe Speichern Sie sich die Datei css-styling-h1-no-style.html auf Ihrem Rechner und öffnen Sie sie mit einem Code-Editor, damit Sie das, was wir jetzt diskutieren, sofort ausprobieren können.

Den gleichen Effekt erreichen wir in css-styling-h1-01.html, indem wir die Fontfarbe blau per Css für alle <h1>-Tags definieren. Beachten Sie die neuen Zeilen im Head des HTML-Dokuments:

<style>
    h1 {
        color: blue;
    }
</style>

Was Sie zwischen dem <style>-Tag und dem schließenden </style>-Tag sehen, ist Css-Code. Im Allgemeinen folgt Css-Code diesem Format:

Wir können auch mehrere Elemente gleichzeitig ansprechen und mehrere Properties gleichzeitig definieren:

<style>
    h1, h2,h3 {
        color: blue;
        text-decoration: underline;
    }
</style>

Ein Beispiel sehen Sie in der Datei css-styling-h1-02.html. Wenn Ihr Css-Code eine gewisse Größe angenommen hat und insbesondere, wenn Sie den gleichen Code in mehreren HTML-Dokumenten verwenden wollen, sollten Sie ihn unbedingt in eine eigene .css-Datei auslagern. Sie binden ihn in die HTMl-Datei ein, indem Sie im Head folgende Zeile einfügen

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

und dann einfach den Css-Code ohne <style>-Tags in die Datei example.css (oder wie auch immer Sie sie nennen wollen) einfügen:

h1, h2, h3 {
    color: blue;
    text-decoration: underline;
}
Das Ergebnis sieht genau gleich aus, so zum Beispiel in der Datei css-styling-h1-03.html. Hier nochmal alle vier Beispieldateien zur Übersicht:

Sie haben nun im Prinzip gelernt, wie man für alle HTML-Elemente eines bestimmten Tag-Typs (zum Beispiel alle <h1>-Elemente) den Stil festlegt oder verändert. Ab jetzt gilt es, zwei Bereiche zu verstehen:

  1. Auf welche Weise kann ich aus Css heraus HTML-Elemente gezielt ansprechen?
  2. Welche Stilparameter kann ich wie verändern?
Auf die Frage, wie man denn den Stil definieren sollte, also zum Beispiel damit es gut, modern, chic, übersichtlich aussieht, darauf können wir nur beschränkt eingehen; es ist ja ein Kurs über Web-Engineering, nicht Web-Design.

Css-Klassen

Übungsaufgabe Speichern Sie example-css-no-style.html und öffnen es mit einem Code-Editor. Öffnen Sie nun in einem neuen Browser-Tab. Arbeiten Sie sich durch die Beispiele durch und probieren Sie es selbst an der gespeicherten Datei example-css-no-style.html aus.

Exercise

Nehmen Sie die Datei example-css-05.html und erweitern Sie diese um eine Css-Klasse .code-comment, der Ihnen erlaubt, Kommentare in Ihre Racket-Listings (bash, C, Java...)einzufügen. Die Kommentare sollten orange und kursiv erscheinen. Das Ergebnis sollte ungefähr so aussehen:

Css-Kombinatoren

Sie haben zwei Weisen gelernt, HTML-Elemente von Css aus anzusprechen. Mit

xyz {
   property1: value1; 
   property2: value2;
}

setzen Sie die entsprechenden Eigenschaften für alle <xyz>-Elemente, also für alle Elemente, die durch einen <xyz>-Tag erzeugt worden sind. Die andere Weise ist über Klassen. Mit

.werbhjzxsdfjklw {
   property1: value1; 
   property2: value2;
}

setzen Sie die Eigenschaften für alle HTML-Elemente, die die Klasse werbhjzxsdfjklw besitzen; das heißt also, die durch einen Tag der Form <bla class="werbhjzxsdfjklw"> erzeugt worden sind. Der Terminus Technicus dafür lautet Css-Selektor. In unserem obigen Beispiel ist xyz ein Tag-Selektor, weil er alle HTML-Elemente eines gewissen Tags auswählt. Dahingegen ist .werbhjzxsdfjklw ein Klassen-Selektor, weil er alle Elemente mit Klasse .werbhjzxsdfjklw auswählt.

Sie können Selektoren kombinieren. Sie haben weiter oben schon h1, h2, h3 { ... } kennengelernt: das wählt alle Elemente aus, deren Tag <h1> oder <h2> oder <h3> ist. Ein weiterer häufiger Kombinator ist zum Beispiel tagname.classname {...} wie in

pre.racket {
   ...
}
was alle <pre>-Elemente auswählt, bei denen die Klasse racket gesetzt ist. Eine Liste vieler Kombinatoren finden Sie auf w3schools. Ich empfehle Ihnen, alles nach den ersten neun Selektoren erstmal zu ignorieren.

Exercise

Erweitern Sie die Datei example-css-05.html um eine Css-Klasse .keyword. Keywords der jeweiligen Sprache sollen fett gedruckt sein. Allerdings soll der Effekt je nach Sprache auch variieren können. In Racket sollen Keywords zusätzlich unterstrichen werden. In C sollen Keywords zusätzlich eine andere Farbe bekommen.

Führen Sie nicht drei neue Klassen ein (.python-keyword, .racket-keyword, .c-keyword). Führen Sie eine neue Klasse .keyword ein und nutzen Sie die Css-Kombinatoren, um zu erreichen, dass der Effekt je nach Umgebung variiert. Das Ergebnis kann zum Beispiel so aussehen:

Fehlerquelle. Bitte beachten Sie, dass Css-Klassennamen immer mit voran gestelltem Punkt anspricht, also .keyword und .python und .code-comment. Wir tun dies auch, wenn wir über Klassennamen reden. Vergessen Sie aber nicht, dass der Klassenname, wenn er im HTML-Dokument gesetzt wird, ohne Punkt angegeben werden muss, also <pre class="python"> und nicht <pre class=".python">. Letzteres ist bei mir eine beliebte häufige Fehlerquelle.

Übungsaufgabe Erstellen Sie Css-Code, der die Klasse zitat und zitatquelle passend gestaltet. Wir verwenden hier das Html-Tag <div>, das einen vertikal abgesetzten Bereich bezeichnet (im nächsten Teilkapitel mehr darüber).

Der Html-Quelltext

<body>
    <h2>Css-Klasse für Zitate</h2>
    <p>
        Ich definiere eine separate Klasse <code>zitat</code>, mit der ich Zitate in einem Text 
        anbringen und gezielt gestalten kann.
    </p>
    <div class="zitat">
        Alle glücklichen Familien sind einander ähnlich; jede unglückliche Familie ist auf ihre Weise unglücklich. —
        Im Hause der Oblonskiy herrschte allgemeine Verwirrung. Die Dame des Hauses hatte in Erfahrung gebracht, daß ihr
        Gatte mit der im Hause gewesenen französischen Gouvernante ein Verhältnis unterhalten, und ihm erklärt, sie
        könne fürderhin nicht mehr mit ihm unter einem Dache bleiben. Diese Situation währte bereits seit drei Tagen und
        sie wurde nicht allein von den beiden Ehegatten selbst, nein auch von allen Familienmitgliedern und dem Personal
        aufs Peinlichste empfunden. Sie alle fühlten, daß in ihrem Zusammenleben kein höherer Gedanke mehr liege, daß
        die Leute, welche auf jeder Poststation sich zufällig träfen, noch enger zu einander gehörten, als sie, die
        Glieder der Familie selbst, und das im Hause geborene und aufgewachsene Gesinde der Oblonskiy.
        <div class="source">Leo N. Tolstoi, <em>Anna Karenina</em></div>
    </div>
</body>

soll folgendes Ergebnis liefern:

Übernehmen Sie meinen Html-Code und schreiben nur das passende Css dazu.

Tip: Sie müssen hierfür mehrere Dinge verwenden, die ich nicht explizit erwähnt habe; wie bekommen Sie beispielsweise die runden Ecken hin? Egal, wieviel ich Ihnen in der Vorlesung erzähle, es wird nie wirklich ausreichen. Daher: suchen Sie im Internet! Suchen Sie beispielsweise nach Css runde Ecken oder Css round corners. Langfristig ist es wohl besser, Sie suchen auf Englisch, denn da ist der Pool an potenziellen Suchergebnissen größer.