關於移動端畫素的一點探索,PX和ViewPort

2022-05-13 07:59:28 字數 3208 閱讀 2050

不做處理的情況下,乙個375px寬 667px高的矩形(iphone5大小)在不同裝置的顯示。

1、pc端,很大,就像乙個真正的iphone5

這時候css中的px,還挺正常的嘛

2、在iphone5中顯示

小了很多很多,明明都是320x568啊?

iphone5的320x568是它自己的視口大小,和解析度,螢幕尺寸,對應的css的px一點數值上的關係都沒有!

1136x640px  這是手機的物理畫素,就是手機上有多少個畫素點

4英吋  手機螢幕大小

326ppi  畫素密度,就是每英吋有多少畫素點

怎麼也弄不出乙個320x568出來吧

所以說手機的物理畫素是640x1136,而邏輯畫素是320x568

裝置畫素比 dpr 就是  物理/邏輯 = 2

可以看到,的確是2

但是這個2有啥用麼?沒有。

是不是把當前元素寬高x2,就是640x1136了,就是手機大小了?

還不是啊

那這個dpr有啥用啊,也沒什麼卵用

那要和手機一樣大,要怎麼辦?

這就有了視口這個概念

layout-viewport

裝置瀏覽器預設的乙個視口,其實直接看滿螢幕情況下html的寬高即可

或者用

document.documentelement.clientwidth
獲取

可以看到,整個手機滿螢幕是980px x 1739.2px啊。

那些個320px,640px,有啥用啊?

根本沒有用,把元素的寬設為980px就佔滿了

在正常頁面下,這有多大呢?

這也就是為什麼,裝置上截圖,在電腦上顯示很大的原因。

這個layout-viewport,是手機瀏覽器頁面的大小。

頁面先按980px x 1739px來渲染,然後再等比縮放到裝置的320px x 538px。不會出現滑動條

所以元素就會顯得很小很小了。

這個320px x 538px 就是裝置的visual-viewport

這個頁面還沒有縮放,顯示了真實大小,容易理解。

將頁面viewport設定為visual viewport,就是了

這樣,我們就可以根據裝置的邏輯畫素 320px x 568px 來寫了

這樣,pc頁面和iphone5就能很好的適配了。

但是還有乙個問題呢,不同裝置的viewport是不同的,不同裝置之間怎麼適配啊?

所以這些情況,就不要寫px這種單位了。

可以選擇100%和rem這些單位,這樣元素可以適配得比較好。

但是文字呢?

現在一般手機,ideal viewpot差別只有10-20px,文字區別不大

ipad pro這種超高解析度的,設定了viewport之後,乙個css畫素也幾乎可以像pc上面1:1顯示了,所以字也不會小

當然,實際的效果是,多個物理畫素去顯示乙個css畫素

結論

一、設定了

<

meta

name

="viewport"

content

="width=device-width"

>

之後,1乙個css中的px才是裝置螢幕上的1px(320x568)

其實這倆都是邏輯畫素而已。

真正的情況還是用多個物理畫素去表示乙個css畫素了

二、dpr是物理畫素和邏輯畫素(visual視口大小)的比值而已。與元素大小無關

元素顯示得小時因為先按照layout-viewport顯示,再等比縮放到visual-viewport。

只有設定了

<

meta

name

="viewport"

content

="width=device-width"

>

之後,css畫素和邏輯畫素比例相等了。

dpr才表示正確。

當dpr為2時

css中乙個10x10的元素,其實是通過20x20的物理畫素表示的。因為是面積比,所以就是1:4了。所以說dpr越高,越清晰。

三、解析度,就是物理畫素,就是螢幕有多少個畫素點,就是1080x1920這些東西

ppi。就是每英吋有多少畫素點。計算公式是

dpr是怎麼計算的呢? 解析度/邏輯畫素 就是了

比如640/320

四、這些東西,分開理解,不要強加關聯。

關於移動段裝置物理畫素和css畫素的一點研究

拿ip6為例 375 667指的到底是什麼?答案 css邏輯解析度 研究過程,我們把ip6的物理水平尺寸 也就是螢幕寬度 算出來 大概是5.9cm 尺子量的,不會特別精確 換算成in的話2.3228,先驗證ppi 官方給出的ppi是326,用1334 2.3228大致就是322,驗證成立。接下來需要...

移動端設定border的1px畫素解決方案

可能有人會問,設定邊框1px問題,直接 border 1px soild ccc 不就完事了,為什麼需要這麼麻煩?因為移動端的dpr裝置畫素比不同,直接設定會出現邊框加粗問題,親們可以自行測試,這裡不做過多闡述。下面直接上解決方案。1.為了方便通用,在base.scss檔案中 使用 mixin 定義...

移動端px和rem的換算

看根元素html裡面設定的font size是多少 50 px,即認為1rem為多少 50 畫素 rem的優點是所有的元素大小都是乙個倍數,相對於根元素的倍數,所以只需要修改根元素,所有的元素都可以變化。可以適應不同的裝置解析度。缺點是ie6 ie7 ie8不支援這個標籤。指定了 1rem為50px...