移動(dòng)端適配

【菜鳥一枚~哪里不對(duì)蛔六,希望大佬可以幫忙糾正】


以下是我電腦打開瀏覽器F12模式下的數(shù)據(jù):
我的電腦分辨率當(dāng)前為1920*1080
獲取screen.width && height奄容,為1536*864
獲取window.innerWidth && height,為960*734
獲取document.documentElement.clientWidth && clientHeight巢掺,為943*734
獲取document.documentElement.offsetWidth && offsetHeight,為600*734
獲取window.devicePixelRatio,為1.25
放大200% 獲取screen.width && height坤塞,為1536*864
放大200% window.inner.Width && height舌菜,為480*367
放大200% document.documentElement.clientWidth && clientheight萌壳,為472*359
放大200% document.documentElement的offsetWidth && offsetheight,為600*359
放大200% 獲取window.devicePixelRatio日月,為2.5


PC上的viewport

  • window.innerWidth – 瀏覽器窗口的內(nèi)部寬度 (布局視圖)
  • document.documentElement.clientWidth-瀏覽器'視口'的大懈の汀(視覺(jué)視口)(不包括工具欄和滾動(dòng)條)
  • document.documentElement.offsetWidth-DOM文檔的根節(jié)點(diǎn)html元素對(duì)象的寬度
    草圖.jpg

所以:

  • 上面數(shù)據(jù)innerWidth比clientWidth大,多了滾動(dòng)條的距離爱咬,倆個(gè)height都一樣尺借,因?yàn)榇藭r(shí)沒(méi)有橫向滾軸
  • 當(dāng)你給HTML元素設(shè)置了width/height之后,請(qǐng)使用offsetWidth/offsetHeight精拟,其它倆個(gè)獲取的值不是你設(shè)置的值
  • 只有在默認(rèn)情況下燎斩,offsetWidth == clientWidth == innerWidth

DPR

  • 設(shè)備物理像素:(Physical Pixel)這個(gè)好理解,衡量設(shè)備的度量單位串前。
  • 邏輯像素:(DIP&DP&PT&SP)這個(gè)也好理解瘫里,你可以把它當(dāng)做用來(lái)邏輯運(yùn)算的度量單位。
  • CSS像素荡碾,為Web開發(fā)者創(chuàng)造的一種度量單位谨读。

所以:DPR=物理像素/邏輯像素,下面我會(huì)用dpr=pp/dips來(lái)解釋我的上述數(shù)據(jù)坛吁。

首先劳殖,物理像素是設(shè)備出廠時(shí)就定死的铐尚,設(shè)想一下你用ps的時(shí)候:

  • 上面會(huì)有刻度尺來(lái)充當(dāng)度量單位,當(dāng)你放大的時(shí)候哆姻,本來(lái)一小格的度量單位宣增,是不是會(huì)被慢慢拉長(zhǎng),然后不得不換成更小的度量單位(多個(gè)小格)
  • 圖片被放大之后矛缨,由于當(dāng)前設(shè)備物理像素不夠爹脾,圖像將顯示不全(當(dāng)然如果物理像素超大,這個(gè)被放大的圖片扔進(jìn)去箕昭,也會(huì)變賊辛榉痢)

開始正題:

有一個(gè)2*2的矩形(dips),假設(shè)此時(shí)未被放縮落竹,dpr為1泌霍,矩形占4個(gè)小格子占滿了當(dāng)前設(shè)備,也就是正好1個(gè)邏輯度量單位(dips)就是1個(gè)物理像素述召,很好理解朱转。

然后你把它放大200%之后,之前那一格度量單位被拉長(zhǎng)了积暖,拉長(zhǎng)到橫跨物理設(shè)備左邊到右邊藤为,之前只占一半。此時(shí)那1個(gè)邏輯度量單位(dips)就占了2個(gè)物理像素呀酸,即dpr=2/1=2

此時(shí)再來(lái)說(shuō)我之前PC的數(shù)據(jù):
1920/1536=1.25凉蜂。由于我的電腦分辨率是1920(物理像素),而我的瀏覽器全屏顯示寬度為1536(dips)性誉,而瀏覽器工作是根據(jù)dips的寬度窿吩,也就是,1536個(gè)邏輯像素,填充滿了1920個(gè)物理像素错览,即1dips=1.25pp

因?yàn)槲掖蜷_了F12調(diào)試模式纫雁,所以當(dāng)前的viewport(視區(qū))只有943PX(css像素,留個(gè)坑)倾哺,對(duì)應(yīng)了943*1.25=1178.75個(gè)物理像素轧邪。當(dāng)我放大200%之后:viewport的width和height均變?yōu)橹暗囊话耄奂獾陌l(fā)現(xiàn)為什么倆個(gè)的height有點(diǎn)不同羞海,因?yàn)樵谖曳糯蟮臅r(shí)候忌愚,出現(xiàn)了橫著的滾軸,所以自然viewport的高度變小了一點(diǎn)却邓。此時(shí)的dpr自然就是:dpr=1178.75/472=2.5


移動(dòng)端的viewport

前言:正常情況下PX是可以拿來(lái)做dips的(在PC端)硕糊,或者說(shuō)在理想viewport下,1px就是1dip。但是它只是瀏覽器的一個(gè)度量單位简十,和dips有區(qū)別

