Signatur
Beschreibung
Die Eigenschaft textAlign bestimmt, an welcher Stelle des Textes der x-Wert liegt, den man fillText() oder strokeText() übergibt. Der Text wird also nicht innerhalb eines Kastens ausgerichtet. Die x-Koordinate dient als Ankerpunkt: Bei "center" liegt die Mitte des Textes auf x, bei "right" endet der Text dort.
Mögliche Werte:
"start"(Standard) – Ausrichtung am Zeilenanfang, abhängig von der Schreibrichtung (direction): beiltrlinks, beirtlrechts."end"– Ausrichtung am Zeilenende, ebenfalls abhängig von der Schreibrichtung."left"– Der Text beginnt bei x."right"– Der Text endet bei x."center"– Der Text wird um x herum zentriert.
Typische Einsatzgebiete sind zentrierte Beschriftungen in Diagrammen, rechtsbündige Zahlenspalten, Beschriftungen von Achsen und Buttons in Spielen. Zusammen mit textBaseline lässt sich Text sowohl horizontal als auch vertikal genau positionieren.
Die Eigenschaft gehört zum Zeichenzustand des Kontexts. Sie wird also von save() gesichert und von restore() wiederhergestellt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | "start" | "end" | "left" | "right" | "center" | "start" | Neue Ausrichtung beim Setzen. Ungültige Werte werden stillschweigend ignoriert, der bisherige Wert bleibt dann erhalten. |
Rückgabewert
"start", "end", "left", "right" oder "center".Beispiele
Alle Ausrichtungen an einer Hilfslinie vergleichen
const canvas = document.createElement('canvas');
canvas.width = 400;
canvas.height = 220;
document.body.append(canvas);
const ctx = canvas.getContext('2d');
const x = 200;
// Senkrechte Hilfslinie für den Ankerpunkt
ctx.strokeStyle = 'red';
ctx.beginPath();
ctx.moveTo(x, 0);
ctx.lineTo(x, canvas.height);
ctx.stroke();
ctx.font = '20px sans-serif';
const aligns = ['start', 'end', 'left', 'right', 'center'];
aligns.forEach((align, i) => {
ctx.textAlign = align;
ctx.fillText(`textAlign = "${align}"`, x, 40 + i * 40);
});
Text in der Canvas-Mitte zentrieren
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
ctx.font = 'bold 32px system-ui';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle'; // auch vertikal zentrieren
ctx.fillStyle = '#333';
ctx.fillText('Game Over', canvas.width / 2, canvas.height / 2);
Rechtsbündige Zahlenspalte in einer Tabelle
const ctx = document.querySelector('canvas').getContext('2d');
const posten = [
{ name: 'Miete', betrag: 850 },
{ name: 'Strom', betrag: 72.5 },
{ name: 'Internet', betrag: 39.99 }
];
const fmt = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' });
ctx.font = '16px monospace';
posten.forEach(({ name, betrag }, i) => {
const y = 30 + i * 24;
ctx.save();
ctx.textAlign = 'left';
ctx.fillText(name, 10, y);
ctx.textAlign = 'right'; // Beträge enden alle bei x = 290
ctx.fillText(fmt.format(betrag), 290, y);
ctx.restore();
});
Ungültige Werte werden ignoriert
const ctx = document.createElement('canvas').getContext('2d');
console.log(ctx.textAlign);
ctx.textAlign = 'center';
ctx.textAlign = 'middle'; // ungültig, kein Fehler
console.log(ctx.textAlign);
// Wichtig · Fallstricke
- Häufiger Fehler:
"middle"ist kein gültiger Wert fürtextAlign, sondern nur fürtextBaseline. Für die horizontale Mitte verwendet man"center". Ungültige Werte lösen keine Ausnahme aus, sondern werden einfach ignoriert. "start"und"end"hängen vonctx.directionab. Dessen Standardwert"inherit"übernimmt die Richtung vom<canvas>-Element bzw. vom Dokument. Bei arabischen oder hebräischen Seiten bedeutet"start"daher rechts. Für eine feste Ausrichtung nimmt man"left"oder"right".textAlignwirkt sich auch auf die Werte aus, diemeasureText()zurückgibt (actualBoundingBoxLeft/Right). Sie beziehen sich auf den Ankerpunkt.- Einen automatischen Zeilenumbruch gibt es in der Canvas-API nicht. Mehrzeiligen Text muss man selbst aufteilen und Zeile für Zeile mit der gewünschten Ausrichtung zeichnen.
- Die Eigenschaft wird in allen modernen Browsern unterstützt, auch in
OffscreenCanvasRenderingContext2D(etwa in Web Workern).