Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CSS3@font-face。获取导入字体的宽度_Javascript_Css_Font Face - Fatal编程技术网

Javascript CSS3@font-face。获取导入字体的宽度

Javascript CSS3@font-face。获取导入字体的宽度,javascript,css,font-face,Javascript,Css,Font Face,这是我导入TTF字体的方式: @font-face { font-family: bt; src: url('Monospace 821 BT.ttf'); } body { font: normal 21px bt; } 这就是我计算字体字符宽度的方法: window.onload = function() { var k = document.createElement('div'); k.innerHTML = 'M'; k.style.p

这是我导入TTF字体的方式:

@font-face {
    font-family: bt;
    src: url('Monospace 821 BT.ttf');
}
body {
    font: normal 21px bt;
}
这就是我计算字体字符宽度的方法:

window.onload = function() {
    var k = document.createElement('div');
    k.innerHTML = 'M';
    k.style.position = 'absolute';
    document.body.appendChild(k);

    var size = [
        k.offsetWidth,
        k.offsetHeight
    ];

    document.body.removeChild(k);
    alert(size[0]+' '+size[1]);
};
使用这种方法,我能够成功地计算出系统的固定宽度字体的宽度和高度,如“Monospace”、“Monaco”等

但对于导入的字体,每次我将字符“M”更改为其他字符时,得到的结果都会有所不同。此外,是的,我能够用导入的字体在屏幕上书写,因此它确实成功地加载到


如何修复这种行为?

浏览器以不同的方式处理诸如字距调整之类的问题,因此字母之间的间距(即使是单空格字体)也不能保证统一。如果字体具有不同的度量,则尤其如此;字符的外观可能相同,但分配给每个glyph的实际度量可能更宽或更薄。就数字排版而言,你看到的并不总是你得到的


如果您正在使用的应用程序需要根据字体大小设置一些任意尺寸,我建议使用相对的CSS单元,如
ch
,它与字符“0”的宽度有关在元素的当前字体中呈现。

导入的字体确实是固定宽度字体吗?因为这是我对非固定宽度字体的预期行为,我可能会在其他应用程序中打开字体,并检查它是否只是字体的问题。正如我在问题中提到的,我能够在HTML文本编辑控件中使用这种字体进行书写,所以这不是字体的问题。这不是我的意思。字体包含的信息不仅仅是字母的形状。有关于紧排和紧排对等的信息。。并不是每种字体的质量都一样。仅仅因为它声称是单间距字体,并不是每个字母都必须具有相同的宽度。你对“信使”有相同的行为吗?