CSS Grundlagen & Selektoren

6 Kernkonzepte
Die wichtigsten Grundlagen der CSS-Entwicklung: Selektoren · Kombinatoren · Pseudo-Klassen · Box-Modell · Kaskade · Spezifität CSS (Cascading Style Sheets) ist die Sprache für das Styling von Webseiten. Diese Grundlagen sind essenziell für das Layout, die Gestaltung und die Wartbarkeit von modernen Webprojekten.

Selektoren – Elemente auswählen

* · element · .class · #id · [attr]
* /* Universalselektor – alle Elemente */ div /* Typselektor – alle <div> */ .klasse /* Klassenselektor – alle mit class="klasse" */ #id /* ID-Selektor – Element mit id="id" */ [type="text"] /* Attributselektor – Elemente mit bestimmten Attributen */

Selektoren bestimmen, welche HTML-Elemente gestylt werden. Sie sind die Grundlage jeder CSS-Regel und reichen von einfachen Typselektoren bis zu komplexen Attributselektoren.

Die wichtigsten Selektoren

Selektor Beispiel Beschreibung
* * { margin: 0; } Universalselektor – alle Elemente
element p { color: blue; } Typselektor – alle <p>-Elemente
.class .highlight { background: yellow; } Klassenselektor – alle mit class="highlight"
#id #header { font-size: 2rem; } ID-Selektor – Element mit id="header"
[attr] [disabled] { opacity: 0.5; } Attributselektor – Elemente mit dem Attribut
[attr="wert"] [type="text"] { border: 1px solid; } Attributselektor – exakter Wert
[attr^="wert"] [href^="https"] { color: green; } Attributselektor – beginnt mit
[attr$="wert"] [src$=".png"] { border: 0; } Attributselektor – endet mit
[attr*="wert"] [title*="info"] { font-weight: bold; } Attributselektor – enthält
Beispiele
/* Alle Absätze blau machen */
p { color: blue; }
/* Alle Elemente mit class="wichtig" */
.wichtig { font-weight: bold; }
/* Element mit id="logo" */
#logo { width: 200px; }
/* Alle Text-Input-Felder */
[type="text"] { border: 2px solid #ccc; }
/* Alle Links, die auf externe Seiten verweisen */
[href^="https"] { color: green; }
/* Mehrere Selektoren kombinieren */
h1, h2, h3 { font-family: sans-serif; }
/* Verschachtelung (Kontextselektor) */
article p { line-height: 1.6; }
Tipp: Verwenden Sie Klassen (`.class`) für wiederverwendbare Stile. IDs (`#id`) sollten für eindeutige Elemente und für JavaScript-Referenzen verwendet werden.

Kombinatoren – Beziehungen zwischen Elementen

Leerzeichen · > · + · ~
div p /* Nachkomme – alle <p> innerhalb von <div> */ div > p /* Direktes Kind – <p> direkt in <div> */ h1 + p /* Nachbar – <p> direkt nach <h1> */ h1 ~ p /* Allgemeiner Nachbar – alle <p> nach <h1> */

Kombinatoren definieren die Beziehung zwischen Selektoren – sie ermöglichen präzises Styling basierend auf der HTML-Struktur.

Beispiele
/* Nachkomme: Alle Links in der Navigation */
nav a { color: white; text-decoration: none; }
/* Direktes Kind: Nur direkte Li-Elemente in der Liste */
ul > li { list-style-type: square; }
/* Nachbar: Absatz direkt nach einer Überschrift */
h2 + p { font-size: 1.1em; }
/* Allgemeiner Nachbar: Alle p-Elemente nach einem h1 */
h1 ~ p { margin-top: 0.5em; }
/* Kombination verschiedener Kombinatoren */
section > article > p { color: #444; }
/* Alle Absätze in einem Container mit einer bestimmten Klasse */
.content p { line-height: 1.8; }
Tipp: Kombinatoren helfen, spezifische Stile zu setzen, ohne zusätzliche Klassen hinzufügen zu müssen. > ist restriktiver als das Leerzeichen (Nachkomme).

Pseudo-Klassen & -Elemente – Zustände und Teilelemente

:hover · :nth-child · ::before · ::after
a:hover /* Pseudo-Klasse – Hover-Zustand */ li:nth-child(2) /* Pseudo-Klasse – zweites Kind */ p::first-line /* Pseudo-Element – erste Zeile */ p::before /* Pseudo-Element – Inhalt vor p */

Pseudo-Klassen (:) beschreiben spezielle Zustände von Elementen. Pseudo-Elemente (::) stylen Teile von Elementen oder erzeugen virtuellen Inhalt.

Die wichtigsten Pseudo-Klassen

Pseudo-Klasse Beschreibung Beispiel
:hover Element wird mit der Maus berührt a:hover { color: red; }
:focus Element hat Fokus (z.B. Input) input:focus { outline: 2px solid blue; }
:active Element wird angeklickt button:active { transform: scale(0.95); }
:first-child Erstes Kindelement li:first-child { font-weight: bold; }
:last-child Letztes Kindelement li:last-child { border-bottom: none; }
:nth-child(n) N-tes Kind (1-basiert) tr:nth-child(2n) { background: #eee; }
:not(selektor) Negation – alle außer input:not([type="submit"]) { width: 100%; }
:checked Ausgewähltes Radio/Checkbox input:checked + label { color: green; }

Die wichtigsten Pseudo-Elemente

Pseudo-Element Beschreibung Beispiel
::before Fügt Inhalt vor dem Element ein p::before { content: "→ "; }
::after Fügt Inhalt nach dem Element ein a::after { content: " (link)"; }
::first-line Erste Zeile eines Textblocks p::first-line { font-weight: bold; }
::first-letter Erster Buchstabe p::first-letter { font-size: 2em; }
Beispiele
/* Link-Stile mit Pseudo-Klassen */
a { color: blue; }
a:hover { color: red; text-decoration: underline; }
a:visited { color: purple; }
/* Zebra-Streifen mit nth-child */
tr:nth-child(even) { background: #f5f5f5; }
/* Icon vor jedem Absatz */
p::before { content: "📌 "; }
/* Alle Inputs außer Submit-Buttons */
input:not([type="submit"]) { border: 1px solid #ccc; }
Tipp: Pseudo-Elemente wie ::before und ::after benötigen immer die content-Eigenschaft, um sichtbar zu sein.

Box-Modell – margin · border · padding · content

margin · border · padding · width/height
margin: 10px; /* Außenabstand */ border: 1px solid #000; /* Rahmen */ padding: 10px; /* Innenabstand */ width: 200px; /* Breite des Inhaltsbereichs */

Das Box-Modell beschreibt den Aufbau jedes HTML-Elements: Inhalt (content), Innenabstand (padding), Rahmen (border) und Außenabstand (margin).

Box-Modell-Eigenschaften

Eigenschaft Beschreibung Beispiel
margin Abstand nach außen (transparent) margin: 10px 20px 10px 20px;
border Rahmen (Stil, Breite, Farbe) border: 2px solid #333;
padding Abstand nach innen (hintergrund padding: 15px;
width / height Breite/Höhe des Inhaltsbereichs width: 300px; height: 200px;
box-sizing Bestimmt, ob padding/border mitgezählt werden box-sizing: border-box;
Beispiele
.box {
width: 200px;
padding: 20px;
border: 2px solid #333;
margin: 10px;
}
/* box-sizing: border-box – padding und border werden in die Breite einbezogen */
* { box-sizing: border-box; }
/* Zentrieren mit margin: auto */
.container { width: 80%; margin: 0 auto; }
/* Kurzschreibweise für margin und padding */
/* oben | rechts | unten | links */
.box { margin: 10px 20px 30px 40px; }
.box { padding: 15px 20px; } /* oben/unten | links/rechts */
Tipp: Mit box-sizing: border-box wird die gesamte Breite inklusive padding und border berechnet – das erleichtert das Layout enorm.

Kaskade & Vererbung – Regeln und Weitergabe

Kaskade · Vererbung · !important
/* Kaskade: Die letzte Regel gewinnt bei gleicher Spezifität */ p { color: blue; } p { color: red; } /* Gewinnt, weil später definiert */ /* Vererbung: p erbt Farbe von body */ body { color: #333; } p { /* erbt color: #333 */ }

Kaskade bestimmt, welche CSS-Regel bei Konflikten angewendet wird. Vererbung bedeutet, dass bestimmte Eigenschaften von Elternelementen auf Nachkommen übergehen.

Kaskade-Regeln (Reihenfolge)

Priorität Quelle Beschreibung
1 !important Überschreibt alles (vermeiden!)
2 Inline-Styles Im HTML mit style=""
3 ID-Selektoren #header { ... }
4 Klassen / Attribute / Pseudo .class, [attr], :hover
5 Element-Selektoren p, div, h1
6 Vererbung Von Elternelementen
7 Browser-Standard User Agent Stylesheet
Beispiele
/* !important (selten verwenden!) */
.text { color: red !important; }
/* Vererbung verhindern mit inherit / initial */
p { color: initial; } /* Auf Standardwert zurücksetzen */
span { color: inherit; } /* Von Elternelement erben erzwingen */
/* Vererbung von font-family und color */
body { font-family: Arial, sans-serif; }
/* Alle Texte erben Arial, außer sie überschreiben es */
/* Nicht vererbte Eigenschaften (z.B. border, padding) */
div { border: 1px solid #ccc; }
/* p hat keine border, da border nicht vererbt wird */
Tipp: Vermeiden Sie !important – es macht CSS schwer wartbar. Nutzen Sie stattdessen spezifischere Selektoren oder die richtige Kaskaden-Reihenfolge.

Spezifität – Welche Regel gewinnt?

(0,0,0,0) · inline · ID · class · element
/* Spezifität berechnet sich aus: */ #id /* 0,1,0,0 – höchste Spezifität (außer inline) */ .class /* 0,0,1,0 – eine Klasse */ p /* 0,0,0,1 – ein Element */ * /* 0,0,0,0 – Universalselektor (keine Spezifität) */

Spezifität bestimmt, welche CSS-Regel angewendet wird, wenn mehrere Selektoren auf dasselbe Element zielen. Die Regel mit der höheren Spezifität gewinnt.

Spezifitätsberechnung

Selektortyp Punkte Beispiel
Inline-Styles 1,0,0,0 style="color: red;"
ID-Selektoren 0,1,0,0 #header, #main
Klassen, Attribute, Pseudo-Klassen 0,0,1,0 .class, [type], :hover
Elemente und Pseudo-Elemente 0,0,0,1 p, div, ::before
Universalselektor 0,0,0,0 *
Beispiele
/* Spezifität: 0,0,1,0 (Klasse) */
.text { color: blue; }
/* Spezifität: 0,0,0,1 (Element) – gewinnt nicht gegen Klasse */
p { color: red; } /* Verliert gegen .text */
/* Spezifität: 0,1,0,0 (ID) – gewinnt gegen Klasse */
#main { color: green; }
/* Kombination erhöht Spezifität: 0,0,2,0 */
.header .nav { display: flex; }
/* Mit ID: 0,1,1,0 */
#sidebar .widget { margin: 10px; }
/* !important überschreibt alles (vermeiden!) */
.text { color: red !important; } /* Gewinnt immer */
Tipp: Eine niedrige Spezifität macht CSS wartbarer. Nutzen Sie Klassen statt IDs für Stile und vermeiden Sie tiefe Verschachtelungen.

CSS-Grundlagen im Überblick

Selektoren Elemente auswählen
* , element, .class, #id
Kombinatoren Beziehungen
> , + , ~ , Leerzeichen
Pseudo Zustände & Teile
:hover, ::before
Box-Modell margin, border, padding
box-sizing
Kaskade Regeln und Reihenfolge
Spezifität, !important
Vererbung Weitergabe von Eigenschaften
inherit, initial

Quick Summary

.class
Klassenselektor
>
Direktes Kind
:hover
Pseudo-Klasse
box-sizing
Box-Modell
cascade
Kaskade
spezifität
Spezifität
.class { color: blue; } · nav > ul { display: flex; } · a:hover { color: red; }