CSS:区别 p、em、rem

有何区别

  1. px 在缩放页面时无法调整那些使用它作为单位的字体、按钮等的大小;

  2. em 的值并不是固定的,会继承父级元素的字体大小,代表倍数;

  3. rem 的值并不是固定的,始终是基于根元素 的,也代表倍数。

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。再举个例子:

Outer inner outer
body { font-size: 62.5%; }
span { font-size: 1.6em; }
结果:外层 为 body 字体 10px 的 1.6倍 = 16px,内层 为外层内容字体 16px 的 1.6倍 = 25px(或26px,不同浏览器取舍小数不同)。

明显地,内部 内的文字受到了父级 的影响。基于这点,在实际使用中给我们的计算带来了很大的不便。

rem

引述 MDN:

rem values are relative to the root html element, not the parent element.

rem 的出现再也不用担心还要根据父级元素的 font-size 计算 em 值了,因为它始终是基于根元素()的。
比如默认的 html font-size=16px,那么想设置 12px 的文字就是:12÷16=0.75(rem)
仍然是上面的例子,CSS改为:

html { font-size: 62.5%; }
span { font-size: 16px; font-size: 1.6rem; }
结果:内外 的内容均为 16px。

需要注意的是,为了兼容不支持 rem 的浏览器,我们需要在各个使用了 rem 地方前面写上对应的 px 值,这样不支持的浏览器可以优雅降级。兼容性详情。

选择使用什么字体单位主要由你的项目来决定,如果你的用户群都使用最新版的浏览器,那推荐使用 rem,如果要考虑兼容性,那就使用 px,或者两者同时使用。

完。

参考

  1. 淘宝UED:响应式十日谈第一日:使用 rem 设置文字大小

  2. MDN: font-size

关键字:css, 字体, rem, #font-size#

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部