TextMetrics
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Das TextMetrics
-Interface repräsentiert die Dimensionen eines Textstücks auf der Leinwand; eine TextMetrics
-Instanz kann mit der Methode CanvasRenderingContext2D.measureText()
abgerufen werden.
Instanzeigenschaften
TextMetrics.width
Schreibgeschützt-
Gibt die Breite eines Segments von Inline-Text in CSS-Pixeln zurück. Es berücksichtigt die aktuelle Schriftart des Kontextes.
TextMetrics.actualBoundingBoxLeft
Schreibgeschützt-
Abstand parallel zur Grundlinie vom Ausrichtungspunkt, der durch die
CanvasRenderingContext2D.textAlign
-Eigenschaft angegeben wird, zur linken Seite des Begrenzungsrechtecks des gegebenen Textes, in CSS-Pixeln; positive Zahlen zeigen einen Abstand nach links vom gegebenen Ausrichtungspunkt an. TextMetrics.actualBoundingBoxRight
Schreibgeschützt-
Gibt den Abstand vom Ausrichtungspunkt, der durch die
CanvasRenderingContext2D.textAlign
-Eigenschaft angegeben wird, zur rechten Seite des Begrenzungsrechtecks des gegebenen Textes, in CSS-Pixeln zurück. Der Abstand wird parallel zur Grundlinie gemessen. TextMetrics.fontBoundingBoxAscent
Schreibgeschützt-
Gibt den Abstand von der durch das
CanvasRenderingContext2D.textBaseline
-Attribut angegebenen horizontalen Linie zur Oberseite des höchsten Begrenzungsrechtecks aller Schriftarten, die verwendet werden, um den Text darzustellen, in CSS-Pixeln zurück. TextMetrics.fontBoundingBoxDescent
Schreibgeschützt-
Gibt den Abstand von der durch das
CanvasRenderingContext2D.textBaseline
-Attribut angegebenen horizontalen Linie zur Unterseite des Begrenzungsrechtecks aller Schriftarten, die verwendet werden, um den Text darzustellen, in CSS-Pixeln zurück. TextMetrics.actualBoundingBoxAscent
Schreibgeschützt-
Gibt den Abstand von der durch das
CanvasRenderingContext2D.textBaseline
-Attribut angegebenen horizontalen Linie zur Oberseite des Begrenzungsrechtecks, das verwendet wird, um den Text darzustellen, in CSS-Pixeln zurück. TextMetrics.actualBoundingBoxDescent
Schreibgeschützt-
Gibt den Abstand von der durch das
CanvasRenderingContext2D.textBaseline
-Attribut angegebenen horizontalen Linie zur Unterseite des Begrenzungsrechtecks, das verwendet wird, um den Text darzustellen, in CSS-Pixeln zurück. TextMetrics.emHeightAscent
Schreibgeschützt-
Gibt den Abstand von der durch die
CanvasRenderingContext2D.textBaseline
-Eigenschaft angegebenen horizontalen Linie zur Oberseite des em-Quadrats im Zeilenkasten, in CSS-Pixeln zurück. TextMetrics.emHeightDescent
Schreibgeschützt-
Gibt den Abstand von der durch die
CanvasRenderingContext2D.textBaseline
-Eigenschaft angegebenen horizontalen Linie zur Unterseite des em-Quadrats im Zeilenkasten, in CSS-Pixeln zurück. TextMetrics.hangingBaseline
Schreibgeschützt-
Gibt den Abstand von der durch die
CanvasRenderingContext2D.textBaseline
-Eigenschaft angegebenen horizontalen Linie zur Hängelinie des Zeilenkastens, in CSS-Pixeln zurück. TextMetrics.alphabeticBaseline
Schreibgeschützt-
Gibt den Abstand von der durch die
CanvasRenderingContext2D.textBaseline
-Eigenschaft angegebenen horizontalen Linie zur alphabetischen Grundlinie des Zeilenkastens, in CSS-Pixeln zurück. TextMetrics.ideographicBaseline
Schreibgeschützt-
Gibt den Abstand von der durch die
CanvasRenderingContext2D.textBaseline
-Eigenschaft angegebenen horizontalen Linie zur ideographischen Grundlinie des Zeilenkastens, in CSS-Pixeln zurück.
Beispiele
Veranschaulichung der Grundlinien
Dieses Beispiel demonstriert die Grundlinien, die das TextMetrics
-Objekt enthält. Die Standard-Grundlinie ist die alphabeticBaseline
. Siehe auch die CanvasRenderingContext2D.textBaseline
-Eigenschaft.
HTML
<canvas id="canvas" width="550" height="500"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const baselinesAboveAlphabetic = [
"fontBoundingBoxAscent",
"actualBoundingBoxAscent",
"emHeightAscent",
"hangingBaseline",
];
const baselinesBelowAlphabetic = [
"ideographicBaseline",
"emHeightDescent",
"actualBoundingBoxDescent",
"fontBoundingBoxDescent",
];
const baselines = [...baselinesAboveAlphabetic, ...baselinesBelowAlphabetic];
ctx.font = "25px serif";
ctx.strokeStyle = "red";
baselines.forEach((baseline, index) => {
const text = `Abcdefghijklmnop (${baseline})`;
const textMetrics = ctx.measureText(text);
const y = 50 + index * 50;
ctx.beginPath();
ctx.fillText(text, 0, y);
const baselineMetricValue = textMetrics[baseline];
if (baselineMetricValue === undefined) {
return;
}
const lineY = baselinesBelowAlphabetic.includes(baseline)
? y + Math.abs(baselineMetricValue)
: y - Math.abs(baselineMetricValue);
ctx.moveTo(0, lineY);
ctx.lineTo(550, lineY);
ctx.stroke();
});
Ergebnis
Messen der Textbreite
Beim Messen der X-Richtung eines Textstücks kann die Summe von actualBoundingBoxLeft
und actualBoundingBoxRight
breiter sein als die Breite des Inline-Blocks (width
), aufgrund von geneigten/kursiven Schriftarten, bei denen Zeichen über ihre Breite hinausragen.
Es kann daher nützlich sein, die Summe von actualBoundingBoxLeft
und actualBoundingBoxRight
zu verwenden, um die absolute Textbreite genauer zu berechnen:
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const text = "Abcdefghijklmnop";
ctx.font = "italic 50px serif";
const textMetrics = ctx.measureText(text);
console.log(textMetrics.width);
// 459.8833312988281
console.log(
textMetrics.actualBoundingBoxRight + textMetrics.actualBoundingBoxLeft,
);
// 462.8833333333333
Spezifikationen
Specification |
---|
HTML Standard # textmetrics |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Erzeugermethode in
CanvasRenderingContext2D
- Das
<canvas>
-Element und seine zugehörige Schnittstelle,HTMLCanvasElement