Ich versuchte letztens, einem Freund einen groben Einblick in die Entwicklung von Webseiten mittels HTML und CSS zu geben. Meine Idee war, ihm nur den grundsätzlichen Aufbau und die Ideen hinter den Technologien zu erklären, sodass er selbst dann aus vorhandenen Übersichten und vor allem dem Code anderer Website lernen kann. Dieses Gespräch habe ich hier noch einmal zusammengefasst aufgeschrieben.
Zwischendrin: Viele zusätzliche Anmerkungen zur Verdeutlichung und Vertiefung in den Fußnoten und gestellte Fragen als Frage-Antwort-Kombination.
"Was brauche ich an Material?"
Einen Browser (Empfehlung: Safari oder Chrome) und einen Texteditor (Empfehlung: Espresso, Notepad++).
HTML-Markup
Wozu braucht man HTML? Um Inhalte (das Wort kommt öfter und heißt: Texte, Bilder, Videos, usw.) auf eine Weise zu strukturieren, dass sie in einem Browser auf eine bestimmte Weise dargestellt werden können. Wichtig ist schon hier: HTML selbst strukturiert Inhalte, es sollte nicht dazu verwendet werden, diesen Inhalten ein bestimmtes Aussehen zu geben – um das Aussehen kümmern wir uns später. Gutes HTML lässt ohne bestimmte Darstellungsoptionen eine logische Struktur erkennen.
Diese Struktur wird erstellt, indem man Teile des Inhalts (Elemente, Text-Ausschnitte oder auch ganze Inhalts-Blöcke) bestimmt markiert[1]. Diese Markierungen werden "Tags"[2] genannt und in spitzen Klammern geschrieben:
<strong>fett gedruckter Text</strong>
Elemente der Art "tag" werden durch <tag>
eingeleitet (Opening-Tag) und durch </tag>
wieder geschlossen (End-Tag)[3].
Elemente können auch Attribute haben, z.b. kann einem a
-Element ("anchor") mit dem href
-Attribut ("hypertext reference") eine Link-Adresse zugewiesen werden, auf die es dann verweist. Geschrieben werden Attribute in dem Stil AttributName="AttributInhalt"
innerhalb des Opening-Tags. So erzeugt das Folgende einen Link mit dem Text "ein Link", der auf google.com verweist (ein Link):
<a href="http://google.com/">ein Link</a>
Es gibt auch Elemente ohne eigenen Inhalt (leere Elemente), z.B. solche, die einen Zeilenumbruch (br
) oder ein Bild (img
) einfügen. Solche bestehen nur aus dem Opening-Tag und werden einfach mit einem />
am Ende geschrieben[4]. Ein Bild wird z.B. so eingefügt[5]:
<img src="bild.jpg" alt="ein Beschreibung des Bildes" />
Der HTML-Baum
Ein HTML-Dokument besteht im Prinzip aus vielen verschachtelten Tags.
Ganz oben in der ersten Zeile steht zunächst, welcher Typ das folgende Dokument hat. Für HTML5 steht dort einfach . Dann kommt das erste Tag, welches das gesamte Dokument umschließt: <html>
[6].
Darauf folgt <head>
, der Kopf des Dokuments, mit einigen Meta-Informationen und Verweisen, jedoch keinen direkt sichtabrem Inhalt. Am prominentesten: Das <title>
-Tag, welches den Titel des Dokuments angibt (wird im Browser im Fenster- oder Tab-Rahmen angezeigt)[7].
Verwiesen wird im <head>
-Bereich z.B. auf das Favicon der Seite[8] oder auf Stylesheets oder Skripte, die geladen werden sollen:
<link rel="shortcut icon" href="images/favicon.png" type="image/png" />
für das Favicon und
<link rel="stylesheet" type="text/css" href="style.css" />
für das Stylesheet style.css
[9].
"Ok, und was ist <meta>
?"
<meta>
ist ein "leeres Element", mit dem man im Dokument-Kopf bestimmte Metadaten über das Dokument in Form von Zuordnungen machen kann, die von Maschinen gelesen werden können. Besonders wichtig ist
<meta charset="UTF-8">
welches die Zeichenkodierung des Dokuments angibt. Alle sonstigen Meta-Informationen sind optional. Ein Beispiel für eine typische Meta-Information ist der Autor des Dokuments:
<meta name="author" content="Autorenname" />
Nach dem <head>
kommt, logischer Weise, der <body>
, der Körper des Dokuments, mit dem eigentlichen, sichtbaren Inhalt.
Dieser Inhalt ist (im Idealfall) mittels passender Tags strukturiert und auch von Menschen im Quellcode gut zu lesen. Um bestimmten Blöcke von Inhalt Kennzeichnungen zu geben, die über einfache Tags hinaus gehen (und, damit man diese Blöcke später mit Stilen versehen kann), kann man jedem Tag auch als Attribut eine Klasse und ID zuweisen. Klassen können mehrfach verwendet werden, IDs müssen eindeutig im gesamten Dokument sein.
Der typische Aufbau eines HTML-Dokuments ist beispielsweise[10]:
<!DOCTYPE HTML>
<html lang="de-DE">
<head>
<meta charset="UTF-8" />
<title>Seitentitel</title>
<link rel="shortcut icon" href="images/favicon.ico" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1>Der Titel der Seite</h1>
<div id="content" class="article">
<h2>Der Titel des Artikels</h2>
<p>Ein Absatz (p für engl. paragraph: Absatz).</p>
<p>Ein weiterer Absatz.</p>
</div>
<div id="sidebar">
<p class="article-meta">
Der Artikel wurde am ... von ... veröffentlicht.
</p>
<p class="article-navigation">
<a href="2.html" rel="next">Ein weiterer Artikel</a>
</p>
</div>
</body>
</html>
Was jetzt an dieser Stelle sinnvoll ist, sofern man glaubt, alles vorherige verstanden zu haben und nun eigene Schlüsse ziehen möchte: Den Quelltext von Webseiten ansehen, von denen man glaubt, ihre Struktur im HTML erkennen zu können. Das geht in den meisten Browser ganz einfach mit einem Rechtsklick irgendwo auf der Seite und einem anschließenden Klick auf "Seitenquelltext anzeigen" (oder ähnlich)[11]. Tun Sie es einfach mal hier auf dieser Seite und versuchen Sie zu verstehen, was welcher Tag zu bedeuten hat und inwiefern er zur Struktur der Seite beiträgt.
Möchten Sie ein bestimmtes Tag nachschlagen, empfehle ich Ihnen diese Seite (englisch).
Style
Der Inhalt des Dokumentes wird mit HTML strukturiert. Diese Struktur allein ist aber ästhetisch nicht sonderlich ansprechend. Daher legt man ein sogenanntes Stylesheet (CSS-Dateien, "Cascading Style Sheets") an, um dem Inhalt das gewünschte Aussehen zu verpassen[12]. Wie oben schon gesehen, wird im Head dann auf diese CSS-Dateien verwiesen, sodass der Browser sie laden und anwenden kann.
Um in CSS einzelnen Elementen (oder Element-Gruppen) Stile zuzuweisen, müssen diese zunächst angesprochen (selektiert) werden. Das geschieht nach folgendem Muster: Um eine bestimmte Art von Tag anzusprechen, muss nur der Tag-Name geschrieben werden. Um eine bestimmte Klasse anzusprechen, wird ein Punkt direkt gefolgt von dem Klassen-Namen geschrieben. Eine bestimmte ID wird angesprochen, indem eine Raute (#) direkt gefolgt von dem ID-Namen geschrieben wird. Diese Selektoren können auch kombiniert werden[13]. Nach dem Selektieren des Elements folgt in geschweiften Klammern eine Liste mit Stil-Zuweisungen.
Um nun einen Block in CSS mit einem Stil zu versehen, muss nicht jeder Block eine eindeutige Klasse oder ID bekommen, in CSS kann man auch Verschachtelungen von Elementen angeben. Das lässt sich am besten durch ein Beispiel erklären:
#sidebar p.article-navigation a {
color: green;
}
Diese CSS-Anweisung gibt an: In der Sidebar (ID sidebar
), darin in dem Absatz mit der Klasse article-navigation
, darin für jeden Link (a
): Färbe ihn Grün!
Durch diese Verschachtelungen kann man den Bereich, den man mit diesem Stil versehen möchte, einschränken. Wo gerade nur die Links in der Artikel-Navigation grün wurden, würde durch #sidebar a {color: green;}
jeder Link in der Sidebar grün[14]. Mehr Informationen zu Selektoren gibt es in der Wikipedia.
Ähnlich wie es viele Tags in HTML gibt, so gibt es viele Stil-Eigenschaften in CSS (color
ist eine dieser Eigenschaften). Um viele relevante kennenzulernen, empfiehlt es sich wieder, den Quelltext einiger Webseiten, hier besonders die CSS-Dateien, einmal genau anzusehen und vor allem die Relation von HTML-Element und CSS-Anweisung zu verstehen[15].
"Farbcodes?"
Farben könne auf mehrere Arten geschrieben werden. Einige Elementar-Farben können direkt als englische Worte geschrieben werden (black, red, blue, green, etc.). Typische Schreibweise ist jedoch in RGB und hexadezimal, mit 256 Werten (von 00
bis ff
) für rot, grün und blau. Hier ein Farbrad mit RGB-Hex-Codierung.
"Was sind diese ganzen @-Befehle am Anfang?"
@import
bindet andere CSS-Dateien ein. @font-face
bindet downloadbare Schriften ein.
"Wie kann ich jetzt z.B. drei Links groß und fett machen, aber alle drei in unterschiedlichen Farben?"
Für das "groß und fett" machst du einfach eine Klasse, und für jede Farbe eine ID (oder eine weitere Klasse). Z.B. ist das der blaue Link:
<a href="blau.html" class="bigfat blue">Blau</a>
und im CSS steht:
.bigfat {font-weight: bold; font-size: 18px;}
.blau {color: blue;}
Natürlich kannst du das auch beliebig näher bestimmen:
a.bigfat.blau {color: blue;}
Eine gute Übersicht zu den meisten CSS-Eigenschaften gibt es auf CSS 4 You. Eine andere Quelle, auf die ich eben aufmerksam wurde, ist das Wikibook "Websiteentwicklung: CSS".
Fazit
Das ist soweit alles an Basiswissen, was mach braucht, um Webseiten schreiben zu können, bzw. um sich das Erstellen von Webseiten selbst beibringen zu können. So habe ich es jedenfalls gemacht; aber ich muss sagen, ich habe lange gebraucht, um die Strukturen, wie ich sie oben beschrieben habe, zu erkennen und zu verstehen. Ich hoffe, Ihnen fällt es dadurch leichter, einen Einstieg zu finden.
Falls Sie nicht der Typ für alles-nur-selbst-erarbeiten sind, können Sie natürlich auch einfach ein gutes Buch zu dem Thema kaufen[16]. Zwei Bücher über die ich viel gehört habe (aber die ich beide nicht besitze): "Modernes Webdesign: Gestaltungsprinzipien, Webstandards, Praxis" (Manuela Hoffmann, 12/2009) und "Einführung in XHTML, CSS und Webdesign: Standardkonforme, moderne und barrierefreie Websites erstellen" (Michael Jendryschik, 12/2008).
HTML ist daher eine sogenannte "Markup"-Sprache. ↩
engl. Tag: Marke, Schlagwort ↩
Im Folgenden nenne ich Tags inkl. Inhalt öfters auch "Element", z.b. für das Beispiel gerade: Das
strong
-Element. Viele Bezeichnungen übrigens frei erfunden und zur der Vereinfachung halber von mir verwendet! ↩Im originalen HTML werden leere Elemente einfach mit einer spitzen Klammer geschlossen, ohne Slash davor. In XML ist dies jedoch üblich, da dies die Kompatibilität zu unbekannten Elementen erhöht. Da dies auch in HTML5 (bzw. "XHTML5") erlaubt ist und für mich mehr Sinn macht, verwende ich
/>
zum Schließen von leeren Elementen. ↩img
: Image, Bild.src
: Source, Quelle, d.h. die Adresse/URL zum Bild, kann sowohl lokal wie auch auf einer anderen Webseite liegen.alt
: Alternativ-Text, falls das Bild nicht geladen oder angezeigt werden kann, z.B. auf Lesegeräten für Blinde. ↩Viele geben hier auch schon als Attribut die Sprache des Dokuments an, z.B.
<html lang="de-DE">
. ↩Wie gesagt, dieser Titel wird im Dokument selbst nicht dargestellt. Möchte man ihn irgendwo im Dokument stehen haben, muss man ihn in den
<body>
noch einmal schreiben (am besten als Überschrift erster Ordnung,<h1>
). ↩Das Favicon ist das kleine Symbol links neben der Adresszeile und links neben dem Seiten-Titel im Fenster- oder Tab-Rahmen (bei den meisten Browsern). ↩
Das
rel
-Attribut steht übrigens für die Art des Verweises (engl. relation Beziehung, Verhältnis), da z.B. ein Verweis auf ein Icon etwas anderes ist als der auf ein Stylesheet.rel
gibt es auch für "normale" Text-Links mita
mit verschiedenen anerkannten Werten, z.B. "footnote" (Link zu einer Fußnote), "alternate" (Alternative Version des selben Inhaltes) oder "bookmark" (Link mit statischer Adresse des Inhaltes). ↩In HTML5 benutzt man eigentlich statt den hier verwendeten
<div>
s für den Artikel-Inhalt und die Sidebar die speziellen (neuen) Elemente<article>
und<aside>
. Ich versuchte zwar bisher immer HTML5 zu vermitteln, aber zur Zeit ist das "alte"<div>
meines Erachtens nach noch die sicherere Lösung, da nicht alle Browser die neuen Elemente kennen. ↩Es ist noch um einiges schöner, sich den Quelltext "interaktiv" anzusehen, d.h. farblich hevorgehoben und schön geschachtelt. Dafür gibt es in den meisten Browser Entwicklerkonsolen, z.B. dem Webinspector in Safari und Chrome (auf der Seite rechts klicken und "Element überprüfen" anwählen, ggf. in den Einstellungen aktivieren) oder Firebug für Firefox. ↩
Noch einmal der Hinweis: Inhalt und Aussehen werden getrennt. Das mögen andere nicht so wichtig nehmen (früher: zweispaltige Layouts einfach als Tabelle mit zwei Spalten anlegen), aber mir persönlich ist dieser Aspekt sehr wichtig, denn für mich ist dieser Aspekt der Grundstein für die Ordnung/Logik von HTML und die Relation Inhalt und Aussehen (und noch unaufdringlichen Effekten). ↩
div#sidebar
ist das<div>
-Element mit der IDsidebar
,p.article-meta
ist das<p>
-Element mit der Klassearticle-meta
. ↩CSS muss nicht mehrzeilig geschrieben werden, sondern kann auch stark verkürzt geschrieben sein (es muss nur bei Verschachtelungen bei zwischen jeder Ebene ein Leerzeichen sein!). Außerdem: Überschneiden sich mehrere Anweisungen, zählt der, mit der genaueren Einschränkung auf das Element (meistens) mehr; sind beide gleich genau, zählt der untere. ↩
Die meisten Eigeschaften sind selbsterklärend. Wirklich. Ein Start: Textfarbe
color
, Hintergrundfarbebackground-color
, Rahmenborder
(mit 3 Werten: Dicke, Art, Farbe. Z.B.:1px solid #ccc
), Innenabstandpadding
, Außenabstandmargin
(border
,padding
undmargin
auch mit-top
/-right
/-bottom
/-left
Suffix), Höheheight
, Breitewidth
(tatsächliche Höhe/Breite: Höhe/Breite + Abstände – vgl. "Boxmodell"), Schriftartfont-family
(vgl. "Webschriften", "@font-face
"), usw. ↩Wobei vor allem im Bezug auf das noch nicht einmal fertig gestellte HTML5 viele Bücher bald veraltet sein könnten! Ok, das Basis-Wissen bleibt sicher größtenteils aktuell, aber die Details ändern sich laufend. ↩