在移動(dòng)端有三個(gè)viewport

  1. layout viewport:指的是布局視口檬某,默認(rèn)布局視口寬度遠(yuǎn)大于屏幕寬度,為了讓用戶看到網(wǎng)站全貌螟蝙,它會(huì)縮小網(wǎng)站恢恼。
  2. visual viewport:指的是視覺(jué)視口,用戶正在看到的網(wǎng)站的區(qū)域胰默,與設(shè)備屏幕一樣寬场斑。
  3. ideal viewport :指的理想視口,當(dāng)網(wǎng)站是為手機(jī)準(zhǔn)備的時(shí)候使用牵署。使用meta聲明和簸。早期iPhone理想視口為320*480 dips。

物理屏幕分辨率:screen.width/height(有兼容問(wèn)題不建議使用)
布局視口:document.documentElement.clientWidth
視覺(jué)視口:window.innerWidth
理想視口:screen.width/height(有兼容問(wèn)題不建議使用)
設(shè)備像素比:window.devicePixelRatio
屏幕方向:window.orientation

由于手機(jī)瀏覽器不知道碟刺,你的頁(yè)面是不是為移動(dòng)端做的,所以會(huì)有一個(gè)默認(rèn)的較大的布局視口薯酝,來(lái)放置你的PC頁(yè)面半沽,使得你可以通過(guò)移動(dòng),放縮來(lái)瀏覽吴菠。甚至有的手機(jī)瀏覽器會(huì)通過(guò)計(jì)算者填,得到一個(gè)比例,來(lái)放縮你的PC頁(yè)面做葵,放在你的視覺(jué)視口占哟,使得在手機(jī)上也能夠'正常'瀏覽,但現(xiàn)在酿矢,開發(fā)者們都會(huì)針對(duì)移動(dòng)端來(lái)適配榨乎,通過(guò)meta的viewport,讓width=device-width瘫筐,使得layout viewport=visual viewport蜜暑,所以它倆就不過(guò)多解釋。

由于沒(méi)有在移動(dòng)端測(cè)試過(guò)策肝,所以只能拿拿flexible.js的數(shù)據(jù)來(lái)臆想一下

切換到dpr=1的設(shè)備時(shí)肛捍,flexible.js自動(dòng)生成<meta>標(biāo)簽,可以看到里面顯示initial-scale=1之众,同時(shí)它也等于1/dpr=1拙毫,html元素寬度為320(視口的寬度)
此時(shí)dpr=1,1PX=1dip=1物理像素棺禾!

切換到dpr=2的設(shè)備時(shí)缀蹄,flexible.js自動(dòng)生成<meta>標(biāo)簽,可以看到里面顯示initial-scale=0.5,同時(shí)它也等于1/dpr=0.5袍患,html元素寬度為640(視口的寬度)坦康,也就是瀏覽器當(dāng)前視覺(jué)視口寬度為理想視口(設(shè)備寬度)的2倍,即1dip=2PX诡延;
此時(shí)dpr=2滞欠,2PX=1dip=2物理像素!


總結(jié)

在PC上肆良,DPR會(huì)根據(jù)你的電腦分辨率(物理像素) / 理想視口(screen.width)得到筛璧,然后在你的視覺(jué)視口上,以此DPR來(lái)對(duì)應(yīng)邏輯像素和物理像素的關(guān)系

在移動(dòng)端上惹恃,同樣DPR=手機(jī)分辨率 / 理想視口(ideal viewport)得到夭谤,也是應(yīng)該在視覺(jué)視口上,以此dpr來(lái)對(duì)應(yīng)CSS像素和物理像素的關(guān)系巫糙。當(dāng)width=device-width朗儒,且initial-scale=1時(shí),三個(gè)視口相等

zoom會(huì)影響CSS像素和物理像素的比例参淹,比如你給html元素添加style:zoom:2醉锄;,或者initial-scale=2浙值,都會(huì)放大viewport視口的大小恳不,導(dǎo)致放大2倍CSS像素和物理像素的比例,但DPR不會(huì)變开呐,

dpr=(設(shè)備物理像素)pp/(設(shè)備獨(dú)立像素)dips

zoom=(visual viewport)css/(ideal viewport)dips

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烟勋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筐付,更是在濱河造成了極大的恐慌卵惦,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件家妆,死亡現(xiàn)場(chǎng)離奇詭異鸵荠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)伤极,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蛹找,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人哨坪,你說(shuō)我怎么就攤上這事庸疾。” “怎么了当编?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵届慈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)金顿,這世上最難降的妖魔是什么臊泌? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮揍拆,結(jié)果婚禮上渠概,老公的妹妹穿的比我還像新娘。我一直安慰自己嫂拴,他們只是感情好播揪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筒狠,像睡著了一般猪狈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辩恼,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天雇庙,我揣著相機(jī)與錄音,去河邊找鬼灶伊。 笑死状共,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谁帕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冯袍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匈挖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起康愤,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤儡循,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后征冷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體择膝,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年检激,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肴捉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叔收,死狀恐怖齿穗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饺律,我是刑警寧澤窃页,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響脖卖,放射性物質(zhì)發(fā)生泄漏乒省。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一畦木、第九天 我趴在偏房一處隱蔽的房頂上張望袖扛。 院中可真熱鬧,春花似錦馋劈、人聲如沸攻锰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娶吞。三九已至,卻和暖如春械姻,著一層夾襖步出監(jiān)牢的瞬間妒蛇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工楷拳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绣夺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓欢揖,卻偏偏與公主長(zhǎng)得像陶耍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子她混,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353