如何在 rem 中实现响应式字体大小 - bootstrap

Posted

技术标签:

【中文标题】如何在 rem 中实现响应式字体大小 - bootstrap【英文标题】:How to implement responsive font size in rem - bootstrap 【发布时间】:2016-03-20 23:40:45 【问题描述】:

我在我的项目中使用 bootstrap 3,我看到 bootstrap 中有 2 个 font-size 声明,如下所示:

Scaffolding.less

html  font-size:10px;

body font-size : @font-base-size; 

而@font-base-size 在 variables.less 中定义为 14px

我一直在阅读一些内容,其中一种具有响应式字体大小的方法是将基本字体大小作为在 body 或 html 中定义的 px,然后将 rem 中的字体大小用于 body 中的不同组件,例如p、h1等

但我不确定,我在哪里定义基本字体,应该在 html OR body 中?

为什么bootstrap的html和body字体大小不同?

我的观察: 当我在 html 中以 px 定义某些字体大小时,只有 rem 东西适用于所有内容,将字体大小定义为 body 中的 px 不适用于 rem。

【问题讨论】:

我对这个论点的最大质疑是,在响应断点处调整字体大小和间距时,您可以在 html 元素上设置新的字体大小,并且您在 rem 中设置的每个测量值都会自动调整,而使用 px,您需要为要调整的每个测量值编写新规则。当然,即使使用 rem 也可能需要更多的调整,但是通过巧妙的计划,您可以获得大量的免费比例缩放。将某些框间距测量值与类型、更轻的代码和更少的复杂性/更高的可维护性联系起来,对我来说显然是对 rem 的胜利。 @Jinu - 我也在做同样的事情。对不起,如果有任何混淆。我的意图是在 html 或 body 上使用像素字体大小(不管怎样),并使用 rem 单位定义其余部分。我的疑问是,为什么在正文中定义基本字体大小(以像素为单位)不起作用,而在 html 中定义确实有效。为什么 bootstrap 在 html 和 body 中有不同的字体大小? 【参考方案1】:

rem 单元相对于根或html 元素。 因此,应该在 html 元素上定义基本字体大小。

body 上定义font-size 将起作用,但所有使用rem 单元定义font-size 的子元素将退回到根/html 元素以计算其绝对大小。

所以:

html 
  font-size: 10px;


body 
  font-size: 15px;


.parent 
  /* font-size will be 15px here */


.parent .child 
  font-size: 1.2rem; /* resolved to 12px */

至于为什么 Bootstrap 使用 2 种字体大小:html 元素上的 10px 字体大小只是他们使用的一些全局重置的一部分。此外,一些边距/填充是使用基本字体大小计算的,因此最好不要过多干扰。

【讨论】:

谢谢,这就是我要找的信息。所以这意味着,我可以安全地在 html 上设置字体大小,然后在整个过程中使用 rem,当用于其他大小的屏幕时,我会在媒体查询中更改 html 字体大小。【参考方案2】:

如果你没有在页面的任何地方设置字体大小,那么它是浏览器默认的,可能是16px.所以,默认1rem = 16px2rem = 32px。如果你在body元素上设置了20px的字体大小,那么1rem = 20px2rem = 40px.

此外,emrem 不是绝对单位——它是相对于当前选择的字体大小的单位。除非您通过使用绝对单位(例如pxpt)设置字体大小来覆盖字体样式,否则这将受到用户浏览器或操作系统中字体选择的影响(如果他们已经制作了字体),所以它使用 em 作为一般长度单位是没有意义的,除非您特别希望它随着字体大小的缩放而缩放。

注意:评论太长了。对不起

【讨论】:

"如果你在 body 元素上设置了 20px 的字体大小,那么 1rem = 20px 和 2rem = 40px。"你确定吗,因为我认为 rem 不会以 body 元素字体大小为基础,它会以 html 中的字体大小为基础。而且,em 是相对于该元素上定义的字体大小,而 rem 是相对于 root。 抱歉弄错了。与他们混淆。是的。你说的对。 rem 取决于 html(root)。

以上是关于如何在 rem 中实现响应式字体大小 - bootstrap的主要内容,如果未能解决你的问题,请参考以下文章

响应式字体设置rem,em,px

移动端使用rem同时适应安卓ios手机原理解析,移动端响应式开发

rem--来做响应式开发

rem响应式JS

Vue-cli 3.x 中实现页面等比缩放(postcss-px2rem)

关于rem的计算顺序