如何使用JavaScript或JQuery获取默认字体大小(以像素为单位)?

Art*_*ald 11 javascript css jquery fonts font-size

如您所知,em是一种相对字体测量,其中一个em等于默认字体大小中字母"M"的高度.使用它的一个优点是因为您可以调整文本大小.

但是如何使用JavaScript或JQuery获取当前环境的默认字体大小(以像素为单位)?

问候,

ken*_*bec 19

有几种情况可以使用 -

function getDefaultFontSize(pa){
 pa= pa || document.body;
 var who= document.createElement('div');

 who.style.cssText='display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em';

 who.appendChild(document.createTextNode('M'));
 pa.appendChild(who);
 var fs= [who.offsetWidth, who.offsetHeight];
 pa.removeChild(who);
 return fs;
}
Run Code Online (Sandbox Code Playgroud)

警报(getDefaultFontSize())


Mar*_*lis 6

我相信M原则是一个神话。至少来自http://www.w3.org/TR/CSS21/syndata.html的以下文档证明,基于M原理的计算过于复杂和不必要。

'em'单位等于使用它的元素的'font-size'属性的计算值。例外是'em'出现在'font-size'属性本身的值中,在这种情况下,它是指父元素的字体大小。它可以用于垂直或水平测量。(此单位有时在印刷文本中也称为四角宽度。)

根据本文档,以下内容是正确的。

  1. 没有祖先放大,1em等于像素字体大小。

  2. 由于祖先用ems和percent进行的放大以明确定义的方式工作,因此,一个简单的循环将计算确切的字体大小,假定:没有CSS;没有CSS。某些祖先以绝对单位设置了字体大小。

  3. 由于ems可以测量宽度,因此您始终可以通过创建一个长度为1000 ems的div并将其client-Width属性除以1000来计算确切的像素字体大小。我似乎记得ems被截断为最接近的千分之一,因此您需要1000 ems避免错误截断像素结果。

  4. 您可能会在M原理失败的地方创建字体,因为em是基于font-size属性而不是实际字体。假设您有一个怪异的字体,其中M是其他字符的1/3,并且字体大小为10像素。我认为字体大小是最大字符高度的保证,因此M不会是10像素,而所有其他字符都是30像素。


Ali*_*ich 6

可以使用这行代码来完成:

const fontSize = Number(window.getComputedStyle(document.body).getPropertyValue('font-size').match(/\d+/)[0])
Run Code Online (Sandbox Code Playgroud)
  1. window.getComputedStyle(document.body) - 获取身体的所有样式
  2. getPropertyValue('font-size')- 获取字体大小的字符串值,例如:(16px)
  3. match(/\d+/)[0])- 仅获取数字部分,例如:(16) - 字符串
  4. Number(...)- 将数字部分转换为数字,例如:(16) - 数字


小智 5

如果您使用rem默认的“font-size”作为单位,则需要从<html>,而不是从 body 或其他中获取。

alert(window.getComputedStyle(document.documentElement).getPropertyValue('font-size'))
Run Code Online (Sandbox Code Playgroud)