- px px像素是相对于显示器屏幕分辨率而言的。在浏览器缩放页面时无法调整那些使用它作为单位的字体、按钮等的大小。
- em 的值并不是固定的,会继承父级元素的字体大小,代表倍数。如果当前其父级未设置字体大小,则相对于浏览器的默认字体尺寸。
- rem 的值并不是固定的,始终是基于根元素 <html> 的,也代表倍数。
🔺 em介绍
em 的使用是相对于其父级的字体大小的,即倍数。浏览器的默认字体大小都是16px,未经调整的浏览器显示 1em = 16px。但是有一个问题,如果设置 1.2em 则变成 19.2px,问题是 px 表示大小时数值会忽略掉小数位的(你想像不出来半个像素吧)。而且 1em = 16px 的关系不好转换,因此,常常人为地使 1em = 10px。这里要借助字体的 % 来作为桥梁。
因为默认时字体 16px = 100%,则有 10px = 62.5%。所以首先在 body 中全局声明 font-size=62.5%=10px,也就是定义了网页 body 默认字体大小为 10px,由于 em 有继承父级元素字体大小的特性,如果某元素的父级没有设定字体大小,那么它就继续了 body 默认字体大小 1em = 10px。
但是由于 em 是相对于其父级字体的倍数的,当出现有多重嵌套内容时,使用 em 分别给它们设置字体的大小往往要重新计算。比如说你在父级中声明了字体大小为 1.2em,那么在声明子元素的字体大小时设置 1em 才能和父级元素内容字体大小一致,而不是1.2em(避免 1.2*1.2=1.44em), 因为此 em 非彼 em。再举个例子:
- <span>Outer <span>inner</span> outer</span>
- body { font-size: 62.5%; }
- span { font-size: 1.6em; }
结果:外层 <span> 为 body 字体 10px 的 1.6倍 = 16px,内层 <span> 为外层内容字体 16px 的 1.6倍 = 25px(或26px,不同浏览器取舍小数不同)。
明显地,内部 <span> 内的文字受到了父级 <span> 的影响。基于这点,在实际使用中给我们的计算带来了很大的不便。
🔺 rem介绍
rem 的出现再也不用担心还要根据父级元素的 font-size 计算 em 值了,因为它始终是基于根元素(<html>)的
比如默认的 html font-size=16px,那么想设置 12px 的文字就是:12÷16=0.75(rem)
仍然是上面的例子,CSS改为:
- html { font-size: 62.5%; }
- span { font-size: 16px; font-size: 1.6rem; }
结果:内外 <span> 的内容均为 16px。
需要注意的是,为了兼容不支持 rem 的浏览器,我们需要在各个使用了 rem 地方前面写上对应的 px 值,这样不支持的浏览器可以优雅降级。
选择使用什么字体单位主要由你的项目来决定,如果你的用户群都使用最新版的浏览器,那推荐使用 rem,如果要考虑兼容性,那就使用 px,或者两者同时使用。
内容来源于网络
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:http://dcoet.com/wordpress/1524.html
姬长信
Typecho转Wordpress成功
ps:友链已改为内页
https://blog.isoyu.com/links.html