Zusammenfassung
CSS (Cascading Style Sheets) ist die Sprache, die das Aussehen von HTML-Seiten bestimmt. Während HTML sagt was auf der Seite ist, sagt CSS wie es aussieht — Farben, Schriften, Abstände, Layouts. CSS besteht aus Regeln nach dem Schema
Selektor { Eigenschaft: Wert; }. Eine wichtige Eigenschaft von CSS ist die Kaskade: Mehrere Regeln können dasselbe Element betreffen, und eine definierte Reihenfolge (Spezifität) entscheidet, welche gewinnt. Für komplexe Layouts gibt es moderne Werkzeuge wie Flexbox und Grid. Damit Webseiten auf Smartphones genauso gut aussehen wie auf Monitoren, nutzt man Media Queries und den mobile-first-Ansatz. Fertige CSS-Frameworks wie Bootstrap erleichtern die Arbeit enorm.Schlüsselbegriffe
CSS
Cascading Style Sheets. Die Sprache zur Gestaltung von HTML-Seiten: Farben, Schriften, Abstände, Layout. CSS-Regeln folgen immer dem Schema: Selektor { Eigenschaft: Wert; }
Selektor
Der Teil einer CSS-Regel, der bestimmt, welche HTML-Elemente die Regel betrifft. Beispiele: p (alle Absätze), .box (alle Elemente mit class='box'), #logo (das Element mit id='logo').
Kaskade
Das 'C' in CSS — mehrere CSS-Regeln können dasselbe Element betreffen. Die Kaskade legt fest, welche Regel gewinnt: Reihenfolge, Herkunft und Spezifität bestimmen das Ergebnis.
Spezifität
Wie 'stark' eine CSS-Regel ist. Rangfolge: !important > Inline-Style > ID (#) > Klasse (.) > Element. Eine ID-Regel überschreibt immer eine Klassen-Regel, auch wenn sie weiter oben steht.
Boxmodell
Jedes HTML-Element ist eine rechteckige Box mit vier Schichten: content (Inhalt) → padding (Innenabstand) → border (Rahmen) → margin (Außenabstand).
Flexbox
Ein CSS-Layout-Modus für eine Zeile (oder Spalte) voller Elemente. Mit display: flex werden Kindelemente nebeneinander angeordnet und können flexibel wachsen oder schrumpfen.
CSS Grid
Ein CSS-Layout-Modus für zweidimensionale Raster. Mit display: grid lassen sich Seiten in Zeilen und Spalten aufteilen — ideal für ganze Seitenlayouts.
Media Query
Eine CSS-Bedingung, die Regeln nur bei bestimmten Bildschirmgrößen anwendet. Beispiel: @media (min-width: 600px) { ... } gilt nur auf Bildschirmen ab 600 px Breite.
Bootstrap
Ein CSS-Framework von Twitter (2011). Liefert vorgefertigte CSS-Klassen für Raster, Buttons, Formulare und mehr. Das Rastersystem basiert auf 12 Spalten.
Pseudo-Klasse
Spezielle CSS-Selektoren, die den Zustand eines Elements beschreiben (z. B. :hover für Mauszeigerkontakt, :focus bei Tastatureingabe).
Viewport
Der sichtbare Bereich einer Webseite im Browser. Die Größe des Viewports variiert je nach Gerät (Mobiltelefon, Tablet, Desktop) und kann in CSS angesprochen werden.
Kernkonzepte
Wie CSS in HTML eingebunden wird
CSS kann auf drei Wegen angewendet werden:
<!-- 1. Externe Stylesheet-Datei (empfohlen) -->
<head>
<link rel="stylesheet" href="styles.css">
</head>
<!-- 2. Inline-Style (nur für Ausnahmen) -->
<p style="color: red;">Roter Text</p>
<!-- 3. <style>-Block im <head> (für kleine Projekte) -->
<head>
<style>
p { color: blue; }
</style>
</head>Klausurrelevant
Immer externe CSS-Dateien bevorzugen. So bleibt die Trennung von HTML (Struktur) und CSS (Aussehen) erhalten. Inline-Styles sind schwer wartbar und schwer überschreibbar.
Selektoren
CSS-Regeln folgen immer dem Schema:
selektor {
eigenschaft: wert;
}Die wichtigsten Selektoren
| Selektor | Syntax | Trifft auf |
|---|---|---|
| Element | p { } | Alle <p>-Elemente |
| Klasse | .box { } | Alle Elemente mit class="box" |
| ID | #logo { } | Das Element mit id="logo" |
| Dynamik | a:hover { } | Links beim Drüberfahren mit der Maus |
| Kombination | div p { } | <p> innerhalb von <div> |
/* Element-Selektor */
p {
color: black;
font-size: 16px;
}
/* Klassen-Selektor */
.highlight {
background-color: yellow;
}
/* ID-Selektor */
#haupttitel {
font-size: 2em;
font-weight: bold;
}
/* Dynamischer Selektor (Pseudoklasse) */
a:hover {
color: red;
text-decoration: underline;
}Kaskade und Spezifität
Was passiert, wenn mehrere Regeln dasselbe Element betreffen?
p { color: black; } /* Verliert */
.text { color: blue; } /* Verliert */
#intro { color: red; } /* Gewinnt — ID hat höchste Spezifität */Die Rangfolge von schwach nach stark:
- Element-Selektor (
p,div) - Klassen-Selektor (
.klasse) - ID-Selektor (
#id) - Inline-Style (
style="..."im HTML) !important— überschreibt alles (nur im Notfall verwenden!)
p { color: red !important; } /* Gewinnt immer — aber sparsam einsetzen! */Das Boxmodell
Jedes HTML-Element ist eine Rechteck-Box mit vier Schichten. Von innen nach außen:
┌─────────────────────────────────────────┐
│ margin │
│ ┌─────────────────────────────────┐ │
│ │ border │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ padding │ │ │
│ │ │ ┌─────────────────┐ │ │ │
│ │ │ │ content │ │ │ │
│ │ │ └─────────────────┘ │ │ │
│ │ └─────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
| Schicht | CSS-Eigenschaft | Bedeutung |
|---|---|---|
| content | width, height | Der eigentliche Inhalt (Text, Bild) |
| padding | padding | Innenabstand (zwischen Inhalt und Rahmen) |
| border | border | Rahmen um das Element |
| margin | margin | Außenabstand (zwischen diesem und anderen Elementen) |
.karte {
width: 300px;
height: 150px;
padding: 20px; /* 20px auf allen vier Seiten */
border: 2px solid black;
margin: 10px; /* 10px Abstand zu anderen Elementen */
}
/* Einzelne Seiten setzen: */
.karte {
padding-top: 10px;
padding-right: 20px;
margin-left: 5px;
border-bottom: 1px dashed gray;
}Tipp
Kurzschreibweise für padding und margin:
padding: oben rechts unten links (Uhrzeigersinn). padding: 10px 20px setzt oben/unten auf 10px und links/rechts auf 20px.Info
Margin-Kollaps: Bei übereinanderstehenden Block-Elementen addieren sich die Margins nicht — der größere gewinnt. Wenn
div unten margin-bottom: 20px hat und das folgende p margin-top: 10px, beträgt der Abstand 20px (nicht 30px).Layouting
Position
Mit
position steuert man, wie ein Element im Seitenfluss positioniert wird:| Wert | Bedeutung |
|---|---|
static | Standard — Element folgt normalem Fluss |
relative | Element bleibt im Fluss, kann aber verschoben werden |
absolute | Element aus dem Fluss genommen, relativ zum nächsten positionierten Elternelement |
fixed | Immer sichtbar, relativ zum Browser-Fenster (z. B. Sticky-Header) |
.badge {
position: absolute;
top: 10px;
right: 10px;
}Responsivität und Mobile-First
Webseiten werden heute öfter auf dem Smartphone als auf dem Desktop aufgerufen. Mobile-first bedeutet: Erst für kleine Bildschirme gestalten, dann für größere erweitern.
/* Basisstil für Handys */
.container {
font-size: 14px;
padding: 10px;
}
/* Ab 600px (Tablets) */
@media (min-width: 600px) {
.container {
font-size: 16px;
padding: 20px;
}
}
/* Ab 1024px (Desktops) */
@media (min-width: 1024px) {
.container {
max-width: 1200px;
margin: 0 auto;
}
}Flexbox — für eine Zeile von Elementen
Flexbox eignet sich für Navigationsleisten, Karten in einer Reihe, zentrierte Inhalte.
.nav {
display: flex;
gap: 16px; /* Abstand zwischen Elementen */
justify-content: center; /* Horizontal zentrieren */
align-items: center; /* Vertikal zentrieren */
}<nav class="nav">
<a href="/">Start</a>
<a href="/über">Über uns</a>
<a href="/kontakt">Kontakt</a>
</nav>CSS Grid — für zweidimensionale Layouts
Grid eignet sich für Seitenlayouts mit mehreren Bereichen (Sidebar + Hauptinhalt).
.seite {
display: grid;
grid-template-columns: 200px 1fr; /* Sidebar + Hauptinhalt */
grid-template-rows: auto 1fr auto; /* Header + Inhalt + Footer */
gap: 20px;
min-height: 100vh;
}<div class="seite">
<header>Navigation</header>
<aside>Sidebar</aside>
<main>Hauptinhalt</main>
<footer>Fußzeile</footer>
</div>Tipp
Faustregel: Flexbox für eine Dimension (alles in einer Zeile/Spalte), Grid für zwei Dimensionen (Zeilen UND Spalten gleichzeitig).
Bootstrap
Bootstrap ist ein CSS-Framework — ein vorgefertigtes Paket von CSS-Klassen und Komponenten. Entwickelt 2011 von Twitter-Entwicklern, heute Open Source.
Warum Bootstrap?
- Vorgefertigte Stile für Buttons, Formulare, Karten, Modals, Tabellen
- Eingebautes responsives 12-Spalten-Raster
- Browser-Kompatibilität ist bereits gelöst
Bootstrap einbinden
Option 1: CDN (einfach, kein Download nötig)
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body>
...
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>Option 2: npm (für Projekte mit Build-Tooling)
npm install bootstrapDas Bootstrap-Rastersystem
Bootstrap teilt die Seitenbreite in 12 Spalten. Mit
class="col-X" bestimmt man, wie viele Spalten ein Element einnimmt.<div class="container">
<div class="row">
<div class="col-md-8">Hauptinhalt (8 von 12 Spalten)</div>
<div class="col-md-4">Sidebar (4 von 12 Spalten)</div>
</div>
</div>| Klasse | Bildschirmbreite |
|---|---|
col- | Alle Größen |
col-sm- | Ab 576px (Smartphone quer) |
col-md- | Ab 768px (Tablet) |
col-lg- | Ab 992px (Desktop) |
col-xl- | Ab 1200px (Großer Monitor) |
Bootstrap-Komponenten (Beispiele)
<!-- Button -->
<button class="btn btn-primary">Absenden</button>
<button class="btn btn-outline-danger">Abbrechen</button>
<!-- Karte -->
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Kartentitel</h5>
<p class="card-text">Etwas Text dazu.</p>
<a href="#" class="btn btn-primary">Los geht's</a>
</div>
</div>
<!-- Alert -->
<div class="alert alert-warning">
Achtung! Bitte alle Felder ausfüllen.
</div>Bootstrap Icons und Fontawesome
Für Symbole (Icons) gibt es eigene Icon-Bibliotheken:
<!-- Bootstrap Icons (CDN) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
<!-- Icon einbetten -->
<i class="bi bi-house"></i> <!-- Haus-Icon -->
<i class="bi bi-envelope"></i> <!-- E-Mail-Icon -->
<!-- Fontawesome (Alternative) -->
<i class="fa-solid fa-house"></i>Lernkarten
Übungsfragen
Welcher CSS-Selektor trifft auf alle Elemente mit class='hinweis' zu?
In welcher Reihenfolge sind die Boxmodell-Schichten von innen nach außen angeordnet?
Was macht display: flex an einem Container-Element?
Was bedeutet 'mobile-first' bei der CSS-Entwicklung?
Welche Bootstrap-Klasse sorgt dafür, dass ein Element 6 von 12 Spalten auf Tablets (ab 768px) einnimmt?
Wie verhält sich ein Element mit der Eigenschaft position: fixed?