px | em | rem =>字体单位的进化史
PX
在刚刚接触前端的时候,我们都是使用“px”来设置我们的字体大小,因为它兼容性好而且精确。但是这种方法当用户在浏览器中浏览页面时,他人为的改变了浏览器的字体大小,这时会使用我们的页面布局被打破。因此,这时就提出了使用相对单位“em”来定义Web页面的字体。
em
“em”作为一个相对单位就解决了上述问题。
这种技术需要一个参考点,一般都是以的“font-size”为基准。变默认值“1em=16px”,但是这样对程序员编写CSS时会比较难以口头换算,因此一般会把的“font-size”设为62.5%;这样一来,我们设置字体大小相当于“14px”时,只需要将其值设置为“1.4em”。
body {
font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/
}
不过em的缺点在于其相对大小的对象是其父级,在使用“em”作单位时,一定需要知道其父元素的设置,而且是一个相对于父元素的值,其真正的计算公式是:
1 ÷ 父元素的font-size × 需要转换的像素值 = em值
这样的情况下“1.4em”就不一定是“14px” 了,那么rem也就应运而生了。
Rem
前面说了“em”是相对于其父元素来设置字体大小的,这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小,在我们多次使用时,就会带来无法预知的错误风险。而rem是相对于根元素,这样就意味着,我们只需要在根元素确定一个参考值,,在根元素中设置多大的字体,这完全可以根据您自己的需,大家也可以参考下图:
我们来看一个简单的代码实例:
html {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/}
body {font-size: 1.4rem;/*1.4 × 10px = 14px */}
h1 { font-size: 2.4rem;/*2.4 × 10px = 24px*/}
我在根元素中定义了一个基本字体大小为62.5%(也就是10px。设置这个值主要方便计算,如果没有设置,将是以“16px”为基准 )。从上面的计算结果,我们使用“rem”就像使用“px”一样的方便,而且同时解决了“px”和“em”两者不同之处。
浏览器的兼容性
rem是CSS3新引进来的一个度量单位,大家心里肯定会担心浏览器的支持情况。其实大家不用害怕,只是可怜的IE6-8无法兼容,如果需要保证兼容那么px和rem一起好了。