能否检测浏览器字体大小?并且当用户从菜单中更改字体大小时,能否检测到新的字体大小? 非常感谢大家的帮助。 最好的祝福。
是否可以检测浏览器字体大小?
有点可能,但这通常不是一个好主意。假设 <body> 没有设置字体大小且没有干扰规则(如 'body div'):
var measure= document.createElement('div');
measure.style.height= '10em';
document.body.appendChild(measure);
var size= measure.offsetHeight/10;
document.body.removeChild(measure);
此函数可以给出1em的像素大小。
当用户从菜单中更改字体大小时,是否可以检测到新的字体大小?
不能直接检测,但可以定期轮询类似上面的测量器函数。在IE中,您可以将检查挂在CSS表达式()上,因为这些表达式会在字体大小更改时重新计算(在许多其他时间也会重新计算),但这可能不值得(您仍需要轮询其他浏览器,并且expression()已被弃用)。
<html>
元素)具有100%的font-size
时才起作用。如果您知道根元素的字体大小,则可以通过在@bobince的测试末尾放置size = size * whateverMyCssDefinesAsBaseSize / 100
来计算用户的字体大小。 - Paul d'Aoustp {
font-size:2em;
}
这相当于32像素
10像素 = 0.625倍的em
body {
font-size:0.625em;
}
p {
font-size:2em;
}
$(window).resize(resize); // update when user resizes the window.
$("body").append("<p id='textSizeReference' style='display:none;padding:0'>T</p>");
var refTextHeight = $("#textSizeReference").height();
setInterval(function() {
var h = $("#textSizeReference").height();
if (h != refTextHeight) {
refTextHeight = h;
resize(); // update when user changes text size
}
}, 500);
这里有一个我发现在IE中检测文档当前字体族很有效的方法:
document.documentElement.currentStyle["fontFamily"]
在Firefox/Opera中:
有一个名为getComputedStyle
的方法,它应该返回给定元素的CSS样式,但我还没有找到一种方法使其返回整个文档。
getComputedStyle(document.documentElement)
来获取整个文档的样式。执行 getComputedStyle(document)
是行不通的,因为样式属性是 HTMLElement 接口的一部分。而且,文档并没有从 HTMLElement 接口继承属性:它只是一个节点,而不是空间元素。因此,文档节点本身没有样式,所以你不能在其上执行 getComputedStyle
。 - Jack G# yarn
yarn add browser-font-size-observer
# npm
npm install browser-font-size-observer
import BrowserFontSizeObserver from "browser-font-size-observer";
const observer = new BrowserFontSizeObserver((state) => {
console.log(state); // { browserFontSize: 24, ratio: 1.5 }
});
console.log(observer.state); // { browserFontSize: 24, ratio: 1.5 }
// To stop observing
observer.disconnect();