使用 REM 单位使用 html {font-size: 1px;} 有什么问题吗?

Bla*_*oud 7 css fonts

html {font-size: 62.5%;} 似乎是将基本字体大小设置为 10px 的标准方法。

例如,

html {font-size: 62.5%;}  /* 10px */
body {font-size: 1.5rem;} /* 15px */
Run Code Online (Sandbox Code Playgroud)

但这会产生对浏览器字体大小 16px 的依赖。从长远来看,这似乎不可靠......为什么不......

html {font-size: 1px;}  /* 1px */
body {font-size: 15rem;} /* 15px */
Run Code Online (Sandbox Code Playgroud)

这有技术问题吗?它看起来更干净,更可靠。为什么我没有看到人们这样做?

mys*_*dat 2

曾几何时,只有 IE 和文本缩放。其他浏览器出现并放弃了这个概念,转而支持缩放整个视口。毕竟,如果您很难阅读文本,那么您可能也很难看到图像和其他非文本元素。

当您使用相对字体大小时,在某些时候它们必须转换为屏幕上的基本像素。默认修饰符大体上预计为 16px,您可以将其想象为 1 级以上元素的声明<html>。任何基本修改(例如62.5%在主体上将 1 个相对单位设置为等于 10 像素)都会缩小该值。

考虑到这一点,您实际上要做的就是将事情掌握在自己手中,覆盖上面的浏览器基本字体大小<html>并将其设置为 1px 值,从而导致 1 em/rem 始终等于正文中的 1px。但是,这是有代价的 - 由于您的直接像素值,浏览器不再能够传播它自己的基本字体值,因此用户可能设置的任何字体大小设置都会被您的声明忽略。换句话说,使用 1px 技巧会禁用浏览器的纯字体大小缩放。但与此同时,仅字体大小缩放在其意图上仍然存在根本缺陷(请查看带有缩放字体的 google.com 结果)。

如果您想保留浏览器仅控制字体大小缩放的能力,同时使用 1rem = 1px,您可能需要这个。编辑:我应该注意到,由于最小字体大小设置(默认为 6px),这在 Chrome 中会出现问题。填充和边距会将该值缩小为最小值。

html {
  font-size: 6.25%;
}
body {
  font-size: 16rem;
}
Run Code Online (Sandbox Code Playgroud)