人生不是一种享乐,而是一桩十分沉重的工作。 ——<列夫·托尔斯泰>
作者: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 在线转换器
查看其它相关
参考
关注【公众号】,了解更多。
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!