我有一个复杂的js函数,其中包含一个方程式,我实际上需要了解字体大小占用多少像素空间。
我注意到某些字体的大小根据字体而异。
字体大小是如何计算的?如果在css中设置为12px
,那么12px
是什么意思?它是12px
宽?高?还是对角线像素测量?
我有一个复杂的js函数,其中包含一个方程式,我实际上需要了解字体大小占用多少像素空间。
我注意到某些字体的大小根据字体而异。
字体大小是如何计算的?如果在css中设置为12px
,那么12px
是什么意思?它是12px
宽?高?还是对角线像素测量?
字体高度是通过行高来测量或指定的,这是显示所有字符所需的完整高度,包括那些下沉的字符(如 j
)和提升的元素(例如大写字母上的重音符号,如 Ê
)。
(来源: banzaimonkey.net)
依次出现的字体: Times New Roman, Courier New, Calibri, Consolas.
字形的宽度因字体而异,正如上图所示。还有一个重要区别是比例和固定宽度
字体。对于固定宽度字体,每个字符在一行中占用的空间完全相同(尽管字符本身可能并不完全相同)。对于比例字体,每个字符使用的空间与其形状更加一致,相对于其他字符,所以i、j和l非常窄,而w、m和o通常比较宽。
字体本身以不同的方式呈现字形(显然,因为字体看起来不同),这意味着特定字符在不同字体中不一定会呈现相同的高度。这也意味着除了渲染字体之外,没有标准方法可以确定某个特定字符在任何给定大小时可能有多高。
对大多数人来说可能不明显,但如果您查看字体的许可条款,您会注意到它们是作为字体软件许可的。基本上,每种字体都包含一组算法,确定在给定上下文中(各种大小、粗体、斜体等)应如何呈现字体。
因此,在确定字体在特定上下文中呈现的最佳方法是将其呈现并查看。
处理Web上的内容时,字体大小有一些注意事项。
正如任何优秀的Web设计师所知道的那样,没有完全相同的事物。在呈现页面时,可能会存在无数变量,这些变量可能会导致用户之间的差异,例如浏览器,默认字体,缩放,平滑,提示,浏览器缩放,操作系统缩放等。
A List Apart(在他们跳过鲨鱼之前)有一些关于标准化字体大小并帮助您在浏览器之间获得某些相似性的好文章:
虽然您可以尽力而为,但您必须接受Web媒介涉及一定程度的不可控制的变化。
因为像素通常不是字体的自然比例(打印使用不同的度量),所以提示算法可能会在小型字体上将字体呈现出一两个像素的偏差,以保留字符的形状。
实际上,对于小字号来说,提示算法通常完全不同,在专业工作中,您可能会在12pt以下的大小使用完全不同的字体。
像素也与显示器尺寸有关,因此在这些显示器上,12px的物理大小将有所不同:
总之,这很复杂。font-size
指的是显示字符范围所需的高度,但在互联网的实际应用中,总是有例外的情况。
如果您需要知道文本运行在屏幕上所占用的空间大小,您应该使用.getClientRects()
。
设置和实际大小之间的交互有些复杂。CSS3规范比其他答案中引用的CSS2规范更清晰地说明了这一点:
此属性表示字体的字形所需的高度。 对于可缩放字体,字体大小是应用于字体的EM单位的比例因子。
基本上,您可以控制“em方块”的大小。字体形状相对于此定义,但肯定会偏离/在此框内(有时显着)。
而这只是个开始!即使您假设字体与此em-square非常接近-您是否只是将字符串长度乘以此大小?除非它是等宽字体且您的文本仅为ASCII,否则您需要担心很多事情:变化的字符宽度、字距和连字、换行行为,当然还有其他更简单的“字符串长度”警告,例如制表符,Unicode组合字符和控制代码。
根据规范(http://www.w3.org/TR/CSS2/fonts.html),字体大小对应于em方块,这是排版中使用的概念。请注意,某些字形可能会超出其em方块。
font-size
方面,%
和em
在功能上基本相同,除了小数点的位置。%
和em
之间的区别是出现在浏览器实现字体缩放(大多数现代浏览器不再使用此功能)而不是光栅缩放的问题上。请参阅http://www.guistuff.com/css/css_units.html。 - cbednarski