Zum Inhalt springen
Typografie

Text im Button optisch zentrieren mit text-box

Warum Text bei gleichem Padding oben und unten trotzdem zu tief sitzt, was text-box-trim und text-box-edge daran ändern, welche Kanten zu welcher Schrift passen und wo die Eigenschaft nicht greift.

8 Min. LesezeitVon Amelie RoesmannStand: 07. November 2026
TypografieCSSButtonsLayout

Fast jeder Button hat dasselbe kleine Problem: Das Padding ist oben und unten gleich, und trotzdem sitzt die Beschriftung sichtbar zu tief. Der Grund liegt nicht im Button, sondern in der Schrift. Jede Zeile bringt über den Großbuchstaben und unter der Grundlinie Raum mit, den die Schrift für Akzente und Unterlängen reserviert, und dieser Raum ist oben meist größer als unten. Bisher half nur Ausprobieren: ein Pixel mehr Padding unten, ein negativer Rand, eine Korrektur, die beim nächsten Schriftwechsel wieder falsch ist. Mit text-box lässt sich dieser Raum abschneiden, sodass die Box genau an der Oberkante der Großbuchstaben und an der Grundlinie endet. Safari hat die Eigenschaft als erster Browser in Version 18.2 im Dezember 2024 ausgeliefert, Chrome mit Version 133 Anfang 2025, Firefox mit Version 154. Seit August 2026 führt MDN sie als Baseline. Dieser Beitrag zeigt, woher der Versatz kommt, welche Werte es gibt, wo die Eigenschaft hilft und wo sie nicht greift.

Das Wichtigste in Kürze
  • Text sitzt im Button zu tief, weil die Zeile über den Großbuchstaben mehr leeren Raum mitbringt als unter der Grundlinie. Gleiches Padding ergibt deshalb ungleiche Abstände zur sichtbaren Schrift.
  • text-box: trim-both cap alphabetic schneidet die erste Zeile oben an der Großbuchstabenhöhe und die letzte unten an der Grundlinie ab. Danach entspricht das Padding dem Abstand, den man sieht.
  • Die Eigenschaft gilt für Blockcontainer und Inline-Boxen und wird nicht vererbt. Bei einem Button mit inline-flex gehört sie deshalb auf das Element mit dem Text, nicht auf den Button.
  • Browser ohne Unterstützung zeigen den Button wie bisher. Die Angabe ist eine Zugabe, die man ohne Abfrage ergänzen kann, solange das Padding auch ungetrimmt brauchbar aussieht.
01

Warum sitzt Text im Button tiefer als die Mitte?

Weil die Box einer Zeile nicht an der Schrift endet, sondern an den Maßen, die die Schriftdatei vorgibt. Über den Großbuchstaben liegt Raum für Akzente wie bei Ä oder É und für Oberlängen, unter der Grundlinie Raum für die Unterlängen von g, p und y. Dazu kommt der Anteil von line-height, der zu gleichen Teilen oben und unten aufgeschlagen wird. In einem Button mit einem Wort in Großbuchstaben oder mit großem Anfangsbuchstaben ist der obere Raum fast immer leer, der untere auch, aber er ist kleiner.

Das Ergebnis sieht man an jedem Button mit gleichem Padding: Der Abstand von der Oberkante zum Buchstaben ist größer als der von der Grundlinie zur Unterkante. Wie groß der Unterschied ist, hängt allein von der Schrift ab. Deshalb hilft keine feste Regel wie ein Pixel mehr unten, sie stimmt für eine Schrift und für eine Größe und ist beim nächsten Wechsel falsch.

Die üblichen Korrekturen setzen alle an der falschen Stelle an. Ungleiches Padding verschiebt den Text, aber nur für diese Schriftgröße. Ein negativer Rand am Textelement verschiebt die Zeile, aber das Layout drumherum rechnet mit der alten Höhe weiter. Und line-height auf 1 verkleinert die Zeile gleichmäßig nach den Maßen der Schrift, nicht nach dem, was man sieht.

Das Padding stimmt. Die Zeile ist größer als die Schrift.

02

Was macht text-box-trim genau?

Sie schneidet den Raum zwischen der Kante der Box und der sichtbaren Schrift ab, oben an der ersten Zeile, unten an der letzten oder an beiden. Wo genau geschnitten wird, bestimmt text-box-edge. Mit cap endet die Box oben an der Höhe der Großbuchstaben, mit alphabetic unten an der Grundlinie. Danach ist das Padding der Abstand, den man auch sieht.

