html meta viewport屬性說明
來源:易賢網(wǎng) 閱讀:1322 次 日期:2014-04-22 15:47:49
溫馨提示:易賢網(wǎng)小編為您整理了“html meta viewport屬性說明”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了html的meta viewport屬性說明

什么是Viewport

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

Viewport 基礎(chǔ)

一個(gè)常用的針對(duì)移動(dòng)網(wǎng)頁(yè)優(yōu)化過的頁(yè)面的 viewport meta 標(biāo)簽大致如下:

<meta name=”viewport” content=”width=device-width, initial-scale=1, maximum-scale=1″>

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

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

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

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

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

user-scalable:用戶是否可以手動(dòng)縮放

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

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

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

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

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

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

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

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

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

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

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

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

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)頁(yè)制作
易賢網(wǎng)手機(jī)網(wǎng)站地址:html meta viewport屬性說明
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
相關(guān)閱讀網(wǎng)頁(yè)制作

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)