980px
,因此PC上的網頁基本上能在手機上呈現,只不過看上去很小,通常默承認以經過手動縮放網頁。獲取當前佈局視口用document.documentElement.clientWidth
window.innerWidth
以下的viewport元標籤的屬性
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
css
如下是每一個屬性的介紹:html
屬性名 | 取值 | 描述 |
---|---|---|
width | 正整數或device-width | 定義layout viewport的值 |
height | 正整數或device-height |
定義viewport height ,單位爲像素,通常不用 |
initial-scale | [0,0 - 10.0] | 定義初始縮放值。好比:設置initial-width=1.5 就是將visual viewport 設置成ideal viewport 寬度的1 /1.5倍 。 |
maximum-scale | [0.0 - 10.0 ] | 用戶可以放大的最大比例 |
minimum-scale | [0,0 - 10.0] | 用戶能縮小的最小比例,通常不設置,由於過小的字不方便閱讀 |
user-scalable | yes/no | 定義是否容許用戶手動縮放頁面,默認值爲yes |
width
的詳細介紹:設置爲device-width
時表示layout viewport
的寬度等於ideal viewport
的值。同時設置width
與intital-scale
時,最終的視口寬度等於二者較大的那一個。也就是說:前端
layout viewport
小於visual viewport
時,視口寬度最終是visual viewport
的值(經測試,layout viewport
的值也會自動變成visual viewport
)layout viewport
大於visual viewport
時,視口寬度最終是layout viewport
的值(經測試,visual viewport
的值不會變成這時layout viewport
的值)initial-scale
的詳細介紹:縮放比例 = ideal layout
/ visual layout
。ideal viewport
是不會改變的,這個值是爲了改變visual viewport
。縮放比例也有默認值,沒有設置initial-scale
時,瀏覽器會取適當的縮放比例使佈局視口
正好鋪滿屏幕即有 可視視口(visual viewport)尺寸=理想視口尺寸(ideal viewport)。也就是說設置width=device-width
與設置initial-scale=1.0
效果相同。瀏覽器
layout viewport
定義爲設計稿的寬度,這樣的好處在於css像素對應設計稿的px(以640px爲例),不須要進行單位換算。可是有幾點須要注意的地方。
visual viewport
設置成與layout viewport
同樣大,即設置initial-scale
的值爲 ideal viewport / 640
。以前也有一個屬性代替了這個操做,target-densitydpi=device-dpi
,但資料顯示target-densitydpi=device-dpi
是一個被拋棄的屬性,不推薦使用理想視口
做爲可視視口
的尺寸,只須要把縮放比定爲1。<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, minimum-scale=1, user-scalable=no">
計算 html 元素的 font-sizeiphone
750px 是設計稿的寬度(以iphone6的物理像素數爲標準),100是指望的換算比例,即設計稿中 100px 的長度對應css中 1rem,將設計稿中的長度數值除以 100 獲得的就是以 rem 爲單位的 css 長度的數值,設計稿的寬換算爲以 rem 爲單位的 css 長度應爲 (750/100) rem,同時設計稿的寬對應可視視口的寬,即有 (750/100) rem = 可視視口寬,1 rem = 可視視口寬 * (100/750),(100/750)就是咱們要的係數ide
在頁面初始化時設置一下 html 元素的 font-size:佈局
document.documentElement.style.fontSize = window.innerWidth / 7.5 + 'px';
測試
dpr(device pixel ratio)
的反作用,何爲dpr
:物理像素 / 設備獨立的像素(ideal viewport)
。在JS中能夠經過window.devicePixelRatio
獲取當前設備的dpr
。dpr
:在retina屏幕上,物理像素會被放大爲本來的dpr
倍。這時候就會存在如下幾個問題
border: 1px
問題,邊框天然會被放大爲dpr
倍initial-scale=1/dpr
對含有px單位的元素作處理,可是單純這麼作會致使字體元素的大小都會縮小。如何解決這個問題呢?答案就是在第二種方案的根元素設置fontSize
的基礎上再乘以一個dpr
,這樣對於以rem
衡量的元素又能正常適配了。參考閱讀:字體