移動端中,分爲兩個視口:css
移動設備的viewport默認是layout viewport
能夠這兩理解,有一個圖片(layout viewport),寬度是:1090 1090,有一個畫框(visual viewport),寬度是:320 460,用戶經過畫框來看畫。當layout viewport與visual viewport徹底一致時,用戶經過畫框看到的就是整個畫。若是layout viewport較大,用戶須要經過移動畫框來查看畫面內容。html
viewport是meta中的一個值,經過設置viewport,能夠控制瀏覽器如何規範的渲染Web頁面
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
要把當前的viewport寬度設爲ideal viewport的寬度,既能夠設置 width=device-width,也能夠設置 initial-scale=1,若是initial-scale和viewport有衝突,瀏覽器會取比較大的值。web
viewport值:編程
name | value | Description |
---|---|---|
width |
正整數或device-width | 定義視口(layout viewport)的寬度,單位爲像素, |
height |
正整數或device-height | 定義視口的高度,單位爲像素 |
initial-scale |
[0.0-10.0] | 定義初始縮放值 |
minimum-scale |
[0.0-10.0] | 定義縮小最小比例,它必須小於或等於maximum-scale設置 |
maximum-scale |
[0.0-10.0] | 定義放大最大比例,它必須大於或等於minimum-scale設置 |
user-scalable |
yes/no | 容許用戶手動縮放頁面,默認是yes |
以上所說的寬度,實際上是分辨率瀏覽器
屏幕上的像素。是物理像素。 設備像素可能不相同bash
物理像素不會改變,單位是pt。less
1pt = 1/72(inch),inch及英寸,而1英寸等於2.54釐米 iphone
舉個🌰 : iphone5的像素:640*1136px, 表示:屏幕由640行,1136列像素組成。ide
CSS像素是Web編程的概念,指的是CSS樣式代碼中使用的像素。佈局
舉個🌰 :iphone5的像素:320px。
設置:zoom 100%的狀況下,1個CSS像素纔會等於1個設備像素
DPR = 設備像素/CSS像素。
理解:1px由多少個設備像素組成;
如何獲取:
在移動端瀏覽器中以及某些桌面瀏覽器中,window對象有一個devicePixelRatio屬性(有兼容問題),它的官方的定義爲:設備物理像素和設備獨立像素的比例,也就是 devicePixelRatio = 物理像素 / 獨立像素。
CSS像素就能夠看作是設備的獨立像素,因此經過devicePixelRatio,咱們能夠知道該設備上一個css像素表明多少個物理像素。
CSS像素 =設備獨立像素 = 邏輯像素
一英寸中,像素個數
計算:
var 斜邊尺寸 = V(1920^2+1080^2) V表明開根號 var ppi = 斜邊尺寸/5.5 ppi = 401ppi
定義:
ps: px是一個相對單位,相對設備像素的。(css的像素是根據設備的分辨率計算出來的)。如何感覺這個相對值呢?當咱們縮放網頁大小的時候,並無改變css像素,可是頁面中內容變大了,這是由於css像素是相對的,其餘因素的改變,影響了css像素的大小。
計算:
爲了讓相同的1px在不一樣的設備上,視覺上看起來差很少,css像素是根據設備像素大小換算出來的。css中,根據參考像素進行換算
計算:使用em單位的元素的字體大小乘以em值,父元素大小會影響em,是由於繼承的緣由,若是出現層級em嵌套,會影響比較大。
計算:取決於頁面根元素大小,根據根元素字體大小乘以rem值。
retina視網屏幕:Retina顯示器指的是在人體正常使用距離下,沒法看到屏幕的像素。
設計師的px指的是物理像素,咱們設置的是css像素,物理像素和css像素不是徹底一致的。
小數
.border { border: 1px solid #999 } @media screen and (-webkit-min-device-pixel-ratio: 2) { .border { border: 0.5px solid #999 } } @media screen and (-webkit-min-device-pixel-ratio: 3) { .border { border: 0.333333px solid #999 } }
問題:兼容性不是很好
tranform加僞類標籤
<span class="border-1px">1像素邊框問題</span> // less .border-1px{ position: relative; &::before{ content: ""; position: absolute; left: 0; top: 0; width: 200%; border:1px solid red; color: red; height: 200%; -webkit-transform-origin: left top; transform-origin: left top; -webkit-transform: scale(0.5); transform: scale(0.5); pointer-events: none; /* 防止點擊觸發 */ box-sizing: border-box; @media screen and (min-device-pixel-ratio:3),(-webkit-min-device-pixel-ratio:3){ width: 300%; height: 300%; -webkit-transform: scale(0.33); transform: scale(0.33); } } }
優勢: 其實不止是圓角, 其餘的邊框也能夠這樣作出來
缺點: 代碼量也很大, 佔據了僞元素, 容易引發衝突
陰影
.border-1px{ box-shadow: 0px 0px 1px 0px red inset; }