rem em
我们将从你已经熟悉的东西开始。em
单位被定义为当前字体大小。例如,如果你在body
元素上设置一个字体大小,那么在body
元素内的任何子元素的em
值都等于这个字体大小。
<body> <div class="test">Test</div> </body> body { font-size: 14px; } div { font-size: 1.2em; // calculated at 14px * 1.2, or 16.8px }
在这里,我们说这个div
将有一个1.2em
的font-size
。它是所继承的字体大小的1.2
倍,在这个例子中为14px
。结果为16.8px
.
当你在每个元素内都级联em
定义的字体大小将会发生什么?在下面的代码片段中我们应用和上面一模一样的CSS.每个div
从它们的父节点继承字体大小,带给我们逐渐增加的字体大小。
<body> <div> Test <!-- 14 * 1.2 = 16.8px --> <div> Test <!-- 16.8 * 1.2 = 20.16px --> <div> Test <!-- 20.16 * 1.2 = 24.192px --> </div> </div> </div> </body>
虽然在某些情况下可能需要这个,但是通常你可能想基于一个唯一的度量标准来按比例缩放。在这种情况下,你应该用rem
。rem
中的”r
“代表”root
“;这等同于font-size
基于根元素进行设置;在大多数情况下根元素为html
元素。
html { font-size: 14px; } div { font-size: 1.2rem; }
rem
不是只对定义字体大小有用。比如,你可以使用rem
把整个网格系统或者UI样式库基于HTML根元素的字体大小上,然后在特定的地方使用em
比例缩放
container { width: 70rem; // 70 * 14px = 980px }
vh和vw (ie11 以上都兼容)
响应式网页设计技术很大程度上依赖于比例规则。然而,CSS比例不总是每个问题的最佳解决方案。CSS宽度是相对于最近的包含父元素。如果你想使用显示窗口的宽度或高度而不是父元素的宽度将会怎么样?这正是vh
和vw
单位所提供的。
vh
等于viewport高度的1/100
.例如,如果浏览器的高是900px
,1vh
求得的值为9px
。同理,如果显示窗口宽度为750px
,1vw
求得的值为7.5px
。
这些规则表面上看起来有无尽的用途。例如,做一个占满高度的或者接近占满高度的幻灯片,可以用一个非常简单的方法实现,只要用一行CSS:
.slide { height: 100vh; }
vmin 和 vmax(ie11不兼容)
vh
和vm
总是与视口的高度和宽度有关,与之不同的,vmin
和vmax
是与这次宽度和高度的最大值或最小值有关,取决于哪个更大和更小。例如,如果浏览器设置为1100px
宽、700px
高,1vmin
会是7px
,1vmax
为11px
。然而,如果宽度设置为800px
,高度设置为1080px
,1vmin
将会等于8px
而1vmax
将会是10.8px
。
所以你什么时候可能用到这些值?
设想你需要一个总是在屏幕上可见的元素。使用高度和宽度设置为低于100
的vmin
值将可以实现这个效果。例如,一个正方形的元素总是至少接触屏幕的两条边可能是这样定义的:
box { height: 100vmin; width: 100vmin; }
如果你需要一个总是覆盖可视窗口的正方形(一直接触屏幕的四条边),使用相同的规则只是把单位换成vmax
。
.box { height: 100vmax; width: 100vmax; }
这些规则的组合提供了一个非常灵活的方式,用新的、令人兴奋的方式利用你的可视窗口的大小。
0.1.4. ex和ch (ex 几乎都不支持 ch ie 11 部分不支持,edge 完全支持)
ex
和ch
单位,与em
和rem
相似,依赖于当前字体和字体大小。然而,与em
和rem
不同的是,这两个单位只也依赖于font-family
,因为它们被定为基于特殊字体的法案。