font-size – Maßeinheiten
Die Maßeinheiten für Schriftgrößen haben es in sich. Früher einmal gab es Pixel (px) für Monitore und Point (pt) für den Druck, heute stellt CSS über 20 Einheiten bereit.
h2 { font-size: 2em } p { font-size: 18px } td { font-size: small } li { font-size: 90% }
- font-size
- regelt die Größe der Schrift mit absoluten oder relativen Werten, durch numerische Werte, Prozentangaben oder Schlüsselwörter.
Dabei ist die Angabe der Schriftgröße eher als Empfehlung zu sehen, denn die tatsächliche Schriftgröße hängt am Ende von der Auflösung und Größe des Monitors, von den Einstellungen des Benutzers und auch noch vom Browser ab. Die Schriftgröße beim Benutzer ist ein Blick in die Glaskugel.
Relative Maßeinheiten
- em (relativ)
- rem (relativ)
- ex (relativ)
- ch (relativ)
- % (relativ)
- vw (relativ)
- vh (relativ)
- vmin (relativ)
- vmax (relativ)
- smaller (relativ)
- larger (relativ)
Absolute Maßeinheiten
- px (absolut)
- xx-small (absolut)
- x-small (absolut)
- small (absolut)
- xx-large (absolut)
- x-large (absolut)
- large (absolut)
- medium (absolut)
Einheiten für den Druck
- pt (Druck)
- pc (Druck)
- cm (Druck)
- mm (Druck)
- in (Druck)
In den modernen Browsern kommt eine praktische CSS-Funktion hinzu: CSS clamp. font-size: clamp(min, bevorzugt, max) bestimmt eine minimale und maximale Schriftgröße, und das gleichzeitig mit einem bevorzugten Wert. Die clamp-Funktion erspart Breakpoints.
Gut lesbare Schriftgröße
Kleiner geht es nicht: Neun Pixel brauchen wir, damit der Text lesbar ist. Aber die Zeit der kleinen Schriften ist vorbei. Die Auflösung der Monitore – selbst der Monitore auf den mobilen Geräten – ist so heute so hoch, dass die Schriftgröße sich am Standard von 1em (16px) orientieren kann, und dabei dennoch ein kompaktes Schriftbild entsteht.
Native Schriftgrößen der Elemente
Es gab eine Empfehlung in HTML: The Markup Language (an HTML language reference) / W3C Working Group Note 28 May 2013, und obwohl das Dokument nicht mehr fortgeschrieben wird und nur noch aus historischen Gründen im Web bleibt, lieferte es immerhin einen Anhaltspunkt, wie Browser die Schriftgrößen der Elemente rendern sollen.
Element | font-size | margin | line-height |
---|---|---|---|
p | 1em 16px |
1em 16px |
1.2em 19.2px |
h1 | 2em 32px |
1.3400em 21.44px |
2.34em 37.44px |
h2 | 1.5em 24px |
1.2450em 19.92px |
1.74em 27.84px |
h3 | 1.17em 18.72px |
1.1699em 18.7184px |
1.41em 22.56px |
h4 | 1em 16px |
1.3300em 21.28px |
1.2em 19.2px |
h5 | 0.83em 13.28px |
1.3860em 22.176px |
0.92em 14.72px |
h6 | 0.67em 10.72px |
1.5611em 24.9776px |
0.76em 12.16px |
ul | 1em 16px |
1em 16px |
1.2em 19.2px |
li | 1em 16px |
0em 0px |
1.2em 19.2px |
table, td | 1em 16px |
0em 0px |
1.2em 19.2px |
pre | 0.8125em 13px |
0.8125em 13px |
0.92em 14.72px |
div section … |
1em 16px |
0em 0px |
1.2em 19.2px |
input button |
0.6876em 11.0016px |
0.125em 2px |
0.8125em 13px |
EM hat sich zur Standard-Maßeinheit für font-size entwickelt, darum geben die Browser-Konsolen unter den Developer Tools die Schriftgrößen in EM an. 1em entspricht 16px.
Der Begriff EM hat seinen Ursprung aus dem Schriftsatz, wo 1EM etwa der Breite der großen Letter M entspricht.
Relative Schriftgrößen: EM, REM, %
em, % und rem sind relative Maßeinheiten, px hingegen ist eine absolute Größenordnung.
Das Absolute an absoluten Einheiten wie Pixel ist: Die Schriftgröße eines Elements bleibt unter allen Umständen und an jeder Position gleich.
Bei relativen Einheiten für die Schriftgröße erben alle Elemente die Vergrößerung oder Verkleinerung der Schriftgröße vom body bzw. html-Element. html {font-size: 1.1em} oder html { font-size: 110% } vergrößern die Schrift aller Elemente im Dokument um 10%. font-size in REM erbt ebenfalls vom HTML / Body-Element, aber nicht von seinem Eltern-Element.
Diese Technik wird auf vielen Webseiten genutzt, denn auf den meisten Webseiten wurde früher die »normale« Schriftgröße ein wenig reduziert, um Inhalte kompakt darzustellen. Heute wird die Schriftgröße für die großen Monitore eher generell vergrößert.
Absolute vs. relative Schriftgrößen
EM erbt von seinem direkten Eltern- oder umfassenden Element, PX erbt nichts.
Nach handfesten Pixeln, die für jedermann irgendwie intuitiv und fassbar sind, bereiten EM zuerst leichte Knoten in den Denkschleifen. Nehmen wir an, die Schriftgröße für das html-Element ist mit font-size: 110% schon generell leicht vergrößert.
main { font-size: 110% } vergrößert den Hauptbereich um weitere 10%, während .sidebar { font-size: 0.9em } alle Schriften dann wieder verkleinert … das klingt, als wären wir am äußeren Rand der Berechenbarkeit.
Main
3 sachsen moon officia aute, non cupidatat vegan maiscolbus dolor brunch. Flood boot quinoa nesciunt laborum rasanti.
- Rasanti flooter
- Giganti maiscolbus
font-size in EM setzt die beiden Layout-Blöcke schnell und unkompliziert in ein Verhältnis zueinander. Mit font-size in px muss die Schriftgröße für jedes Element unterhalb von main bzw. von .sidebar einzeln angepasst werden.
EM: nur eine Eigenschaft in der Media Query ändern
html { font-size: 1.1em } h4 {font-size: 1.4em; } p { font-size: 1.1em; } li { font-size: 0.9em } main { font-size: 1.1em; } .sidebar { font-size: 0.9em; }
PX: Alle Elemente neu berechnen
html { font-size: 18px } main h4 { font-size: 27px; } main p { font-size: 21px; } main li { font-size: 17px } .sidebar h4 { font-size: 22px; } .sidebar p { font-size: 17px; } .sidebar li { font-size: 15px }
Kommen jetzt auch noch Änderungen an den Breakpoints hinzu, braucht nur eine Eigenschaft im Breakpoint für den großen Monitor überschrieben werden:
@media screen and (min-width: 1400px) { html { font-size: 1.28em} }
Übrigens: Gleich, ob font-size in %, px, em oder rem angegeben wird: Der Abstand zwischen Überschriften wie h6 und Text in Absätzen mit dem p-Tag bleibt immer erhalten.
font-size, Inheritance und Cascading
Diese Technik spart Schreibarbeit im Stylesheet und verhindert manch einen Ausreißer. Doch der Effekt kann auch zurückschlagen – wer z.B. für das ul-Element eine Verkleinerung auf diesem Wege durchsetzen will, dem schlägt die Vererbung ein Schnippchen: Jedes tiefer verschachtelte Element erbt die CSS-Eigenschaft und die Listenelemente werden von Ebene zu Ebene immer kleiner.
- Erste Ebene der ungeordenten Liste
- Erste Ebene der ungeordenten Liste
- Zweite Ebene der ungeordenten Liste
- Zweite Ebene der ungeordenten Liste
- Dritte Ebene der ungeordenten Liste
- Dritte Ebene der ungeordenten Liste
Cascading und Vererbung (Inheritance) sind die häufigsten Fallen, wenn sich die Schriftgröße einfach nicht an die Vorgaben des Webdesigners anpassen will. Das beste Werkzeug für die Suche nach den Fehlern im CSS sind die Entwickler-Tools in der Browser-Konsole (rechte Maustaste und Element untersuchen oder Element-Informationen).
font-size in Prozent
EM oder % – das macht keinen Unterschied.
1em = 100% = 16px 0.773em = 77.3%
Die Angabe in % (ganzzahlig!) erlaubt feine Schrittweiten bei der Vergrößerung oder Verkleinerung um jeweils 1%. Am Ende muss der Browser aber sowohl EM als auch % wieder zu Pixeln umrechnen und runden.
Das W3C empfiehlt zwar »em« bzw. »rem«, aber die Empfehlung stammt noch aus der Zeit, als die Zoom-Funktion des Browsers zu Problemen führen konnte.
Früher konnte die Angabe der Schriftgröße im HTML- oder BODY-Element mit font-size: 110% zu Problemen führen, wenn der Benutzer den Zoom im Browser auf 200 oder 300% einstellte. Das hat sich heute durch das Aussterben der alten IE-Versionen erledigt.
px Pixel • Konsistente Schrift, feste UI-Elemente
px kann weiterhin für konsistentes border, padding und margin sorgen, skaliert aber nicht über Media Queries wie em / % / rem.
Sowohl relative Angaben wie em, % als auch absolute Angaben wie px haben Vor- und Nachteile. em/rem oder % für die Schriftgröße ist eine elegante Lösung, die viele Zeilen im CSS spart, während sich mit Schriftgrößen in px ein pixelgenaues Layout umsetzen lässt.