TextMetrics
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨2015å¹´7æâ©.
* Some parts of this feature may have varying levels of support.
å¨ canvas ä¸ï¼TextMetrics æ¥å£è¡¨ç¤ºææ¬ç尺寸ï¼éè¿ CanvasRenderingContext2D.measureText() æ¹æ³å建ã
屿§
TextMetrics.widthåªè¯»-
double ç±»åï¼ä½¿ç¨ CSS åç´ è®¡ç®çå èå符串ç宽度ãåºäºå½åä¸ä¸æåä½èèã
TextMetrics.actualBoundingBoxLeftåªè¯»-
double ç±»åï¼å¹³è¡äºåºçº¿ï¼ä»
CanvasRenderingContext2D.textAlign屿§ç¡®å®ç对é½ç¹å°ææ¬ç©å½¢è¾¹ç左侧çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ï¼æ£å¼è¡¨ç¤ºææ¬ç©å½¢è¾¹ç左侧å¨è¯¥å¯¹é½ç¹ç左侧ã TextMetrics.actualBoundingBoxRightåªè¯»-
double ç±»åï¼å¹³è¡äºåºçº¿ï¼ä»
CanvasRenderingContext2D.textAlign屿§ç¡®å®ç对é½ç¹å°ææ¬ç©å½¢è¾¹çå³ä¾§çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.fontBoundingBoxAscentåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æçæ°´å¹³çº¿å°æ¸²æææ¬çææåä½çç©å½¢æé«è¾¹çé¡¶é¨çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.fontBoundingBoxDescentåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æçæ°´å¹³çº¿å°æ¸²æææ¬çææåä½çç©å½¢è¾¹çæåºé¨çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.actualBoundingBoxAscentåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æçæ°´å¹³çº¿å°æ¸²æææ¬çç©å½¢è¾¹çé¡¶é¨çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.actualBoundingBoxDescentåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æçæ°´å¹³çº¿å°æ¸²æææ¬çç©å½¢è¾¹çåºé¨çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.emHeightAscentåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æç水平线å°çº¿æ¡ä¸ em æ¹åé¡¶é¨çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.emHeightDescentåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æç水平线å°çº¿æ¡ä¸ em æ¹ååºé¨çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.hangingBaselineåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æç水平线å°çº¿æ¡ç hanging åºçº¿çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.alphabeticBaselineåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æç水平线å°çº¿æ¡ç alphabetic åºçº¿çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã TextMetrics.ideographicBaselineåªè¯»-
double ç±»åï¼ä»
CanvasRenderingContext2D.textBaseline屿§æ æç水平线å°çº¿æ¡ç ideographic åºçº¿çè·ç¦»ï¼ä½¿ç¨ CSS åç´ è®¡ç®ã
示ä¾
>åºçº¿è¯´æ
ä¸é¢è¿ä¸ªä¾åå±ç¤ºäº TextMetrics 对象æå
å«çåºçº¿ãé»è®¤çåºçº¿æ¯ alphabeticBaselineï¼åæ¯åºçº¿ï¼ãåè§ 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);
let lineY = y - Math.abs(textMetrics[baseline]);
if (baselinesBelowAlphabetic.includes(baseline)) {
lineY = y + Math.abs(textMetrics[baseline]);
}
ctx.moveTo(0, lineY);
ctx.lineTo(550, lineY);
ctx.stroke();
});
ç»æ
æµéææ¬å®½åº¦
彿µé䏿®µææ¬ç水平宽度æ¶ï¼ç±äºåæ¯å¾æ/æä½å¯¼è´å符ç宽度å¯è½è¶
åºå
¶é¢å®ç宽度ï¼å æ¤ actualBoundingBoxLeft å actualBoundingBoxRight çæ»åå¯è½ä¼æ¯å
èçåç宽度ï¼widthï¼æ´å¤§ã
å æ¤ï¼è®¡ç® actualBoundingBoxLeft å actualBoundingBoxRight çæ»åæ¯ä¸ç§æ´åç¡®å°è·åææ¬ç»å¯¹å®½åº¦çæ¹æ³ï¼
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
è§è
| Specification |
|---|
| HTML > # textmetrics > |
æµè§å¨å ¼å®¹æ§
åè§
- åå»ºæ¹æ³å¨
CanvasRenderingContext2Dä¸ã - The
<canvas>element and its associated interface,HTMLCanvasElement