Eine kleine Seite gestalten
Die Bäckerei-Seite aus dem HTML-Kurs bekommt ihre Farben, Abstände und ihr Layout aus etwa 40 Zeilen CSS, und das HTML ändert sich überhaupt nicht.
Erst entscheiden, dann Regeln schreiben
Bevor du Regeln schreibst, triff eine Handvoll Entscheidungen: eine Akzentfarbe, eine Textfarbe und einen Hintergrund mit genug Kontrast, eine Schriftliste, eine Grundgröße und eine Abstandsstufe, die sich überall wiederholt (zum Beispiel 8, 16 und 24 Pixel). Eine Seite, die wenige Werte wiederverwendet, wirkt ruhig und durchdacht. Eine Seite, auf der jede Box einen eigenen, leicht anderen Margin hat, wirkt unordentlich, auch wenn niemand sagen kann, warum. CSS hat dafür eine eigene Funktion: Custom Properties.
Custom Properties
Eine Custom Property (benutzerdefinierte Eigenschaft) ist ein selbst erfundener Name, der mit zwei Bindestrichen beginnt und einen Wert enthält: --accent: #1a5fb4;. Leg deine Entscheidungen einmal auf :root fest, also auf dem html-Element, und verwende sie überall mit var(): background: var(--accent);. Custom Properties werden wie Texteigenschaften vererbt, daher kann jedes Element die auf der Wurzel definierten lesen. Die Akzentfarbe der ganzen Website zu ändern, heißt jetzt, eine einzige Zeile zu bearbeiten. Du kannst eine Eigenschaft auch innerhalb einer Media Query neu festlegen, etwa um die Farben für prefers-color-scheme: dark zu tauschen.
:root {
--accent: #1a5fb4; /* 6.29:1 on white */
--ink: #222;
--paper: #fffdf8;
--space: 16px;
}
body {
margin: 0;
font-family: system-ui, sans-serif;
line-height: 1.6;
color: var(--ink);
background: var(--paper);
}
header { display: flex; justify-content: space-between; align-items: center;
flex-wrap: wrap; gap: var(--space); padding: var(--space); }
nav ul { display: flex; gap: var(--space); list-style: none; margin: 0; padding: 0; }
main { max-width: 60rem; margin: 0 auto; padding: var(--space); }
.cards { display: grid; gap: var(--space);
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.card { padding: var(--space); border: 1px solid #ddd; border-radius: 8px; }
img { max-width: 100%; height: auto; }
.btn { background: var(--accent); color: white; border: 0;
padding: 8px var(--space); border-radius: 6px; font: inherit; }
.btn:hover { background: #154c90; }
.btn:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }Das Stylesheet von oben nach unten gelesen
Das Stylesheet oben nutzt etwas aus fast jeder Einheit. Die Wurzel enthält die Entscheidungen. body setzt Schrift, Zeilenhöhe und Farben einmal, und die Vererbung trägt sie in jeden Absatz. Der Kopfbereich ist eine umbrechende Flex-Zeile, damit das Menü auf einem schmalen Handy unter den Namen rutscht, statt gequetscht zu werden. main hat eine max-width und margin: 0 auto. Das hält die Zeilen lesbar und zentriert den Inhalt auf breiten Bildschirmen. Die Karten nutzen das Grid-Muster mit auto-fill, so brechen sie ohne Media Query von einer Spalte in mehrere um, und die Bilder sind flexibel. Der Button bekommt eine Hover-Farbe und, genauso wichtig, eine sichtbare Fokus-Outline für Tastaturnutzer.
Auf echten Bildschirmen prüfen
CSS testen heißt hinschauen. Öffne die Seite in einem schmalen Fenster (320 Pixel für den Reflow-Test der WCAG) und in einem breiten, und achte auf seitliches Scrollen und Text, der an die Ränder stößt. Zoome auf 200 Prozent. Geh mit der Tab-Taste durch die Seite und prüf, dass du immer siehst, wo der Fokus ist. Prüf den Kontrast von Text und Buttons in den Entwicklerwerkzeugen. Schalte den Dunkelmodus oder die Einstellung für reduzierte Bewegung deines Systems ein, wenn du dafür gestaltet hast. In den Entwicklerwerkzeugen des Browsers kannst du jeden Wert live ändern und das Box-Modell jedes Elements sehen. So findest du am schnellsten heraus, warum etwas dort ist, wo es ist.
Von hier aus lassen sich dieselben Bausteine auf jede Website übertragen. Größere Projekte teilen das Stylesheet in Dateien auf, benennen Klassen danach, was eine Komponente ist (Karte, Button, Seitenkopf), und halten eine kurze Liste gemeinsamer Custom Properties. Die Regeln darunter sind aber die aus diesen neun Einheiten.
| Custom Property | --name: Wert; gelesen mit var(--name) |
| :root | Das html-Element; dort wohnen gemeinsame Werte |
| var() | Verwendet den Wert einer Custom Property |
| :hover | Zeiger über dem Element |
| :focus-visible | Sichtbarer Tastaturfokus; nach dem Entfernen der Outline nie ungestaltet lassen |
| Abstandsskala | Wenige wiederkehrende Abstandswerte, etwa 8, 16, 24 |
- Womit beginnt der Name einer Custom Property?
- Zwei Bindestriche
- Ein Dollarzeichen
- Ein At-Zeichen
- Wie verwendest du den Wert von --accent?
- var(--accent)
- get(--accent)
- $accent
- Warum legt man gemeinsame Werte auf :root fest?
- Custom Properties werden vererbt, also kann jedes Element sie lesen
- Nur :root akzeptiert Custom Properties
- Dann sind sie schneller
- Wie groß ist das Kontrastverhältnis von #1a5fb4 auf Weiß, auf zwei Nachkommastellen gerundet?
- Warum nutzt der Kopfbereich flex-wrap: wrap?
- Auf schmalen Bildschirmen rutscht das Menü unter den Namen, statt gequetscht zu werden
- Um das Menü zu verstecken
- Um den Text fett zu machen
- Was sollte ein Button für Tastaturnutzer immer haben?
- Einen sichtbaren Fokusstil
- Eine Hover-Animation
- Einen Schatten
- Welches Layout lässt die Karten ohne Media Query von einer Spalte zu vielen wechseln?
- repeat(auto-fill, minmax(180px, 1fr))
- grid-template-columns: 180px
- display: block
- --space ist 16px. Wie viele Pixel sind calc(var(--space) * 1.5)?
- Warum überall wenige Abstandswerte wiederverwenden?
- Die Seite wirkt einheitlich und lässt sich leichter ändern
- Browser verlangen es
- Es verbessert den Kontrast
- Zuerst Farben, Schriften und eine Abstandsskala festlegen; als Custom Properties auf :root speichern.
- body setzt Textstile einmal; Flex für den Kopfbereich, Grid für Karten, flexible Bilder.
- Bei 320px, bei 200% Zoom, mit Tab und in den Entwicklerwerkzeugen testen.
Quellen zu diesem Kurs (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
Abgerufen: 2026-10-17