人生不是一种享乐,而是一桩十分沉重的工作。 ——<列夫·托尔斯泰>
作者:Ashish Lahoti
译者:cl9000
来源:https://codingnconcepts.com/css/font-size-units-px-em-and-rem/
在本教程中,我们将学习不同的单位来衡量CSS即字体大小px,em和rem,他们之间的分歧,以及何时使用哪一个。
默认字体大小
我们先来了解浏览器的字体大小首先这是区别一个关键的概念px,em和rem。
大多数浏览器都提供了从设置更改字体大小的功能。默认字体大小为16像素,用户可以随时根据自己的喜好进行更改,如下所示:

您可以通过以下方式使用CSS覆盖浏览器的默认字体大小设置:
1 | html { |
或者
1 | html { |
尽管不建议您覆盖浏览器的默认行为,否则它不会满足用户的偏好,这不是一个好主意。
PX
像素
px是CSS中的绝对大小和固定大小的单位。
像素易于翻译。例如,使用下面的CSS,p(段落)元素的font-size将始终保留12px在所有设备和屏幕上,而不考虑更改浏览器的font-size设置或其任何父元素的font-size。
1 | p { font-size: 12px; } |
尽管在设备和屏幕上像素的大小并不总是相同的,但是这意味着width: 120px笔记本电脑上的像素块的实际宽度与iPad上的像素块的实际宽度并不相同。
px有什么问题?
当用户更改浏览器的默认字体大小并说要查看更大的字体大小时,就会出现问题。在这种情况下,p具有以上CSS的元素(段落)仍将显示为font-size: 12px绝对值。没有反映用户偏好,这不被认为是良好的用户体验。
何时使用px?
px对于固定的布局测量和固定的间距(填充,边距等),像素仍然是一个不错的选择,但对于灵活的布局和字体大小的测量来说,像素不是一个好的选择。
替代px?
em和rem是相对于px的相对(或柔性)单位,px是绝对(或固定)单位。em和rem都由浏览器转换为像素(px)值,这取决于浏览器的默认字体大小设置。比如,如果浏览器的默认字体大小是16px
1 | 1em = 16px; |
EM
em单元是相对于它的直接的或最近的父元素。
如果没有显式定义font-size,该元素将从父元素继承它。继承继续以这种方式在祖先之间发生,直到根元素。根元素的默认字体大小由浏览器提供。
何时使用em?
1.嵌套结构
我们可以使用em,你想应用相对于父元素的字体大小,如菜单结构。
1 | <style> |
Output
我们看到,当我们进入嵌套的菜单结构级别时,字体大小正在减小,即使我们对所有嵌套的菜单项应用了相同的CSS类.menu-item。让我们分解浏览器是如何从rem相对值计算像素(px)。
#menu项的font-size: 0.5em是相对于#container的,所以像素的字号应该是100x0.5 = 50px#submenu项的font-size: 0.5em是相对于#menu,所以像素的字体大小是50x0.5 = 25px#subsubmenu项的font-size: 0.5em相对于#submenu,所以字号在像素上应该是25x0.5 = 12.5px#another_subsubmenu项的class和font-size没有定义,所以像素中的字号将与它的父类-#submenu相同,即25px
2. 媒体查询
em 应该用于定义媒体查询中的屏幕宽度。这里有一个有趣的帖子 - https://learnjavascript.today/,解释了为什么它们应该被用于媒体查询。
em有什么问题?
em 的主要问题是,您需要像我们所做的那样,对子元素的字体大小进行所有的数学计算。此外,如果想要对子元素应用特定的字体大小,则不能使用 em。
替代em?
rem 是解决我们问题的方法。它是一个相对的单元,不依赖于父元素。我们来看一下。
REM
rem单位相对于html(根)元素。
如果根html元素的字体大小是16px。
1 | :root { |
然后
1 | 1rem = 16px |
对于所有元素。
如果未在根元素中明确定义字体大小,则 1rem 将等于浏览器提供的默认字体大小(通常为16px)。
何时使用rem?
建议在CSS中使用rem来表示间距(margin, padding等)和字体大小,因为它符合用户的偏好,并提供更好的用户体验。
root为16px时 px到rem
您可以使用下表从转换 px 到 rem, 当root font-size: 16px 时
| px | rem |
|---|---|
| 10px | 0.625rem |
| 11px | 0.6875rem |
| 12px | 0.75rem |
| 13px | 0.8125rem |
| 14px | 0.875rem |
| 15px | 0.9375rem |
| 16px | 1rem |
| 17px | 1.0625rem |
| 18px | 1.125rem |
| 19px | 1.1875rem |
| 20px | 1.25rem |
| 21px | 1.3125rem |
| 22px | 1.375rem |
| 23px | 1.4375rem |
| 24px | 1.5rem |
| 25px | 1.5625rem |
| 26px | 1.625rem |
| 27px | 1.6875rem |
| 28px | 1.75rem |
| 29px | 1.8125rem |
| 30px | 1.875rem |
| 31px | 1.9375rem |
| 32px | 2rem |
| 33px | 2.0625rem |
| 34px | 2.125rem |
| 35px | 2.1875rem |
| 36px | 2.25rem |
| 37px | 2.3125rem |
| 38px | 2.375rem |
| 39px | 2.4375rem |
| 40px | 2.5rem |
| 41px | 2.5625rem |
| 42px | 2.625rem |
| 43px | 2.6875rem |
| 44px | 2.75rem |
| 45px | 2.8125rem |
| 46px | 2.875rem |
| 47px | 2.9375rem |
| 48px | 3rem |
| 49px | 3.0625rem |
| 50px | 3.125rem |
| 51px | 3.1875rem |
| 52px | 3.25rem |
| 53px | 3.3125rem |
| 54px | 3.375rem |
| 55px | 3.4375rem |
| 56px | 3.5rem |
| 57px | 3.5625rem |
| 58px | 3.625rem |
| 59px | 3.6875rem |
| 60px | 3.75rem |
| 61px | 3.8125rem |
| 62px | 3.875rem |
| 63px | 3.9375rem |
| 64px | 4rem |
您也可以使用像素rem转换器 计算
rem
总结
- 使用
px作为固定大小的布局(width, height,等)或固定间距(margin, padding等) - 使用
em用于嵌套元素(tree, menu等)和媒体查询 - 使用
rem来实现灵活的布局、间距和字体大小
Pixel to Rem 在线转换器
查看其它相关
参考
关注【公众号】,了解更多。

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!
支付宝打赏
微信打赏