Die Kurzschreibweise text-box fasst beides zusammen. text-box: trim-both cap alphabetic schneidet oben an der Großbuchstabenhöhe und unten an der Grundlinie, und weil fehlende Teile ergänzt werden, reicht auch text-box: cap alphabetic. Der Ausgangswert ist normal, also kein Schnitt. Die Eigenschaft wird nicht vererbt und gilt für Blockcontainer und Inline-Boxen.

Safari hat sie in Version 18.2 als erster Browser ausgeliefert, Chrome in Version 133. Firefox unterstützt sie laut caniuse seit Version 154, MDN führt sie seit August 2026 als Baseline. In frühen Entwürfen hieß sie leading-trim, und unter diesem Namen tauchen in älteren Beiträgen noch Beispiele auf, die heute nicht mehr funktionieren.

.button {  padding: 0.75rem 1.25rem;  line-height: 1.4;} /* the box now ends at cap height and at the baseline */  .button {    text-box: trim-both cap alphabetic;  }
Gleiches Padding, zwei Ergebnisse. Erst mit dem Schnitt entspricht der Abstand oben dem Abstand unten.
Das Padding danach neu wählenWer text-box auf einen bestehenden Button setzt, nimmt ihm oben und unten einige Pixel Höhe weg. Der Button wird also flacher. Das ist richtig, denn vorher war ein Teil des Abstands unsichtbarer Raum der Schrift, aber es heißt, dass das vertikale Padding danach meist etwas größer sein darf. Am besten stellt man es so ein, dass der Button mit Schnitt die gewünschte Höhe hat, und prüft dann einmal ohne, ob er dort nicht zu eng wirkt.
03

Welche Kanten passen zu welcher Schrift?

Für Buttons, Etiketten und Überschriften ist cap alphabetic fast immer die richtige Wahl. Die meisten Beschriftungen beginnen mit einem Großbuchstaben oder bestehen ganz daraus, und das Auge misst den Abstand oben an genau dieser Kante. Unten misst es an der Grundlinie, nicht an den Unterlängen, die bei einem g oder y ins Padding ragen dürfen.

Anders ist es bei Text, der ganz klein geschrieben ist. Dort gibt es oft keine Großbuchstaben, an denen sich das Auge orientiert, und die sichtbare Oberkante liegt auf der Höhe der Kleinbuchstaben. Für diesen Fall gibt es ex als obere Kante. Ein Button mit der Beschriftung weiter oder ein Etikett in Kleinschreibung sitzt damit mittig, wo cap ihn optisch zu tief zeigen würde.

Die dritte Kante, text, entspricht dem Ausgangszustand der Schrift und ist dort nützlich, wo man nur eine Seite schneiden will. Über trim-start oder trim-end lässt sich zum Beispiel nur die Oberkante einer Überschrift abschneiden, damit sie bündig mit einem Bild daneben beginnt, während der Abstand zum folgenden Absatz unverändert bleibt.

  1. cap alphabetic Für Buttons, Etiketten, Zahlen in Kennzahlen und Überschriften mit großem Anfangsbuchstaben. Die häufigste Wahl.
  2. ex alphabetic Für Beschriftungen ganz in Kleinbuchstaben, bei denen die Höhe der Kleinbuchstaben die sichtbare Oberkante ist.
  3. trim-start cap Nur oben schneiden, etwa damit eine Überschrift mit der Oberkante eines Bildes oder einer Linie abschließt.
04

Warum wirkt text-box auf meinem Flex-Button nicht?

Weil die Eigenschaft für Blockcontainer und Inline-Boxen gilt und ein Flex-Container keines von beidem ist. Viele Buttons stehen auf inline-flex, damit Symbol und Text nebeneinander mittig sitzen. Der Text darin landet dann in einem anonymen Flex-Element, und weil text-box nicht vererbt wird, erreicht die Angabe am Button diesen Text nicht.

Die Lösung ist ein eigenes Element um die Beschriftung, meist ein span, und die Angabe gehört auf dieses Element. Eine Inline-Box ist ausdrücklich eingeschlossen, und als Flex-Element wird das span ohnehin zu einem Block. Der Button behält sein inline-flex, das Symbol bleibt mit align-items mittig, und nur der Text verliert den leeren Raum über und unter sich.

Bei einem Button, der als inline-block steht, ist das nicht nötig, denn ein inline-block ist ein Blockcontainer. Am einfachsten prüft man das im Browser: In den Entwicklerwerkzeugen zeigt die Box-Ansicht die Höhe des Textelements, und mit Schnitt muss sie sichtbar kleiner sein als ohne.

