翻譯自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不會打印元素