font-size
font-size bestimmt die Größe der Schrift eines Elements. Der Browser-Standard liegt bei 16px, und von diesem Wert leiten sich relative Einheiten wie rem und em ab. Die Eigenschaft wird vererbt, sodass ein auf body gesetzter Wert für alle Textelemente gilt. Für zugängliche und responsive Typografie sind rem und clamp() die besten Werkzeuge: Sie respektieren die Browser-Einstellungen des Nutzers und passen sich an verschiedene Bildschirmgrößen an.
- Syntax
- font-size: <absolute-size> | <relative-size> | <length-percentage>
- Initialwert
- medium (browserabhängig, meist 16px)
- Vererbt
- Ja
- Animierbar
- Ja
- Kategorie
- Typografie
- Werte
- 10
- Beispiele
- 5
- Browser
- 5 von 5
- 4 von 5
- Stand
- 15.02.2026
Grundlagen
Der Browser setzt die Standard-Schriftgröße auf medium, was in der Regel 16px entspricht. Nutzer können diesen Wert in ihren Browser-Einstellungen anpassen, und genau das ist der Grund, warum du relative Einheiten wie rem statt feste px-Werte verwenden solltest. 1rem entspricht immer der Schriftgröße des Root-Elements (<html>), also dem Browser-Standard oder dem vom Nutzer gewählten Wert.
em bezieht sich auf die Schriftgröße des Elternelements. Das klingt praktisch, hat aber einen Haken: In verschachtelten Elementen multiplizieren sich die Werte. Wenn ein <div> mit font-size: 1.2em ein weiteres <div> mit font-size: 1.2em enthält, ist die effektive Größe bereits 1.44em, der sogenannte Compounding-Effekt. rem hat dieses Problem nicht, weil es sich immer auf das Root-Element bezieht.
Für responsive Typografie bietet clamp() die eleganteste Lösung. Mit clamp(min, preferred, max) definierst du eine flexible Größe, die zwischen einem Minimum und Maximum skaliert. Der bevorzugte Wert kann eine Viewport-Einheit enthalten, sodass die Schrift mit der Fensterbreite wächst, aber nie zu klein oder zu groß wird.
Syntax & Werte
10 WerteBeispiele
5 BeispieleDie drei häufigsten Einheiten im direkten Vergleich. px ist absolut, rem relativ zum Root und em relativ zum Elternelement.
.px { font-size: 18px; } /* Absolut: immer 18px */
.rem { font-size: 1.125rem; } /* 18px bei 16px Root */
.em { font-size: 1.125em; } /* 18px bei 16px Eltern */<div class="units-demo">
<div class="u-px">18px: Feste Pixelgröße<div class="label">Ignoriert Browser-Zoom-Einstellungen</div></div>
<div class="u-rem">1.125rem: Relativ zum Root (18px bei 16px-Basis)<div class="label">Respektiert Browser-Einstellungen</div></div>
<div class="u-em">1.125em: Relativ zum Elternelement<div class="label">Kann sich in verschachtelten Elementen aufschaukeln</div></div>
</div> Wenn du em in verschachtelten Elementen verwendest, multiplizieren sich die Werte. Jede Ebene bezieht sich auf die font-size ihres Elternelements, nicht auf den Root.
.level {
font-size: 1.2em;
/* Ebene 1: 16px × 1.2 = 19.2px */
/* Ebene 2: 19.2px × 1.2 = 23px */
/* Ebene 3: 23px × 1.2 = 27.6px */
}
/* Lösung: rem statt em verwenden */
.level {
font-size: 1.2rem; /* Immer 19.2px */
}<div class="cascade-demo">
<div class="level">
Ebene 1: 1.2em = 19.2px
<div class="info">16px × 1.2 = 19.2px</div>
<div class="level">
Ebene 2: 1.2em = 23px
<div class="info">19.2px × 1.2 = 23px</div>
<div class="level">
Ebene 3: 1.2em = 27.6px
<div class="info">23px × 1.2 = 27.6px</div>
</div>
</div>
</div>
</div> clamp() definiert eine Schriftgröße, die sich mit der Viewport-Breite skaliert, aber nie unter ein Minimum fällt oder über ein Maximum wächst.
h1 {
/* Min: 1.25rem, Preferred: 4vw, Max: 2.5rem */
font-size: clamp(1.25rem, 4vw, 2.5rem);
}
p {
/* Min: 0.875rem, Preferred: 1.5vw, Max: 1.125rem */
font-size: clamp(0.875rem, 1.5vw, 1.125rem);
}<div class="clamp-demo">
<h3>Responsive Überschrift</h3>
<p>Dieser Text skaliert sanft zwischen Minimum und Maximum. Verkleinere das Browserfenster, um den Effekt zu sehen.</p>
</div>