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.
* Some parts of this feature may have varying levels of support.
Note: This feature is available in Web Workers.
Giao diện TextMetrics đại diện cho kích thước của một đoạn văn bản trong canvas; một thực thể TextMetrics có thể được lấy bằng phương thức CanvasRenderingContext2D.measureText().
Thuộc tính phiên bản
TextMetrics.widthRead only-
Trả về chiều rộng của một đoạn văn bản nội tuyến tính bằng pixel CSS. Tính đến font chữ hiện tại của ngữ cảnh.
TextMetrics.actualBoundingBoxLeftRead only-
Khoảng cách song song với đường cơ sở từ điểm căn chỉnh do thuộc tính
CanvasRenderingContext2D.textAlignxác định đến cạnh trái của hình chữ nhật bao quanh văn bản đã cho, tính bằng pixel CSS; số dương cho biết khoảng cách về bên trái từ điểm căn chỉnh đã cho. TextMetrics.actualBoundingBoxRightRead only-
Trả về khoảng cách từ điểm căn chỉnh do thuộc tính
CanvasRenderingContext2D.textAlignxác định đến cạnh phải của hình chữ nhật bao quanh văn bản đã cho, tính bằng pixel CSS. Khoảng cách được đo song song với đường cơ sở. TextMetrics.fontBoundingBoxAscentRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đỉnh của hình chữ nhật bao quanh cao nhất trong tất cả các font chữ được dùng để hiển thị văn bản, tính bằng pixel CSS. TextMetrics.fontBoundingBoxDescentRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đáy của hình chữ nhật bao quanh tất cả các font chữ được dùng để hiển thị văn bản, tính bằng pixel CSS. TextMetrics.actualBoundingBoxAscentRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đỉnh của hình chữ nhật bao quanh dùng để hiển thị văn bản, tính bằng pixel CSS. TextMetrics.actualBoundingBoxDescentRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đáy của hình chữ nhật bao quanh dùng để hiển thị văn bản, tính bằng pixel CSS. TextMetrics.emHeightAscentRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đỉnh của ô em trong hộp dòng, tính bằng pixel CSS. TextMetrics.emHeightDescentRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đáy của ô em trong hộp dòng, tính bằng pixel CSS. TextMetrics.hangingBaselineRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đường cơ sở treo (hanging baseline) của hộp dòng, tính bằng pixel CSS. TextMetrics.alphabeticBaselineRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đường cơ sở chữ cái của hộp dòng, tính bằng pixel CSS. TextMetrics.ideographicBaselineRead only-
Trả về khoảng cách từ đường ngang được chỉ định bởi thuộc tính
CanvasRenderingContext2D.textBaselineđến đường cơ sở tượng hình (ideographic baseline) của hộp dòng, tính bằng pixel CSS.
Ví dụ
>Minh họa các đường cơ sở
Ví dụ này minh họa các đường cơ sở mà đối tượng TextMetrics lưu giữ. Đường cơ sở mặc định là alphabeticBaseline. Xem thêm thuộc tính 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();
});
Kết quả
Đo chiều rộng văn bản
Khi đo theo chiều x của một đoạn văn bản, tổng của actualBoundingBoxLeft và actualBoundingBoxRight có thể rộng hơn chiều rộng của hộp nội tuyến (width), do các font chữ nghiêng/in nghiêng mà ký tự vượt ra ngoài chiều rộng tiến.
Do đó, sử dụng tổng của actualBoundingBoxLeft và actualBoundingBoxRight là cách chính xác hơn để lấy chiều rộng văn bản tuyệt đối:
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
Thông số kỹ thuật
| Specification |
|---|
| HTML> # textmetrics> |
Tương thích trình duyệt
Xem thêm
- Phương thức tạo trong
CanvasRenderingContext2D - Phần tử
<canvas>và giao diện liên quanHTMLCanvasElement