<button class="inline-flex items-center gap-2 px-5 py-3">  <svg aria-hidden="true">...</svg>  <span class="[text-box:trim-both_cap_alphabetic]">Start the trial</span></button>
Der Button bleibt ein Flex-Container. Geschnitten wird die Beschriftung darin.
Am Button
  • Der Button steht auf inline-flex, die Angabe text-box sitzt direkt daran.
  • Der Text landet in einem anonymen Flex-Element und erbt die Angabe nicht.
  • Die Beschriftung behält den leeren Raum über und unter sich.
  • Wer nachmisst, sieht dieselbe Höhe wie vorher und hält die Eigenschaft für kaputt.
An der Beschriftung
  • Der Button bleibt auf inline-flex, Symbol und Text sitzen weiter mittig nebeneinander.
  • Die Beschriftung steht in einem eigenen span, und die Angabe text-box sitzt dort.
  • Das span endet oben an der Großbuchstabenhöhe und unten an der Grundlinie.
  • Das Padding des Buttons ist jetzt der Abstand, den man sieht.
Nicht auf html oder body setzenWeil text-box nicht vererbt wird, bringt eine Angabe ganz oben im Dokument nichts für die Elemente darunter. Ein Selektor, der alles trifft, schneidet dagegen auch Fließtext, Listen und Tabellenzellen und verschiebt damit Abstände, die vorher stimmten. Besser ist eine eigene Klasse für die Stellen, an denen der Schnitt gewollt ist: Buttons, Etiketten, Überschriften neben Bildern.
05

Wo hilft text-box außer im Button?

Überall dort, wo Text an einer sichtbaren Kante ausgerichtet werden soll. Das häufigste Beispiel ist eine Karte mit Bild und Überschrift nebeneinander: Ohne Schnitt beginnt die Überschrift einige Pixel unter der Oberkante des Bildes, obwohl beide im Raster auf derselben Linie stehen. Mit trim-start cap schließt die Großbuchstabenhöhe bündig mit dem Bild ab.

Das zweite Beispiel sind Abstände zwischen Überschrift und Text. Ein Abstand von 16 Pixeln im Code ist im Bild oft 22 oder 24, weil unter der Überschrift und über dem Absatz jeweils unsichtbarer Raum der Schrift liegt. Wer beide Seiten schneidet, bekommt den Abstand, den das Layout vorgibt, und ein Abstandssystem aus wenigen Werten wird auf der Seite tatsächlich sichtbar.

Das dritte sind kleine Elemente mit Hintergrund: Etiketten, Zähler in einem Kreis, Kennzahlen in einer Kachel. Gerade bei kleinen Schriftgrößen fällt der Versatz auf, weil wenige Pixel einen großen Anteil der Höhe ausmachen. Ein Zähler mit einer Ziffer in einem Kreis sitzt mit cap alphabetic in der Mitte, ohne dass man ihn von Hand verschiebt.

@utility text-trim {  text-box: trim-both cap alphabetic;} @utility text-trim-top {  text-box: trim-start cap alphabetic;} <h3 class="text-trim-top">Field notes</h3><span class="text-trim rounded-full px-3 py-1.5">New</span>
Eine Klasse für alle Stellen, an denen der Schnitt gewollt ist. In Tailwind v4 als eigene Utility.
06

Was passiert in Browsern ohne Unterstützung?

Nichts, was kaputt aussieht. Ein Browser, der text-box nicht kennt, überspringt die Angabe und zeigt die Zeile so, wie sie vorher aussah, mit dem leichten Versatz nach unten. Die Eigenschaft legt also etwas obendrauf, sie ersetzt nichts, und eine Abfrage mit @supports ist für den einfachen Fall nicht nötig.

Eine Abfrage lohnt sich nur, wenn das Padding auf den Schnitt abgestimmt ist und ohne ihn zu groß wäre. Dann schreibt man das Padding für die ungeschnittene Fassung als Standard und setzt das kleinere oder größere Padding zusammen mit text-box in einen Block mit @supports (text-box: cap alphabetic). So bekommt jeder Browser die Höhe, die zu seinem Verhalten passt.

Für die Prüfung reichen zwei Blicke. Im aktuellen Browser muss der Abstand über den Großbuchstaben gleich dem unter der Grundlinie sein, am einfachsten zu sehen bei einem Wort ohne Unterlängen wie START. In einem älteren Browser darf der Button etwas tiefer sitzen, aber nicht so eng, dass die Schrift an den Rand stößt.

.button {  padding-block: 0.625rem;}   @supports (text-box: cap alphabetic) {  .button {    padding-block: 0.875rem;    text-box: trim-both cap alphabetic;  }}
Nur nötig, wenn das Padding auf den Schnitt abgestimmt ist. Sonst reicht die Angabe allein.

Erst die Fassung, die überall trägt. Dann der Schnitt obendrauf.

