谈谈CSS3的长度单位(vh、vw、rem)
- vw、vh、vmin、vmax
- rem与em
vw
、vmin
、vmax
这四个单位都是基于视口的,含义如下:1/100
。1/100
。vmax
是相对于视口的高度和宽度两者之间的最小值
或最大值
。根元素(html)
的字体大小(font-size)来计算的长度单位。html{font-size: 62.5%} /* 10 ÷ 16 × 100% = 62.5% */
body{font-size: 1.4rem;} /* 1.4 × 10px = 14px */
根元素字体大小
小于默认最小字体大小
,那么就会以默认最小字体大小设置根元素。比如:在chrome中,最小字体大小是12px,如果你设置的字体大小小于12px,还是会以12px设置:html{font-size: 62.5%} /* 16px * 62.5% = 10px */
body{font-size: 1.4rem;} /* 1.4rem * 12px = 16.8px */
html{font-size: 20px;}
body{font-size: 0.7rem;} /* 0.7 * 20px = 14px */
rem
,我们还会想到em
,两者都是相对单位,由浏览器转换为像素值,那两者有什么区别?使用哪个更好呢?em
的区别:- rem是相对于根元素(html)的字体大小,而em是相对于其父元素的字体大小
- em最多取到小数点的后三位
<style>
html{ font-size: 20px; }
body{
font-size: 1.4rem; /* 1rem = 28px */
padding: 0.7rem; /* 0.7rem = 14px */
}
div{
padding: 1em; /* 1em = 28px */
}
span{
font-size:1rem; /* 1rem = 20px */
padding: 0.9em; /* 1em = 18px */
}
</style>
<html>
<body>
<div>
<span></span>
</div>
</body>
</html>
20px
,body的字体大小设为1rem
,那么转换为像素就是28px
(20 × 1.4),接着我们又将div的padding设为1em
,由于其基于父元素,所以转换为像素是28px
( 28 × 1),然后我们又将span的字体大小设为1rem
,也就是20px
,由于其自身设置了字体大小,所以padding设为1em
,转换为像素是20px
(20 × 1),而不是乘以其父元素的字体大小28px
(28 × 1)。rem
,因为em
使用不当的话,当出现多层继承时,会很容易混淆,比如:<style>
html{ font-size: 20px; }
body{
font-size: 0.9em; /* 1rem = 18px */
}
div{
font-size: 0.8em; /* 1em = 14.4px */
}
span{
font-size: 0.9em; /* 1rem = 12.96px */
}
</style>
<html>
<body>
<div>
<span></span>
</div>
</body>
</html>
em
时,如果其祖先元素都是用了em
,那么就会像上面一样,body继承其父元素html的字体大小,而div又继承其父元素body的字体大小,而span又继承其父元素div的字体大小,最终span的字体大小最终是12.96px(20 × 0.9 ×0.8 × 0.9)。- 如果这个属性根据它的font-size进行测量,则使用
em
- 其他的一切事物属性均使用rem.
- 多列布局,一般使用百分比%