Schöne Zeilenumbrüche in CSS – text-wrap balance und pretty
Eine Überschrift, bei der ein einzelnes Wort einsam in der letzten Zeile hängt, sieht unruhig aus. Mit text-wrap balance und pretty überlässt du dem Browser das saubere Umbrechen – ohne manuelle <br> und ohne JavaScript.
Kennst du das: Eine Überschrift bricht so um, dass in der letzten Zeile nur ein einziges Wort steht? Oder ein Absatz endet mit einem einsamen „Wort." ganz allein in der Zeile? Das nennt man Schusterjunge bzw. Hurenkind – und es lässt sonst saubere Typografie unruhig wirken. Früher habe ich das mit von Hand gesetzten <br> geflickt. Die Umbrüche saßen dann aber nur bei genau einer Bildschirmbreite richtig. Heute erledigt das der Browser – mit text-wrap.
Für Überschriften: balance
text-wrap: balance verteilt die Wörter so auf die Zeilen, dass alle etwa gleich lang sind. Perfekt für Überschriften, Buttons und kurze Textblöcke:
h1, h2, h3,
.karte-titel,
blockquote {
text-wrap: balance;
}Der Browser rechnet dafür ein paar Umbruch-Varianten durch. Deshalb wirkt balance nur auf kurze Texte (die Engines begrenzen es meist auf wenige Zeilen) – genau da, wo man es braucht. Für einen langen Fließtext wäre es Verschwendung.
Für Fließtext: pretty
Bei längeren Absätzen willst du kein Gleichgewicht, sondern nur keine einsame letzte Zeile. Das macht text-wrap: pretty:
p, li {
text-wrap: pretty;
}pretty bricht wie gewohnt um, achtet aber am Ende darauf, dass nicht ein Wort allein übrig bleibt. Der Effekt ist dezent, aber ein gut gesetzter Absatz liest sich spürbar ruhiger.
Sicher einsetzen
Beides ist ein reiner Komfort-Gewinn: Wo ein älterer Browser balance oder pretty nicht kennt, bricht der Text einfach normal um – nichts geht kaputt. Du brauchst also keinen Fallback. Ich lege es global an und gut ist:
:where(h1, h2, h3, figcaption) { text-wrap: balance; }
:where(p, li, dd) { text-wrap: pretty; }Das :where() hält die Spezifität bei null, sodass du es an einzelnen Stellen mühelos wieder überschreiben kannst.
Ich setze das inzwischen in jedem Website-Projekt ein – es ist einer dieser Handgriffe, die niemandem auffallen und trotzdem den Unterschied zwischen „ganz ok" und „wirkt professionell" ausmachen. Wenn du eine Website mit sauberer Typografie und eigenem CMS möchtest, schreib mir auf bymw.de.
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
Text nach drei Zeilen abschneiden – line-clamp statt JavaScript
Kartenlisten sehen nur dann ordentlich aus, wenn alle Vorschautexte gleich hoch sind. Das serverseitig auf 120 Zeichen zu kürzen geht schief, sobald die Karte schmaler wird – CSS kann das seit Jahren selbst.
grid-template-areas – ein Layout, das man im Code sehen kann
Statt Zeilen- und Spaltennummern zu zählen, malst du dein Layout als kleine ASCII-Zeichnung ins CSS. Auf dem Handy schreibst du die Zeichnung einfach anders – dieselben Bausteine, andere Anordnung, kein einziger geänderter HTML-Knoten.
subgrid – Karten, deren Zeilen wirklich auf einer Linie liegen
Drei Karten nebeneinander, jede mit Titel, Text und Knopf – und alles steht leicht versetzt, weil ein Titel zweizeilig ist. Mit subgrid teilen sich die Karten die Zeilen des Eltern-Grids, und alles sitzt bündig. Ohne feste Höhen, ohne JavaScript.