Die Speisekarte ist die nächste Unterseite, die wir anlegen werden.
Übung: Speisekarte vorbereiten
Bitte bereiten Sie das Dokument speisekarte.html
so
vor, dass wir uns um die Auszeichnung des Contents kümmern
können. Erstellen Sie das Dokument auf Basis der
ueber-uns.html
, passen Sie Titel
sowie Navigation an und leeren Sie das #content
-Element.
Beim Blick auf den Entwurf (siehe Abbildung 8.2) drängt sich keine bestimmte Art der Auszeichnung auf.
Was ist auf dem Screenshot zu sehen? Überschriften,
Absätze und Listen? Aber welche Art von Listen? Vielleicht
Definitionslisten mit dem Gericht und dessen Beschreibung als
Definitionsterm und dem Preis als Definitionsbeschreibung? Eher
nicht. Oder vielleicht nur mit dem Gericht als Definitionsterm?
Dann müssten wir die Beschreibung und den Preis im
dd
-Element unterbringen, aber wie
zeichnen wir diese dann aus? Als Tabelle?
Bleiben wir einmal bei der Tabelle. Können wir die gesamte Speisekarte nicht vielleicht mittels einiger Tabellen auszeichnen? Die Gerichte in der linken Spalte und deren Preise in der rechten? Probieren wir es aus:
<table> <tr> <td>Knoblauchbrot<br /> frisch aus dem Ofen</td> <td>1,80 €</td> </tr> <tr> <td>Hausgemachte Tomaten-Cremesuppe<br /> mit Knoblauchcroutons</td> <td>2,80 €</td> </tr> <!-- weitere Gerichte --> </table>
Das könnte funktionieren. Auch die Überschriften bekommen wir bequem unter:
<table> <caption>Vorspeisen und Suppen</caption> <tr> <td>Knoblauchbrot<br /> frisch aus dem Ofen</td> <td>1,80 €</td> </tr> <tr> <td>Hausgemachte Tomaten-Cremesuppe<br /> mit Knoblauchcroutons</td> <td>2,80 €</td> </tr> <!-- weitere Gerichte --> </table>
Fehlen noch zwei Kleinigkeiten:
- Im Entwurf ist der Name der Gerichte
größer und fetter als gewöhnlicher
Fließtext und zudem in einer anderen Farbe dargestellt.
Ich denke, hinter dieser Betonung steckt auch eine
semantische Bedeutung. Wir sollten die Namen der Gerichte mit
em
oderstrong
auszeichnen. Ich verwende in solchen Fällen meistensstrong
(stark betont), obwohlem
(betont) vielleicht die bessere Alternative wäre. - Wir sollten für alle Tabellen
der Speisekarte eine gemeinsame Klasse vergeben, um sie von
anderen Tabellen unterscheiden und gezielt formatieren zu
können. Aus demselben Grund sollten wir die Preiszellen
mit einer Klasse versehen. Die Preise sehen übrigens
genau so aus wie die Namen der Gerichte, allerdings gibt es
keinen semantischen Grund, sie ebenfalls mit
em
oderstrong
auszuzeichnen.
<table class="speisekarte"> <caption>Vorspeisen und Suppen</caption> <tr> <td><strong>Knoblauchbrot</strong><br /> frisch aus dem Ofen</td> <td class="price">1,80 €</td> </tr> <tr> <td><strong>Hausgemachte Tomaten-Cremesuppe</strong><br /> mit Knoblauchcroutons</td> <td class="price">2,80 €</td> </tr> <!-- weitere Gerichte --> </table>
Die Auszeichnung mittels Tabellen
funktioniert. Sie ist praktikabel, einfach und semantisch sauber.
Wir können den Rest der Speisekarte auf dieselbe Art und
Weise auszeichnen. Ich führe den Quelltext an dieser Stelle
nicht komplett auf, weil sich der Schritt für Schritt
ausgezeichnete Quelltext nur noch wiederholt, aber Sie
können sich die speisekarte.html
im
Downloadpaket anschauen.
Übung: Speisekarte, Markup
- Fügen Sie die Inhalte ein.
- Speichern Sie und betrachten Sie die Speisekarte im Browser. Es sollte so aussehen, wie in Abbildung 8.35 gezeigt.
- Validieren Sie die Speisekarte. Haben Sie alles korrekt ausgezeichnet?
Abb. 8.35: Die Speisekarte sieht unformatiert sehr unübersichtlich aus
Unformatierte Tabellen sind nicht sonderlich
übersichtlich: Die Inhalte der Zellen kleben ohne Abstand
oder Rahmen aneinander. Den Kopf schütteln müssen wir
über die standardmäßige Darstellung der
caption
-Elemente:
Tabellenüberschriften sehen im Browser so aus wie horizontal
zentrierter Quelltext ohne Abstände oder typografische
Besonderheiten.
Fangen wir mit den Tabellenüberschriften
an. Wir erweitern den Block »Regeln für allgemeine
Elemente« um eine Regel für caption
. Hinter den
Regeln für Anker ist ein guter Platz dafür. Die
Tabellenüberschriften sollen so aussehen wie
Überschriften zweiter Ordnung (h2
), also
übernehmen wir alle Regeln, ergänzen sie und passen sie
an.
/** * @section Tabellen */ caption { color: #3C6331; background-color: white; font-size: 1.5em; text-align: left; font-weight: bold; text-transform: uppercase; padding: 0; margin: 1.5em 0 .5em 0; }
Anschließend nehmen wir Formatierungen
speziell für Tabellen der Klasse speisekarte
vor.
Die Regeln schreiben wir an das Ende des Stylesheets innerhalb
eines neuen Blocks »Regeln für spezielle
Elemente«. Tragen wir zunächst einmal zusammen, was
überhaupt zu tun ist:
- Wir müssen alle Tabellen auf
die volle Breite (
100%
) bringen. - Jede Zeile wird unterstrichen durch
eine helle, dicke, gepunktete Linie. Mit der Eigenschaft
border
kommen wir an dieser Stelle nicht weiter, aber wir können ein passendes Hintergrundbild erstellen und einbinden. - Alle Tabellenzellen benötigen ein wenig Platz, den wir über innere Abstände realisieren.
- Die Namen der Gerichte und der Preis benötigen einige Deklarationen zur Schriftformatierung: Farbe, Größe, Gewicht und Großschreibung.
- Als Letztes passen wir die vertikale Ausrichtung des Preises an und sorgen dafür, dass er nicht umbricht.
/** * Regeln für spezielle Elemente * * @section Speisekarte */ table.speisekarte { width: 100%; } .speisekarte tr { color: inherit; background: url(images/speisekarte_bg.gif) bottom left repeat-x; } .speisekarte td, .speisekarte th { padding: 10px 5px 8px 0; } .speisekarte td strong, .speisekarte td.price { color: #cbb8ba; background-color: transparent; font-size: 1.2em; text-transform: uppercase; font-weight: bold; } .speisekarte td.price { vertical-align: bottom; white-space: nowrap; }
Übung: Speisekarte, Styling
- Ergänzen Sie Ihre
default.css
. - Speichern Sie und betrachten Sie die Speisekarte im Browser. Die Seite sollte nun aussehen wie der Entwurf.
- Validieren Sie das Stylesheet. Hat sich irgendwo ein Fehler eingeschlichen, oder haben Sie alles richtig gemacht?
Weiter geht es mit den Öffnungszeiten.