在DOM元素(position: absolut/fixed; display: block;
)附加到文档之前,我为它获取文本的文本,如下所示:
function getTextMetrics(txt, font) {
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
context.font = font;
const tm = context.measureText(txt);
return tm;
}
字符串
看着tm
,我不明白我是如何得到渲染的高度/宽度的。似乎缺少了一些东西。什么?
是的,返回的TextMetric中有一些字段几乎适合,但它们不等于稍后呈现的元素的.clientWidth/Height。
没有必要为此创建一个“工作示例”。它太简单了。这里有一些数字(来自Google Chrome,@ggorlen提到的值不存在):
.clientWidth: 82
.clientHeight: 20
tm:
width : 73.2734375
fontBoundingBoxAscent : 16
fontBoundingBoxDescent : 3
型
1条答案
按热度按时间4si2a6ki1#
这是我过去用过的东西:
字符串
.要明确的是,这些值是针对特定画布中的文本的,这些值与画布之外的其他元素没有直接关系。
从文档中:
https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics
TextData接口表示画布中一段文本的尺寸;可以使用CanvasRenderingContext2D.measureText()方法检索TextData示例。
试试下面的代码,看看它是否能让你更接近你的目标。
在这段代码中,我用从measureText得到的值绘制了一些文本和一个矩形,正如您所看到的,这些值正确匹配