使用字体的实际像素高度将文本与CSS垂直对齐?

时间:2017-08-24 16:08:51

标签: html css canvas fonts

我需要在图像中间垂直居中文本,但我使用的自定义字体有非常大的上升和下降(即字母的部分突出很多),因此垂直对齐不是同样适用于所有可能的角色。

例如,查看字符Xg之间的对齐差异:

enter image description here

我知道这是因为字体的“基线”而不是我的问题所在。

我想知道是否可以使用字体的实际像素值垂直对齐文本字符串,而不是依赖于“边界框”或容器的行高 - 例如,使用绿色边界对齐下面:

enter image description here

enter image description here

因此,使用上面的例子,单个字符Xg将完美地居中显示如下:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

目前没有内置方法可以做到这一点。

函数measureText()返回一个TextMetric对象,specs定义了包含actualBounding*的所有必要值,但遗憾的是,只有width }该规范是included in the browsers

有一个polyfill可能有助于克服这些限制,但我自己从未尝试过,也不能说它是否有好处。

最后一个选项是实际扫描线以找出每个角色的像素位置。它的工作效果取决于你需要渲染多少文本,如果不是太多,性能应该没问题。您基本上必须将每个字符写入屏幕外画布,然后从顶部和底部扫描以找出第一个像素分别出现的位置,并将其用作顶部和底部的实际边界框。