css像素
在CSS中使用的
px
都是指css像素,好比
width: 128px
。css像素的大小是很容易變化的。
當咱們縮放頁面的時候,元素的css像素數量不會改變,改變的只是每一個css像素的大小。也就是說
width: 128px
的元素在縮放200%之後,寬度依然是128個css像素,只不過
每一個css像素的寬度和高度變爲原來的兩倍。若是本來元素寬度爲128個
設備獨立像素,那麼縮放200%之後元素寬度爲256個設備獨立像素(css像素寬度始終是128)
在縮放比例爲100%的狀況下,一個css像素大小等於一個設備獨立像素。
爲了描述不一樣型號的手機物理像素和獨立像素之間的關係,引入了一個新的概念:設備像素比 devicePixelRatio。在 js 中經過 window.devicePixelRatio
查看。web
devicePixelRatio = 物理像素 / 獨立像素
iphone3: devicePixelRatio = 320 / 320 = 1
iphone4: devicePixelRatio = 640 / 320 = 2
iphone6Plus: devicePixelRatio = 1242 / 414 = 3
在 media 查詢中,resolution 就表明着 devicePixelRatio。瀏覽器
@media (min-resolution: 2dppx) { body { color: red; } }
上面的代碼表示,在 devicePixelRatio >= 2 的設備上,字體顏色爲紅色。app
當設備像素比爲1:1時,使用1(1×1)個設備像素顯示1個CSS像素;iphone
當設備像素比爲2:1時,使用4(2×2)個設備像素顯示1個CSS像素;字體
當設備像素比爲3:1時,使用9(3×3)個設備像素顯示1個CSS像素。網站
viewport
通俗的講,移動設備上的viewport就是設備的屏幕上能用來顯示咱們的網頁的那一塊區域,在具體一點,就是瀏覽器上(也多是一個app中的webview)用來顯示網頁的那部分區域,但viewport又不侷限於瀏覽器可視區域的大小,它可能比瀏覽器的可視區域要大,也可能比瀏覽器的可視區域要小。在默認狀況下,通常來說,移動設備上的viewport都是要大於瀏覽器可視區域的,這是由於考慮到移動設備的分辨率相對於桌面電腦來講都比較小,因此爲了能在移動設備上正常顯示那些傳統的爲桌面瀏覽器設計的網站,移動設備上的瀏覽器都會把本身默認的viewport設爲980px或1024px(ios設備爲980px,此處的px都爲設備獨立像素)ui
通常來講PC端端viewport跟瀏覽器的大小是一致的,移動端的viewport 寬度大多都是980px,可見移動端的viewport比真實的移動端屏幕大多
用innerWidth/innerHeight
能夠查看頁面的viewport
在Chrome瀏覽器上設置一個模擬器,寬度(設備獨立像素)360px,這時候在控制檯分別打印出innerWidth
和outerWidth
,截圖以下:
怎麼讓咱們看到整個頁面呢?瀏覽器渲染完頁面後,會按比例縮小,直到咱們在屏幕上能夠看到整個頁面:
能夠看到,字體變得超級超級小。
那怎麼讓一個設備獨立像素點對應一個CSS像素點呢,咱們不想要讓字變得過小啊!
<meta name="viewport" content="width=device-width, initial-scale=1">
就是用來解決這個問題的。
width=device-width
把viewport寬度設置稱爲設備的設備獨立像素寬度了。這時候一個CSS像素點就對應一個設備獨立像素點了!看一下效果:
這時候控制檯打印
innerWidth
和
outerWidth
,會發現,他們已經同樣大了:
再說一下initial-scale=1
,這個表達式表示頁面的原始縮放比例爲1。若是爲2,那麼頁面中元素會放大一倍。可是viewport大小不變。
樣例
設備爲iphone6
肯定的設備下,設備獨立像素和物理像素都不會變化,縮放的狀況下,變化的是css像素
下例中,不縮放的狀況下,375px(css像素)能夠填滿設備的寬度,縮放倍數爲375/980(375是iphone6的設備獨立像素寬度,980爲viewport的設備獨立像素寬度),假設此時要填滿設備寬度須要的css像素爲x,則 x*(375/980)=375,x=375/(375/980)=980
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<img src="./img/bdyd.jpg" width="980px">
</body>
<script>
</script>
</html>
若是設置了
<meta name="viewport" content="width=device-width">
則頁面沒有縮放,此時css像素等於設備獨立像素,填滿寬度須要的css像素爲375
再繼續設置圖片的寬度大於375,圖片顯示的效果不會變化,由於圖片雖然寬,可是仍是會縮放到一屏顯示
通常ui設計作標註的時候以設備像素比爲2的作標註(2倍屏的物理像素),實際在設置css時要把標註的寬高/2(網頁縮放比爲100%狀況下)