等宽字体中字符的字体大小和宽度之间有什么依赖关系?在我的网络应用程序中,我使用“courier new”字体。我想知道,以像素为单位的字符串的实际长度是多少?如果我知道 css font-size 属性,它如何帮助我知道字符串的真正长度?谢谢
3 回答
每个等宽字体在像素长度和字体大小之间都有自己的比率。但是,由于我们理想情况下会将字体系列表示为几个选项,以便为浏览器提供广泛的范围来满足样式(以防它没有所需的字体),即使您确实找到了比例,这种方法也可能存在缺陷。还有谁说“Courier New”在一台设备上与另一台设备上具有相同的间距/尺寸/...?
一种确定的方法是使用 JavaScript,克隆元素并动态检查大小值。
看看这个小提琴的例子
http://jsfiddle.net/zUFwx/(代码参考jQuery)
function getSizeOfTextInElement(domElement) {
var $element = $(domElement),
$clone = $element.clone(),
size = {
width : 0,
height : 0
};
$clone.addClass("sizingClone");
$(document.documentElement).append($clone);
size.width = $clone.width();
size.height = $clone.height();
$clone.remove();
return size;
}
var elementToCheck = document.getElementById("checkSizeExample"),
sizeOfElement = getSizeOfTextInElement(elementToCheck),
message = "element has a width of " + sizeOfElement.width + "px";
$("#result").text(message);
字体大小和等宽字体中字符(字形)宽度之间的依赖关系由字体设计者定义。
例如,在 Windows 7 上,Courier New 字体中字形的前进宽度为 1229 个单位。由于字体的高度为 2048 个单位,因此提前宽度非常非常接近字体大小的 60%,因此在 CSS 中,0.6em
对于所有实际用途而言,字形宽度的数量是足够的。
在 Lucida Console 中,前进宽度几乎相同:1234 个单位。但另一方面,在 Consolas 中,它要小得多,只有 1126 个单位。
因此,结论取决于上下文,特别是关于您的应用程序是否仅在特定字体可用的情况下运行(并且您的设置不会被用户覆盖)的问题。
如果我做的事情完全错误,请原谅我,因为我已经在 SO 上工作了一段时间,但这是我第一次做出贡献。
这是困扰我的事情,@Stephen James 确实为我想要实现的目标做好了准备。
我在让它工作时遇到了一些问题,发现你小提琴中的 CSS 不正确
CSS:
#checkSizeExample
{
font-family : Courier;
font-size : 8pt;
}
.sizingClone { // this was originally an id tag not a class tag
position : absolute !important;
/* top : 100% !important;
left : 100% !important; // not sure why but this line was causing the div to
// expand to 100%.
visibility: hidden !important;
width : auto;
height : auto; */
}
我注释掉了除 sizingClone 类中的位置之外的所有内容,因为我发现它没有必要。
这现在完美无缺