Fluid Typography mit CSS clamp() – Schrift, die ohne Media Queries mitwächst
Statt an drei Breakpoints feste Schriftgrößen zu setzen, lässt du sie mit clamp() flüssig zwischen einem Minimum und Maximum skalieren. Eine Zeile CSS ersetzt einen Stapel Media Queries.
Feste Schriftgrößen an mehreren Breakpoints sind mühsam: Auf dem Handy zu groß, auf dem Desktop zu klein, und dazwischen ruckelt es an jedem @media-Sprung. Mit clamp() definierst du stattdessen einen Korridor – eine Untergrenze, einen idealen (mitwachsenden) Wert und eine Obergrenze – und der Browser wählt flüssig dazwischen. Ganz ohne Media Queries.
Die drei Werte von clamp()
h1 {
/* clamp(MIN, IDEAL, MAX) */
font-size: clamp(1.75rem, 4vw + 1rem, 3rem);
}1.75rem– so klein wird die Schrift nie (Untergrenze, wichtig fürs Handy).4vw + 1rem– der ideale Wert, der mit der Viewport-Breite mitwächst.3rem– so groß wird sie nie (Obergrenze, damit es auf großen Monitoren nicht albern wird).
Zwischen etwa 375 px und 1200 px Breite skaliert die Überschrift damit stufenlos – ein einziger Wert statt drei Media Queries.
Nicht nur für Schrift
clamp() funktioniert überall, wo eine Länge erlaubt ist – zum Beispiel für flüssige Abstände:
.section {
/* Innenabstand wächst mit, bleibt aber im Rahmen */
padding-block: clamp(2rem, 6vw, 5rem);
}
.container {
/* maximal 70ch breit, aber mit komfortablem Seitenabstand */
width: min(70ch, 100% - clamp(1rem, 5vw, 4rem));
margin-inline: auto;
}Zwei Dinge für die Praxis
- Immer eine
rem-basierte Untergrenze setzen. Nutzt du reinevw-Werte ohne Minimum, wird die Schrift auf schmalen Geräten unlesbar klein – und Nutzer, die zoomen, bleiben außen vor. Das+ 1remim Idealwert sorgt außerdem dafür, dass Browser-Zoom weiter funktioniert. - Barrierefreiheit im Blick. Weil die Untergrenze in
remsteht, respektiert deine Schrift die vom Nutzer eingestellte Standard-Schriftgröße – ein Detail, das viele „fluid"-Lösungen vergessen.
So sparst du dir einen ganzen Stapel Breakpoints und die Seite fühlt sich auf jedem Gerät stimmig an. Wenn du eine moderne, responsive Website mit eigenem CMS brauchst, melde dich bei mir.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
:is() und :where() – kürzere Selektoren, und einer davon wiegt nichts
Drei fast gleiche Selektoren untereinander, nur weil die Überschrift mal h2 und mal h3 heißt? :is() fasst das zusammen. Und :where() macht dasselbe, ohne die Spezifität hochzutreiben – der Unterschied ist der ganze Trick.
content-visibility – lange Seiten rendern, ohne dass der Browser alles auf einmal baut
Bei sehr langen Seiten rechnet der Browser Layout und Malen für jeden Abschnitt – auch für die, die 8.000 Pixel weiter unten liegen. Eine CSS-Eigenschaft verschiebt diese Arbeit auf den Moment, in dem sie gebraucht wird.
color-mix() – Hover- und Dark-Mode-Farben ausrechnen lassen, statt sie zu pflegen
Für jede Markenfarbe eine hellere, eine dunklere und eine transparente Variante von Hand zu pflegen, ist Fleißarbeit mit Fehlerquote. color-mix() mischt sie im Browser – aus genau einer Quellfarbe.