Table of Contents
Cascading Style Sheets sind für das Styling und damit für das „Look&Feel“ von Webseiten zuständig.
Wie funktioniert CSS?
Gehen wir von folgendem Beispiel aus:
<!doctype html>
<html lang="de">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Beschreibung der Seite</title>
<style>
p {
color: red;
}
</style>
</head>
<body>
<p>Dieser Text ist nun rot.</p>
<p>Dieser Text ist auch rot.</p>
</body>
</html>
Hier haben wir also 2 Paragraphs im Body, die über das im Head-Bereich eingefügte CSS rot eingefärbt werden:
Das Beispiel zeigt uns aber auch, dass das CSS nicht nur auf das erste Element angewendet wird, auf das es zutrifft, sondern auf alle, die im DOM vorhanden sind.
Was sind Selektoren und Properties?
Selektoren sind „Wegbeschreibungen“ die zutreffen müssen um ein gewisses Styling durchzuführen.
Properties sind die anzuwendenden Stylings innerhalb eines Selektors.
Beispiel 1
p {
color: red;
}
p
ist hier der Selektor und wird auf alle Paragraphs (<p>
) angewendet.color: red;
ist die Property, die gesetzt wird.
D.h. alle <p>
im DOM werden mit roter Schriftfarbe angezeigt.
Beispiel 2
main > p {
color: red;
}
Hier haben wir nun den Selektor angepasst, sodass die rote Schriftfarbe nur auf Paragraphs angewendet wird, die direkt nach einem <main>
Element vorhanden sind.
D.h. bei folgendem DOM erhalten wir folgendes Ergebnis:
<!doctype html>
<html lang="de">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Beschreibung der Seite</title>
<style>
main > p {
color: red;
}
</style>
</head>
<body>
<main>
<p>Dieser Text ist nun rot.</p>
<div>
<p>Dieser Text ist nicht rot.</p>
</div>
</main>
<p>Dieser Text ist nicht rot.</p>
</body>
</html>
Beispiel 3
main p {
color: red;
}
Dieses Beispiel sieht fast gleich aus wie Beispiel 2, jedoch fehlt hier der >
zwischen main
und p
. Dies verursacht, dass alle <p>
innerhalb eines <main>
Elements eine rote Schriftfarbe bekommen, egal wie tief dieser <p>
innerhalb des <main>
Elements geschachtelt wird.
<!doctype html>
<html lang="de">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Beschreibung der Seite</title>
<style>
main p {
color: red;
}
</style>
</head>
<body>
<main>
<p>Dieser Text ist nun rot.</p>
<div>
<div>
<div>
<div>
<p>Dieser Text ist auch rot.</p>
</div>
</div>
</div>
</div>
</main>
<p>Dieser Text ist nicht rot.</p>
</body>
</html>
Welche Arten von Selektoren gibt es?
Es gibt 3 Hauptarten von Selektoren
- Element-Selektoren wie z.B.
main
greifen nur auf HTML-Elemente<main>
- Klassen-Selektoren wie z.B.
.my-class
greifen auf alle HTML-Elemente mit der Klasseclass="my-class"
- ID-Selektoren wie z.B.
#my-id
greifen auf alle HTML-Elemente mit der IDid="my-id"
Wie genau diese aber verbunden sind wird im Beitrag Specificity – Die Rangordnung im CSS genauer beschrieben.
Welche Möglichkeiten gibt es Selektoren miteinander zu verbinden – aka „Combinators“?
Wie in den oberen Beispielen schon kurz erwähnt hängt es davon ab, wie man mehrere Selektoren miteinander verbindet um unterschiedliche Elemente im DOM zu selektieren.
main > p
- Hier werden alle
p
Elemente selektiert, die als direkten Parent einmain
Element haben
- Hier werden alle
main + p
- Hier wird NUR 1
p
Elemente selektiert, das parallel zu einemmain
Element liegt UND von der DOM Position nach diesemmain
Element liegt.
- Hier wird NUR 1
main ~ p
- Hier werden ALLE
p
Elemente selektiert, die parallel zu einemmain
Element liegen UND von der DOM Position nach diesemmain
Element liegt.
- Hier werden ALLE
main p
- Hier werden alle
p
Elemente innerhalb einesmain
Elements selektiert, egal wieviele Ebenen innerhalb dasp
Element immain
Element liegt
- Hier werden alle
Siehe https://www.w3schools.com/css/css_combinators.asp für Beispiele
Wie wird CSS in HTML eingebunden?
Typischerweise sollte CSS im Head-Bereich wie folgt eingebunden werden:
<link rel="stylesheet" type="text/css" href="style.css" />
D.h. im Dateisystem liegt parallel zu einer index.html die style.css
Jedoch, wie im oberen Beispiel schon zu sehen, ist es auch möglich direkt in der HTML-Datei CSS zu schreiben (egal ob im Head oder Body-Bereich)
<style>
...
</style>