我可以禁用用户字体大小配置吗?

Can I disable the user font size configuration?

本文关键字:配置 字体 用户 我可以      更新时间:2023-09-26

我正在制作一个自适应网站,当用户使用一些奇怪的字体大小配置时(为了视觉问题等),设计以一种可怕的方式中断…显然我不想忘记无障碍…所以:有没有办法知道当用户试图强制字体大小时,禁用它并给他不同的样式?

通常你在页面上的字体大小设置会覆盖浏览器设置,除非你在设置font-size时使用%em,在这种情况下,它们可能相对于浏览器设置中的大小设置(取决于你如何设置大小)。

这意味着,如果你有,说body { font-size: 9px }在你的CSS和视力受损的用户选择了最大的大小在正常的Chrome设置(对应于24px),用户设置被覆盖,并使用难以辨认的大小。这就是为什么浏览器的字体大小设置不经常被用户改变的一个原因:当单独使用时,它们的效果相当有限。

然而,如果用户设置浏览器忽略网页上指定的字体大小(这是可能的,例如在IE中通过可访问性设置),那么无论你做什么,浏览器设置中的字体大小都会被使用。(页面内的字体大小可能仍然会有所不同,例如由于使用small标记或标题元素,因为浏览器默认为某些元素,但页面上的字体大小的任何CSS设置将有效地禁用。)

类似的考虑也适用于最小字体大小设置,这是相当常见的,甚至可能由浏览器的出厂设置设置。它们在正常的CSS级联产生一定的大小后生效——如果该大小小于最小集,则使用最小集。

有一些间接的方法可以尝试找出浏览器实际使用的字体大小,例如通过使用clientHeight属性获取元素的高度。如果对具有line-height: 1的元素这样做,通常会得到实际使用的字体大小。但你不能禁用它;这几乎就是浏览器设置覆盖网页设置的本质,网页无法覆盖它们。

您可以通过读取根html元素的属性来获得getComputedStyle的默认字体大小(除非您有修改其font-size的css规则)。

// get default font size in px
var computedStyle = window.getComputedStyle(document.getElementsByTagName("html")[0], null);
var defaultFontSize = parseFloat(computedStyle.getPropertyValue('font-size'));

对于大多数浏览器,默认值应为16px

要覆盖用户样式表中的值,请将!important添加到指定字体大小的规则中,例如:

body {
    font-size: 16px !important;
}
但是请注意,一般情况下应该避免这种情况。参见这个SO问题:在css中什么时候使用重要属性?