溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HTML的meta viewport屬性怎么用

發(fā)布時間:2022-03-01 14:01:56 來源:億速云 閱讀:92 作者:小新 欄目:web開發(fā)

這篇文章主要介紹HTML的meta viewport屬性怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

  什么是Viewport

  手機瀏覽器是把頁面放在一個虛擬的“窗口”(viewport)中,通常這個虛擬的“窗口”(viewport)比屏幕寬,這樣就不用把每個網(wǎng)頁擠到很小的窗口中(這樣會破壞沒有針對手機瀏覽器優(yōu)化的網(wǎng)頁的布局),用戶可以通過平移和縮放來看網(wǎng)頁的不同部分。移動版的Safari瀏覽器最新引進了viewport這個metatag,讓網(wǎng)頁開發(fā)者來控制viewport的大小和縮放,其他手機瀏覽器也基本支持。

  Viewport基礎(chǔ)

  一個常用的針對移動網(wǎng)頁優(yōu)化過的頁面的viewportmeta標(biāo)簽大致如下:

  <metaname=”viewport”content=”width=device-width,initial-scale=1,maximum-scale=1&Prime;>

  width:控制viewport的大小,可以指定的一個值,如果600,或者特殊的值,如device-width為設(shè)備的寬度(單位為縮放為100%時的CSS的像素)。

  height:和width相對應(yīng),指定高度。

  initial-scale:初始縮放比例,也即是當(dāng)頁面第一次load的時候縮放比例。

  maximum-scale:允許用戶縮放到的最大比例。

  minimum-scale:允許用戶縮放到的最小比例。

  user-scalable:用戶是否可以手動縮放

  關(guān)于viewport的一些問題

  viewport并非只是ios上的獨有屬性,在android、winphone上同樣也有viewport。它們要解決的問題是相同的,即無視設(shè)備的真實分辨率,直接通過dpi,在物理尺寸和瀏覽器之間重設(shè)分辨率,這個分辨率和設(shè)備的分辨率無關(guān)。比如,你拿個3.5寸-320*480的iphone3gs、3.5寸-640*960的iphone4或者9.7寸-1024*768的ipad2,雖然設(shè)備的分辨率不同,物理尺寸也不同,但你可以通過設(shè)置viewport讓它們在瀏覽器里有相同的分辨率。比如說,你的網(wǎng)站是800px寬,你可以通過設(shè)置viewport的width=800,來讓你的網(wǎng)站在這三個不同的設(shè)備上都剛好滿屏顯示你的網(wǎng)站。

  以上的知識,相信每個對viewport稍有了解的同學(xué)應(yīng)該都已經(jīng)了解了。這不是我今天想說的重點。我想說明的是viewport在ios和android上的一些差異表現(xiàn)。

  網(wǎng)上一搜關(guān)于viewport的知識,基本上全都是如下信息:

  <metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"/>

  這段代碼的意思是,讓viewport的寬度等于物理設(shè)備上的真實分辨率,不允許用戶縮放。一都主流的webapp都是這么設(shè)置的,它的作用其實是故意舍棄viewport,不縮放頁面,這樣dpi肯定和設(shè)備上的真實分辨率是一樣的,不做任何縮放,網(wǎng)頁會因此顯得更高細(xì)膩。玩ps的同學(xué)應(yīng)該都知道,當(dāng)你將一張1000*1000的圖片直接縮放至500*500分變成什么樣,對吧?圖片的失真一定逃不掉。

  但我要做的一個應(yīng)用卻恰恰相反,需要利用viewport,利用縮放。不論真實分辨率是多少,無論物理尺寸是多少,我都希望在瀏覽器里,能有統(tǒng)一的分辨率,同時也不允許用戶縮放。我用來測試的設(shè)備有:iphone4、ipad2、htc的g11、不知道什么廠商的aquosphone(android系統(tǒng))、華碩的androidpad、dell的winphone然后我一路遇到了如下問題:

  1)如果不顯示地設(shè)置viewport,那么width的默認(rèn)為980。如果頁面的所有元素寬度都小于980,此時width為980,如果頁面最寬的位置超過980,那么width等于最大寬度??傊?,默認(rèn)能將整個頁面從左到右顯示出來。如果設(shè)置了viewport,比如,只單純地設(shè)置了user-scalable=no,例如<metaname="viewport"content="user-scalable=no"/>,那么ios下width還是按980顯示(即默認(rèn)就會通過dpi縮放),但android和winphone下卻不會再縮放了,瀏覽器分辨率和真實設(shè)置分辨率一致。

  2)對于ios設(shè)備,設(shè)置width可以生效,但對于android,設(shè)置width并不會生效。ios設(shè)備,縮放的比率即dpi是通過你設(shè)置的width和設(shè)置真實分辨率自動計算的,而android下你設(shè)置width無效,你能設(shè)置的是一個特殊的字段target-densitydpi,關(guān)于target-densitydpi可以參考一下這篇文章:http://hi.baidu.com/j_fo/blog/item/748361279ebccd18908f9d7d.html。也就是說,有三個變量:瀏覽器width、設(shè)備真實width、dpi。我們簡單地用個公式來表達它們之間的關(guān)系吧(并非真實關(guān)系,簡單說明用)設(shè)備真實width*dpi=瀏覽器width,這里的三個變量,設(shè)備真實width是個我們不能操作的已知值,另外兩個變量我們可以設(shè)置一個來影響另一個,在ios中,我們能改的是瀏覽器width,dpi自動生成,而在android中,我們能改的是dpi,瀏覽器width自動生成。對于android,無論我們?nèi)绾卧O(shè)置width,也不會對瀏覽器width產(chǎn)生影響。

  ps:這里我另外再說一個奇怪的問題:在htc的g11里(htc的手機我只有這一個,別的沒有測),如果設(shè)置了dpi而不顯示地設(shè)置width,則user-scalable=no不生效,即是說:<metaname="viewport"content="target-densitydpi=300,user-scalable=no"/>,無法阻止用戶縮放屏幕。我們需要顯示地設(shè)置一下width值,僅管這個值對android下的瀏覽器分辨屏并不產(chǎn)生任何影響(對ios還是會產(chǎn)生影響的),我們?nèi)匀灰O(shè)置它,而且這個值一定要大于320,如果小于等于320,也無法使user-scalable=no生效。這個問題只在htc的g11手機上出現(xiàn),在aquosphone沒有這個問題。兼容android真是件頭痛的事@_@,未來還不知道有多少坑呢。而在winphone上,結(jié)果就更奇怪了:我給viewport的width設(shè)一個大于480的值,user-scalable=no就失效了,而設(shè)一個小于480的值,user-scalable=no能生效。但無論我給viewport的width設(shè)多少值,對winphone真正顯示的width卻并不產(chǎn)生我預(yù)期的影響,通過target-densitydpi也沒有影響。設(shè)置width,如果小于480的話,屏幕會縮放,但縮小的比例卻和我預(yù)期完全不一樣,我不知道它是按照什么規(guī)律縮放的。不知道這是winphone的問題,還是dell實現(xiàn)的問題。

  3)這一條和上一條應(yīng)該是直接相關(guān)的:ios設(shè)備在橫豎屏?xí)r,會自動調(diào)整dpi,無論橫屏還是豎屏,都能保證瀏覽器width等于viewport中設(shè)置的值,所以橫豎屏的時候,頁面里顯示的內(nèi)容的大小是會自動縮放產(chǎn)生變化的。而android手機在橫豎屏的時候,不會改變dpi,在橫豎屏的時候,網(wǎng)頁不會產(chǎn)生縮放。也正因此,ios可以保證橫豎屏頁面都不會產(chǎn)生滾動條,滿屏顯示,而android卻無法保證這一點,橫著滿屏則豎著無法滿屏,反之亦然。

  4)對于ios設(shè)備,如果width顯示定義了,而頁面最寬的位置超過width的話,width無效,仍按最寬的寬度來顯示(不會有滾動條)。但此時會出現(xiàn)一個很奇怪的問題,當(dāng)你將手機橫豎屏切換幾次之后,會發(fā)現(xiàn)你的頁面自動放大了,出現(xiàn)了滾動條,但其實放大后的寬度其實和你設(shè)的width也并沒有關(guān)系。為了防止這種情況出現(xiàn),你需要將width的寬度設(shè)置得比頁面最寬的地方更大,或者相同。

HTML的meta viewport屬性怎么用HTML的meta viewport屬性怎么用

以上是“HTML的meta viewport屬性怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI