翻译自CSS Viewport Units: A Quick Start。此文章简单介绍了视口单位及其应用,用于提高你们css知识的广度css
CSS中有四个基于视口单位,分别为vh
、vw
、vmin
和vmax
。html
1vh
等于视口高度的1%;1vw
等于视口宽度的1%;1vmin
等于视口高度1%。一样,若是宽度小于高度,1vmin
表明视口宽度1%。1vmax
等于视口高度1%。一样,若是宽度大于高度,1vmax
表明视口宽度1%。在不一样情形下,这些单位的值表明什么浏览器
10vw
值为120px,10vh
为100px。由于宽度大于高度,10vmax
等于120px,10vmin
等于100px。10vw
值为100px,10vh
为120px。10vmax
仍等于120px,由于高度仍大于宽度,10vmin
等于100px。10vw
值为100px,10vh
为80px。由于宽度大于高度,10vmax
等于100px,10vmin
等于80px。在这一点上,视口单位也许小于百分数。然而,他们是不一样的,就百分数而言,子元素宽度和高度取决于其父元素。函数
如上面例子,第一个子元素被设为父元素宽度的80%。第二个子元素为宽度的80vw,而其宽于父元素oop
由于这些单位基于视口尺寸,因此在相对于视口设置元素的宽度和高度时,使用它们很是方便。网站
设置元素的背景图片充满屏幕这种方式很常见。一样,你也许想设计一个网站,其产品或服务的部分覆盖整个屏幕。这样状况下,你能够设置响应元素宽度为100%
,高为100vh
。ui
举个例子,url
<div class="fullscreen a">
<p>a<p>
</div>复制代码
你能够使用如下CSS来实现背景图片部分:spa
.fullscreen {
width: 100%;
height: 100vh;
padding: 40vh;
}
.a {
background: url('path/to/image.jpg') center/cover;
}复制代码
你也许听过或使用过FitText插件。能够使用此插件缩放标题,他们会占据父元素的宽度。正如上文提过,视口单位的值会基于视口尺寸改变。这就意味着若是你使用视口单位设置标题的font-size
,会很完美适应屏幕。不管视口宽度何时改变,浏览器会恰当地缩放标题。所要作就是计算出就视口单位而言font-size
初始值。插件
设置font-size
主要问题是文本大小会基于视口改变。例如,font-size
值为8vw
,则屏幕宽度1200px
时,font-size
为96px
;宽度为400px
,值为33px
;宽度为1920px
时,值为154px
。这就会让文本太大或过小而没法阅读。能够阅读《基于排版的视口单位》这篇文章,结合calc()
函数,设置刚好的文本大小
当想把元素放在屏幕中央时,能够使用视口单位。在知道元素高度状况下,设置margin
头部和底部属性等于[(100-height)/2]vh
.centered {
width: 60vw;
height: 70vh;
margin: 15vh auto;
}复制代码
使用视口单位时,须要注意一些事情。
注意当使用视口单位设置元素宽度时,由于当根本元素的overflow
属性设为auto
时,浏览器会假设滚动条不存在,会形成元素宽度大于你所期待的。
举个例子
div {
height: 50vh;
width: 50vw;
float: left;
}复制代码
正常状况下,你期待每一个div
元素占据屏幕的四分之一,而后每一个元素宽度是基于没有滚动条下计算的。因此其宽度会大于。
解决办法是设置宽度为50%。结论是当设置块级元素宽度应使用百分数。
一样问题也会发生在移动端,由于地址栏出现与否取决于用户是否在滚动。会致使视口高度改变,用户在看内容时会吓一跳。
在caniuse数据显示,主要的浏览器都支持这些单位。然而,仍有一些bug和问题须要注意。例如,IE9支持vm
而不是vmin
,IE10+/Edge不支持vmax
单位,一样当使用视口单位,Chrome不会打印元素