TextMetrics
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Das TextMetrics-Interface repräsentiert die Abmessungen eines Textstücks auf der Leinwand; eine TextMetrics-Instanz kann mit der Methode CanvasRenderingContext2D.measureText() abgerufen werden.
Instanz-Eigenschaften
TextMetrics.widthSchreibgeschützt-
Gibt die Breite eines Segments von Inline-Text in CSS-Pixeln zurück. Es berücksichtigt die aktuelle Schriftart des Kontexts.
TextMetrics.actualBoundingBoxLeftSchreibgeschützt-
Abstand parallel zur Grundlinie vom Ausrichtungspunkt, der durch die Eigenschaft
CanvasRenderingContext2D.textAlignangegeben wird, bis zur linken Seite des Begrenzungsrechtecks des gegebenen Textes, in CSS-Pixel; positive Zahlen zeigen einen Abstand an, der nach links vom gegebenen Ausrichtungspunkt geht. TextMetrics.actualBoundingBoxRightSchreibgeschützt-
Gibt den Abstand vom Ausrichtungspunkt, der durch die Eigenschaft
CanvasRenderingContext2D.textAlignangegeben wird, bis zur rechten Seite des Begrenzungsrechtecks des gegebenen Textes in CSS-Pixeln zurück. Der Abstand wird parallel zur Grundlinie gemessen. TextMetrics.fontBoundingBoxAscentSchreibgeschützt-
Gibt den Abstand von der durch das Attribut
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur Oberseite des höchsten Begrenzungsrechtecks aller zur Darstellung des Textes verwendeten Schriftarten in CSS-Pixeln zurück. TextMetrics.fontBoundingBoxDescentSchreibgeschützt-
Gibt den Abstand von der durch das Attribut
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur Unterseite des Begrenzungsrechtecks aller zur Darstellung des Textes verwendeten Schriftarten in CSS-Pixeln zurück. TextMetrics.actualBoundingBoxAscentSchreibgeschützt-
Gibt den Abstand von der durch das Attribut
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur Oberseite des zur Darstellung des Textes verwendeten Begrenzungsrechtecks in CSS-Pixeln zurück. TextMetrics.actualBoundingBoxDescentSchreibgeschützt-
Gibt den Abstand von der durch das Attribut
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur Unterseite des zur Darstellung des Textes verwendeten Begrenzungsrechtecks in CSS-Pixeln zurück. TextMetrics.emHeightAscentSchreibgeschützt-
Gibt den Abstand von der durch die Eigenschaft
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur Oberseite des em-Quadrats in der Linienbox in CSS-Pixeln zurück. TextMetrics.emHeightDescentSchreibgeschützt-
Gibt den Abstand von der durch die Eigenschaft
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur Unterseite des em-Quadrats in der Linienbox in CSS-Pixeln zurück. TextMetrics.hangingBaselineSchreibgeschützt-
Gibt den Abstand von der durch die Eigenschaft
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur hängenden Grundlinie der Linienbox in CSS-Pixeln zurück. TextMetrics.alphabeticBaselineSchreibgeschützt-
Gibt den Abstand von der durch die Eigenschaft
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur alphabetischen Grundlinie der Linienbox in CSS-Pixeln zurück. TextMetrics.ideographicBaselineSchreibgeschützt-
Gibt den Abstand von der durch die Eigenschaft
CanvasRenderingContext2D.textBaselineangegebenen horizontalen Linie bis zur ideografischen Grundlinie der Linienbox in CSS-Pixeln zurück.
Beispiele
>Veranschaulichung der Grundlinien
Dieses Beispiel zeigt die Grundlinien, die das TextMetrics-Objekt enthält. Die Standardgrundlinie ist die alphabeticBaseline. Siehe auch die Eigenschaft CanvasRenderingContext2D.textBaseline.
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-Box-(width) auf Grund von schrägen/kuriven Schriftarten, bei denen Zeichen über ihre Vorlauflänge hinweggehen.
Es kann deshalb nützlich sein, die Summe von actualBoundingBoxLeft und actualBoundingBoxRight als genauere Methode zur Ermittlung der absoluten Textbreite zu verwenden:
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
| Spezifikation |
|---|
| HTML> # textmetrics> |
Browser-Kompatibilität
Siehe auch
- Erzeugermethode in
CanvasRenderingContext2D - Das
<canvas>-Element und seine zugehörige Schnittstelle,HTMLCanvasElement