Teilen
Geschrieben von
Amelie RoesmannCreative Direction

Wir bauen Websites und Web-Apps bei Systra Studios in Münster und legen die Bausteine daraus hier ab. Was in den Beiträgen steht, kommt aus echten Projekten, nicht aus einem Werbeprospekt.

Systra Studios: Webdesign aus Münster

Ein Button, eine Zeile CSS.
Die Sections drumherum stehen bereit.

Call-to-Action-Sections mit Überschrift, kurzem Text und einem Button im Mittelpunkt. Kopieren, die Klasse mit text-box auf die Beschriftung setzen und das Padding einmal neu einstellen.

  • Eine Datei je Komponente, als Quelltext im eigenen Projekt.
  • Gebaut mit React, TypeScript und Tailwind CSS v4.
  • Reduzierte Bewegung ist in jeder Komponente berücksichtigt.
CTA-Sections ansehen
FAQ

Häufige Fragen

text-box ist die Kurzschreibweise für die beiden anderen. text-box-trim legt fest, ob und an welcher Seite geschnitten wird: none schneidet nichts und ist der Ausgangswert, trim-start schneidet oben an der ersten Zeile, trim-end unten an der letzten, trim-both an beiden. text-box-edge legt fest, wo geschnitten wird: oben an text, cap oder ex, unten an text oder alphabetic. Ohne text-box-trim wirkt text-box-edge gar nicht. In der Kurzschreibweise ergänzt der Browser fehlende Teile selbst: Fehlt die Angabe zum Schneiden, gilt trim-both, fehlt die Angabe zur Kante, gilt auto, was text entspricht. text-box: cap alphabetic bedeutet also dasselbe wie text-box: trim-both cap alphabetic, und text-box: normal setzt beides zurück. Die Eigenschaft hieß in frühen Entwürfen leading-trim, unter diesem Namen findet man sie noch in älteren Artikeln.

Alle großen Engines in ihren aktuellen Versionen. Safari war mit Version 18.2 im Dezember 2024 der erste Browser, auch auf dem iPhone. Chrome folgte mit Version 133 Anfang 2025, Edge und Opera ziehen über Chromium mit. Firefox unterstützt die Eigenschaft laut caniuse seit Version 154, und seit August 2026 führt MDN sie als Baseline, also als neu in allen großen Browsern verfügbar. Zur Gruppe der Funktionen, die Interop 2026 gezielt angleichen will, gehört sie nicht. Für ältere Browser ist das unkritisch: Sie ignorieren die Angabe und zeigen die Zeile ungeschnitten, mit dem Versatz, den man ohnehin schon kennt. Wichtig ist nur, das Padding so zu wählen, dass der Button auch ohne Schnitt nicht zu eng wirkt.

Am schnellsten als freie Eigenschaft in eckigen Klammern, also [text-box:trim-both_cap_alphabetic] direkt am Element. Der Unterstrich steht für das Leerzeichen, das in einer Klasse nicht vorkommen darf. Wer die Angabe an vielen Stellen braucht, legt in Tailwind v4 mit @utility eine eigene Klasse an, etwa text-trim, und schreibt darin text-box: trim-both cap alphabetic. Dann steht im Markup ein lesbarer Name statt einer langen Klammer, und ein Wechsel der Kanten passiert an einer Stelle. Für Buttons mit inline-flex gilt dabei dasselbe wie ohne Tailwind: Die Klasse gehört auf das span mit der Beschriftung, nicht auf den Button selbst, weil ein Flex-Container nicht zu den Boxen gehört, für die die Eigenschaft gilt.

Nein, beides regelt verschiedene Dinge. line-height bestimmt den Abstand der Zeilen untereinander und bleibt bei mehrzeiligem Text genau so wichtig wie vorher. text-box schneidet nur außen, oben an der ersten Zeile und unten an der letzten, der Raum zwischen den Zeilen bleibt unberührt. Was text-box ersetzt, ist der Trick, line-height auf 1 oder darunter zu setzen, damit ein einzeiliger Button nicht zu hoch wird. Dieser Trick verkleinert zwar die Zeile, schneidet aber an der falschen Stelle, nämlich gleichmäßig oben und unten nach den Maßen der Schrift, nicht an der Großbuchstabenhöhe und der Grundlinie. Bei einer zweizeiligen Beschriftung führt er außerdem dazu, dass sich die Zeilen berühren. Mit text-box bleibt line-height auf einem lesbaren Wert, und nur der Rand der Box wandert an die sichtbare Schrift.

Deine Frage war nicht dabei? Wir helfen gern weiter.

Kontakt aufnehmen