每个浏览器的默认字体大小都是16像素吗?为什么?

42

CSS3 定义了一个新的长度单位 rem 用于 font-size,它允许我们计算元素的 font-size 相对于根元素(html 元素)。

为了更轻松地计算 font-size,我们通常假设根元素的 font-size16px,因此 CSS 通常写成这样:

html { font-size:62.5%; } // 10px = 16px * 0.625

因此,使用rem设置的元素高度相对于10px,例如

p{ font-size : 1.4rem ;} // 14px = 10px * 1.4 
我找不到为什么我们假定可以用 16px 乘以其他值的原因。我们如何确保每个浏览器都有相同的 16px 基准值?是否有关于预定义 16px 的标准说明? 参考资料:

可能是传统。font-size的初始值用于计算html的默认字体大小以及在媒体查询中计算remem,其值为“medium”。16px来自浏览器中用户的偏好设置。请参见https://dev59.com/omkv5IYBdhLWcg3wnCHH#10470734。 - BoltClock
谢谢您的询问,monjer,还有感谢@Stewartside的回答--我已经试图解决这个问题2个小时了。 - Wellspring
2个回答

40
基本的字体大小由用户在浏览器中预定义的偏好决定。在几乎所有的浏览器中,16像素是比例字体的标准。这也可以根据字体是否使用衬线或固定宽度字体而改变。请记住,em相对于其所用的元素或相对于继承父级的字体大小,并与之成比例。但是rem使用根HTML元素。例如:

html {
  font-size: 16px;
}
h1 {
  font-size: 2em; // 32px
}
p {
  font-size: 1em; // 16px
}
.someClass {
  font-size: .75em; // 12px
}
.someClass p {
  font-size: 2em; // 24px
}
.someClass p .test {
  font-size: 1.25rem; // 20px
}
<html>
<h1>2em Title Text</h1>
<p>Normal Element Text</p>
<div class="someClass">
  someClass font size
  <p>SomeClass with em</p>
  <p><span class="test">someClass p element with class test</span>
  </p>
</div>

</html>


4
出于好奇,如果不允许用户设置更大的字体大小偏好,是否保持设计跨浏览器/设备一致性仍然有意义?例如,年纪较大的人倾向于增加字体大小以帮助阅读。如果在body或html中设置绝对值,则用户偏好将被忽略。这是否比保持设计更为重要? - Chayemor
2
@Chayemor 现在这完全取决于您希望网站的外观如何。如果你想要跨所有操作系统和浏览器根据设计实现像素完美,那么需要进行设置。如果您可以接受其移动等,那么在CSS中不设置它也可以。根据我的经验,只有非常少量的用户实际上更改其字体大小,他们通常具有良好的技术知识,因为它隐藏在浏览器设置中,并且知道如何避开它。 - Stewartside
1
我也有同样的想法,但是想听听其他人的意见。最终,我会根据每个网站的情况进行判断。如果设计允许一点移动,那么就百分之百支持。如果需要像素完美,那么就使用像素的绝对值。谢谢。 - Chayemor
13
如果用户为了辅助阅读而更改默认字体大小,你可能希望避免在根元素中设置px值作为字体大小,因为这将阻止你的网站缩放。 - Wout De Rooms
1
@WoutDeRooms 我也同意,因为我刚遇到了同样的问题。 - James Wright
显示剩余4条评论

-1

我是否遗漏了什么。这是我找到的:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    body {
      font-family: Arial, Helvetica, sans-serif;
    }
    
    .fs-1 {
      font-size: 20px;
    }
    
    .fs-2 {
      font-size: 15pt;
    }
    
    .fs-3 {
      font-size: 1rem;
    }
    
    .fs-4 {
      font-size: 1em;
    }
  </style>
</head>

<body>
  <div>
    This is font-size default
  </div>
  <div class="fs-1">
    This is font size 1 - 20px
  </div>
  <div class="fs-2">
    This is font size 2 - 15pt
  </div>
  <div class="fs-3">
    This is font size 3 - 1rem
  </div>
  <div class="fs-4">
    This is font size 4 - 1em
  </div>
</body>

</html>

我用 Chrome 加载,每行看起来都一样,所以 16px 是默认字体大小还是 20px?1rem = 20px = 15pt???


1
它们在我的电脑上正常显示,我也使用Chrome浏览器。第一行=16px。第二行=20px。第三行=15pt(1pt等于1/72英寸)。第四行=1rem(16px),因为它相对于根元素,即16px。第五行=1em(16px),因为它相对于其父元素(即根元素)仍然是16px。 - nnamerz
-1 表示将问题发布为答案。正如 @nnamerz 已经说过的,如果您没有更改浏览器的默认字体大小,则使用 1rem = 16px 可以正确呈现。 - Wes Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接