Aktualisiert 15. Juli 2026

Fluide Typografie in Tailwind

Tailwinds standardmäßige Schriftgrößen sind feste rem-Werte — text-xl ist 1,25rem bei jedem Viewport — und fluide Typografie ist nicht eingebaut. Es gibt drei Wege, sie hinzuzufügen: clamp()-Ausdrücke in den v4-@theme-Block schreiben, ein einzelnes clamp auf die Root-Schriftgröße setzen, sodass jede rem-basierte Utility gleitet, oder zu einem Community-Plugin greifen. Die ersten beiden brauchen überhaupt keine Abhängigkeit, und v4s CSS-first-Konfiguration hat den ersten deutlich natürlicher gemacht, als er es früher war.

Dieser Artikel rechnet beide Plugin-freien Wege mit echten Zahlen durch. Die Rechnung, die diese Zahlen erzeugt — Steigung, Achsenabschnitt, Grenzen —, behandelt unser Leitfaden zur fluiden Typografie; die Frage hier ist, wo die Zahlen in einem Tailwind-Projekt leben.

Warum ist fluide Typografie nicht in Tailwind eingebaut?

Tailwinds Schriftgrößenskala ist eine Sammlung benannter, statischer Tokens: text-sm ist 0,875rem, text-base ist 1rem, text-xl ist 1,25rem, text-2xl ist 1,5rem. Die Aufgabe des Frameworks ist es, Größen zu benennen — nicht zu entscheiden, wie sie auf den Viewport reagieren. Responsivität wird über Varianten wie md:text-2xl ausgedrückt, und das ist das Breakpoint-Modell: Größen, die bei gewählten Breiten springen. Wenn du stattdessen Größen willst, die zwischen den Breiten gleiten , lieferst du das Gleiten selbst.

Der v4-Umbruch macht dieses Liefern billig. Die Konfiguration ist in CSS gewandert: Ein Token wird in einem @theme-Block deklariert, wird zu einer CSS Custom Property und die passende Utility liest es aus — deklariere --text-xl und text-xl nutzt deinen Wert. Weil eine Custom Property jeden CSS-Längenausdruck enthalten kann, kann sie auch ein clamp() enthalten. Fluide Typografie in v4 ist damit schlichtes CSS in einem schlichten Block; in v3 bedeutete derselbe Schritt, fontSize-Einträge in tailwind.config.js zu bearbeiten und clamp-Strings durch JavaScript-Konfiguration zu reichen.

Wie schreibst du fluide Schriftgrößen in @theme?

Definiere die Text-Tokens neu. Hier sind drei Größen in der festen Form, die Tailwind standardmäßig mitliefert:

@theme {
  --text-base: 1rem;     /* 16px bei jeder Breite */
  --text-xl: 1.25rem;    /* 20px bei jeder Breite */
  --text-2xl: 1.5rem;    /* 24px bei jeder Breite */
}

Und dieselben drei fluide gemacht — jede wächst über die Viewports 360→1280px auf das 1,125-Fache ihrer Größe:

@theme {
  --text-base: clamp(1rem, 0.9511rem + 0.2174vw, 1.125rem);      /* 16 → 18px */
  --text-xl: clamp(1.25rem, 1.1889rem + 0.2717vw, 1.4063rem);    /* 20 → 22.5px */
  --text-2xl: clamp(1.5rem, 1.4266rem + 0.3261vw, 1.6875rem);    /* 24 → 27px */
}

Prüf --text-2xl an beiden Enden nach: Bei einem 360px-Viewport ist 0.3261vw ≈1,17px, und 22,83 + 1,17 ≈ 24px; bei 1280px sind es ≈4,17px, und 22,83 + 4,17 ≈ 27px. text-2xl im Markup rendert jetzt 24px auf einem schmalen Handy, 27px auf einem breiten Desktop und den Wert auf der Geraden überall dazwischen — keine Varianten, keine Media Queries.

Zwei Details lohnen die Aufmerksamkeit. Die Steigungen unterscheiden sich — 0,2174vw, 0,2717vw, 0,3261vw — aber jede ist proportional zur Größe ihres Tokens, weil jedes Token um dieselben 12,5 % wächst. Genau dieser gemeinsame Anteil hält die Hierarchie über das Gleiten hinweg konstant; drei unabhängig berechnete clamps, jedes mit einer beliebigen Steigung, würden die Ebenen auseinanderdriften lassen, während sich der Viewport ändert. Und jedes Text-Token hat ein begleitendes Zeilenhöhen-Token (--text-xl--line-height), das seinen Standard behält, solange du es nicht neu definierst — die Zeilenhöhe verdient ihre eigene Entscheidung, sobald sich Größen zu bewegen beginnen.

Proportionale clamps für eine ganze Skala von Hand zu berechnen, ist mechanisch — und genau das macht es generierbar: Der Tailwind-v4-Export von Scale Composer schreibt dir diesen Block im fluiden Modus. Stell das Basis-Gleiten ein (16→18 über 360→1280) und das clamp jeder Schriftgrößen-Ebene wird aus dieser einen Steigung abgeleitet — öffne den Tailwind-Export im fluiden Modus und schalte den Fest/Fluid-Umschalter um, um zuzusehen, wie die @theme-Werte zwischen schlichtem rem und den obigen clamp()-Ausdrücken wechseln.

