Signatur
Beschreibung
Die Eigenschaft font eines 2D-Kontexts bestimmt Schriftart, Größe, Stärke, Stil und Variante für alle folgenden Textoperationen auf dem Canvas. Der Wert wird als Zeichenkette in derselben Syntax wie die CSS-Kurzschreibweise font angegeben, z. B. "italic bold 20px Georgia, serif". Der Standardwert ist "10px sans-serif".
Der Wert gehört zum Zeichenzustand des Kontexts. Er wird also mit save() gesichert und mit restore() wiederhergestellt. Er wirkt sich auf fillText(), strokeText() und measureText() aus. Wer Text messen will, etwa zum Zentrieren oder für Zeilenumbrüche, muss font deshalb vor dem Messen setzen.
Ungültige Werte werden stillschweigend ignoriert, und der vorherige Wert bleibt erhalten. Beim Auslesen liefert der Browser eine normalisierte Form. Relative Einheiten wie em oder % werden bezogen auf die Schriftgröße des <canvas>-Elements aufgelöst. Ohne Bezug zum DOM, etwa bei OffscreenCanvas, gilt die Standardgröße von 10px.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | "10px sans-serif" | CSS-font-Kurzschreibweise: optional font-style, font-variant, font-weight, font-stretch, dann zwingend font-size (optional /line-height, wird ignoriert) und font-family. |
Rückgabewert
"bold 24px Arial".Beispiele
Schrift setzen und Text zeichnen
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
console.log(ctx.font); // Standardwert
ctx.font = 'bold 32px "Segoe UI", Arial, sans-serif';
ctx.fillStyle = '#333';
ctx.fillText('Hallo Canvas', 20, 50);
console.log(ctx.font);
Text horizontal zentrieren mit measureText()
const ctx = document.querySelector('canvas').getContext('2d');
const text = 'Spielende';
ctx.font = '48px Georgia, serif'; // vor dem Messen setzen!
const { width } = ctx.measureText(text);
const x = (ctx.canvas.width - width) / 2;
ctx.fillText(text, x, ctx.canvas.height / 2);
console.log(`Textbreite: ${Math.round(width)}px`);
Webfont erst nach dem Laden verwenden
const ctx = document.querySelector('canvas').getContext('2d');
const drawTitle = async () => {
// Stellt sicher, dass die per @font-face definierte Schrift geladen ist
await document.fonts.load('700 36px "Roboto"');
ctx.font = '700 36px "Roboto", sans-serif';
ctx.fillText('Dashboard', 10, 50);
};
drawTitle();
Ungültige Werte werden ignoriert, save/restore
const ctx = document.createElement('canvas').getContext('2d');
ctx.font = '20px Arial';
ctx.font = 'bold Arial'; // ungültig: Größe fehlt
console.log(ctx.font);
ctx.save();
ctx.font = 'italic 12px monospace';
ctx.restore();
console.log(ctx.font);
// Wichtig · Fallstricke
- Größe und Familie sind Pflicht: Angaben wie
"bold Arial"oder"20px"sind ungültig und werden ohne Fehlermeldung ignoriert. - Webfonts: Ist eine per
@font-faceeingebundene Schrift noch nicht geladen, zeichnet der Browser mit der Ersatzschrift und aktualisiert das Bild später nicht. Deshalb vorher aufdocument.fonts.load()bzw.document.fonts.readywarten. - line-height in der Kurzschreibweise (
16px/2) wird ignoriert. Zeilenabstände muss man selbst berechnen. - Familiennamen mit Leerzeichen gehören in Anführungszeichen, z. B.
'"Times New Roman"'. - Hohe Pixeldichte: Die px-Angabe bezieht sich auf das Koordinatensystem des Canvas. Bei
devicePixelRatio> 1 den Kontext mitscale()anpassen, sonst wirkt der Text unscharf. - Für Feineinstellungen gibt es in modernen Browsern zusätzlich
letterSpacing,fontKerningundfontStretch. Die Unterstützung ist uneinheitlich, ältere Safari-Versionen fehlen. - Die Eigenschaft selbst wird von allen Browsern unterstützt und ist auch in
OffscreenCanvasRenderingContext2D(z. B. in Web Workern) verfügbar.