Der Tailwind-v4-Export von Scale Composer im fluiden Modus, dessen @theme-Block die Text-Tokens als berechnete clamp()-Ausdrücke auflistet

Kann ein einziges Root-clamp jede Utility fluide machen?

Der zweite Weg rührt @theme überhaupt nicht an:

html {
  font-size: clamp(1rem, 0.9511rem + 0.2174vw, 1.125rem); /* ≈16px @360 → ≈18px @1280 */
}

(Halte die Grenzen in rem: Auf dem Root-Element löst rem gegen die vom Leser eingestellte Browser-Schriftgröße auf, sodass diese Form die Einstellung respektiert — ein in px angegebenes clamp würde sie überschreiben.)

Tailwinds standardmäßige Schriftgrößen sind rem-basiert, und rem löst gegen die Root auf. Wenn die Root von 16px auf 18px gleitet, rendert text-xl 20px am schmalen Ende und 22,5px am breiten Ende, ohne dass sich ein einziges Token ändert — das unangetastete Standard-Theme ist bereits fluide-bereit. Zwei Zeilen, und jede Utility, die rem spricht, gleitet.

Dieses „jede” schneidet in beide Richtungen. Auch Abstands-Utilities sind rem-basiert: p-4 ist 1rem, was jetzt über dasselbe Gleiten 16px → 18px rendert. Für ein System, in dem Abstände mit der Schrift skalieren sollen — was die Proportionen zwischen Text und Abstand konstant hält —, ist das genau das, was du willst. Aber es ist eine globale Entscheidung: Das Gleiten erreicht alles, und eine einzelne Komponente davon auszunehmen bedeutet, ihre Größen in px zu schreiben und für dieses Element aus dem Token-System auszusteigen. Der @theme-Weg ist pro Token; der Root-Weg ist Alles-oder-nichts.

Was fügen Plugins für fluide Typografie hinzu?

Eine Kategorie von Community-Plugins erzeugt clamps pro Größe aus der Konfiguration: Du deklarierst Min/Max-Paare oder eine Skala plus einen Viewport-Bereich, und das Plugin gibt fluide Utilities aus — manche fügen Varianten hinzu, etwa auf Container-Queries basierende Größen. Sie automatisieren dieselbe Rechnerei, die dieser Artikel von Hand gemacht hat, und sie sind älter als v4; ein Teil ihres historischen Werts lag darin, in JavaScript zu erledigen, was @theme heute als schlichtes CSS annimmt. Wenn deine Anforderungen zu einem der beiden Wege oben passen, hat v4 die Abhängigkeit optional gemacht; wenn du Bereiche pro Größe willst, die nicht einen gemeinsamen Anteil teilen, kann ein Plugin diese Buchhaltung übernehmen — abzuwägen gegen die üblichen Wartungs- und Kompatibilitätsfragen, die jede Abhängigkeit mit sich bringt.

Welcher Weg passt zu welchem Projekt?

  • Das Root-clamp, wenn sich das ganze System — Schrift und Abstände — als eins bewegen soll. Am wenigsten Code, eine Steigung zu verifizieren, und die Barrierefreiheits- und Zoom-Rechnung wird einmal geprüft, an der Root.
  • @theme-clamps, wenn verschiedene Ebenen verschiedene Bereiche brauchen — eine Display-Größe, die schneller wächst als der Fließtext, oder ein Projekt, in dem die Abstände fix bleiben müssen, während die Schrift gleitet. Mehr Zahlen, mehr Kontrolle.
  • Ein Plugin, wenn sich die Bereiche pro Größe über das hinaus vermehren, was du von Hand pflegen willst.

Die Wege lassen sich auch kombinieren: Etliche Produktions-Setups clampen die Root für das systemweite Gleiten und ergänzen ein oder zwei @theme-clamps für Display-Größen, die eine steilere Fahrt brauchen.

Generiere den Block aus deiner eigenen Skala

Der schnellste Weg zu einem fluiden @theme-Block ist nicht, ihn zu berechnen, sondern ihn abzulesen: öffne den Export mit editierbaren fluiden Parametern, stell deine eigenen Basisgrößen und deinen Viewport-Bereich ein und sieh zu, wie sich jedes clamp im Block aus den vier Zahlen neu berechnet. Füg das Ergebnis in dein Stylesheet ein, und die Utilities, die du ohnehin schreibst — text-xl, text-2xl — beginnen zu gleiten.

Weiterlesen

  • Was ist fluide Typografie?

    Fluide Typografie macht Schriftgrößen zu einer Funktion der Viewport-Breite — ein Minimum, ein Maximum und ein sanftes Gleiten dazwischen. Die Formel, das System, was fest bleibt.

  • CSS clamp() mit echten Zahlen erklärt

    CSS clamp() erklärt, indem ein echtes Beispiel komplett durchgerechnet wird — Steigung, Achsenabschnitt und der bevorzugte vw + rem Wert — verifiziert bei 360px, 800px und 1280px.