viewport是用戶網頁的可視區域,也可叫做視區。手機瀏覽器是把頁面放在一個虛擬的窗口(viewport)中,通常這個虛擬的窗口比屏幕寬,這樣就不用把網頁擠到很小的窗口中,用戶可以通過平移和縮放來看網頁的不同部分。
下圖為常見一些設備瀏覽器默認viewport寬度:
在css中經常使用px做單位,PC端瀏覽器中的1px往往都是對應電腦屏幕的1個物理像素,這救我讓我們誤以為1px就是一個物理像素,事實并非如此,在不同設備不同環境下,css的1px所代表的設備物理像素是不同的。用戶縮放也會影響。如果把頁面放大一倍,那么css1px所代表的物理像素也會增加一倍,反之,也會縮小一倍。
移動端瀏覽器中,window對象有devicePixelRadio屬性,官方定為為:設備物理像素和獨立像素的比例。
devicePixelRadio = 物理像素 / 獨立像素
css中的px就可以看作獨立像素。
學習viewport的具體用法之前,先搞清楚幾個概念:
layout viewport:是網頁的所有內容,可以全部或者部分展示給用戶。
可通過 document.documentElement.clientWidth來獲取
visual viewport:當前顯示給用戶內容的窗口,可以拖動或者放大縮小網頁。
可通過 window.innerWidth 來獲取。
ideal? viewport: 移動設備的屏幕寬度。
ideal viewport并沒有一個固定尺寸,所有的iphone的ideal viewport寬度都是320px,也就是css中的320px就代表iphone屏幕的寬度。但是安卓手機機型較多,有320px、360px、384px等,所以各個設備ideal viewport不同。
設置viewport
<meta name="viewport" content="width=device-width, initial-scale=1.0 , maximum-scale=1.0 , user-scalable=no" >
該meta的作用是讓當前viewport的寬度等于設備的寬度,不允許用戶手動縮放。
分別對meta的各個屬性介紹如下:
width | 設置viewport的寬度,為一個正整數,或字符串‘device-width’ |
---|---|
initial-scale | 設置頁面的初始縮放值,是一個數字,可以是小數 |
maximum-sacle | 設置頁面最大縮放值,是一個數字,可以是小數 |
user-scalable | 是否允許用戶進行縮放,值為'yes'或者'no',yes表示可縮放,no表示禁止縮放 |
minimum-scale | 允許用戶縮放的最小值,是一個數字,可以是小數 |
height | 設置layout viewport的高度,這個屬性很少使用 |
?這些屬性可以同時使用,使用時用逗號隔開,也可以單獨使用。
此外,安卓手機還支持target-densitydpi 這個私有屬性,它表示目標設備的密度等級,決定css中1px代表多少物理像素。
target-densitydpi | 值可以為數值或 high-dpi、medium-dpi、low-dpi、device-dpi這幾個字符中的一個 |
---|
target-densitydpi = device-dpi時,css的1px就等于物理像素1px。由于只有安卓支持,所以我們盡量避免使用它,作為了解就好了。
縮放是相對于ideal viewport來縮放的,縮放值越大,當前viewport的寬度就會越小,反之亦然。
舉例:在iphone中,如果我們設置 initial-scale = 2 ,也就是默認放大2倍,此時viewport就縮小了2倍變成了160px。就是原來的1px變成了2px的長度,放大之后原來需要320px才能填滿的寬度,現在只需要160px就可以做到。因此我們可以得出一個公式:
visual viewport寬度 = ideal viewport寬度 / 當前縮放值
當前縮放值 = ideal viewport寬度 / visial viewport寬度? ?
ps:?visual viewport的寬度指的是瀏覽器可視區域的寬度。
大多數瀏覽器都符合這個理論,但是安卓上的原生瀏覽器以及IE有些問題。安卓自帶的webkit瀏覽器只有在 initial-scale = 1 以及沒有設置width屬性時才是表現正常的,也就相當于這理論在它身上基本沒用;而IE則根本不甩initial-scale這個屬性,無論你給他設置什么,initial-scale表現出來的效果永遠是1。
好了,現在再來說下initial-scale的默認值問題,就是不寫這個屬性的時候,它的默認值會是多少呢?很顯然不會是1,因為當 initial-scale = 1 時,當前的layout viewport寬度會被設為 ideal viewport的寬度,但前面說了,各瀏覽器默認的 layout viewport寬度一般都是980啊,1024啊,800啊等等這些個值,沒有一開始就是 ideal viewport的寬度的,所以 initial-scale的默認值肯定不是1。安卓設備上的initial-scale默認值好像沒有方法能夠得到,或者就是干脆它就沒有默認值,一定要你顯示的寫出來這個東西才會起作用,我們不管它了,這里我們重點說一下iphone和ipad上的initial-scale默認值。
根據測試,我們可以在iphone和ipad上得到一個結論,就是無論你給layout viewpor設置的寬度是多少,而又沒有指定初始的縮放值的話,那么iphone和ipad會自動計算initial-scale這個值,以保證當前layout viewport的寬度在縮放后就是瀏覽器可視區域的寬度,也就是說不會出現橫向滾動條。比如說,在iphone上,我們不設置任何的viewport meta標簽,此時layout viewport的寬度為980px,但我們可以看到瀏覽器并沒有出現橫向滾動條,瀏覽器默認的把頁面縮小了。根據上面的公式,當前縮放值 = ideal viewport寬度 / visual viewport寬度,我們可以得出:
當前縮放值 = 320 / 980
也就是當前的initial-scale默認值應該是 0.33這樣子。當你指定了initial-scale的值后,這個默認值就不起作用了。
總之記住這個結論就行了:在iphone和ipad上,無論你給viewport設的寬的是多少,如果沒有指定默認的縮放值,則iphone和ipad會自動計算這個縮放值,以達到當前頁面不會出現橫向滾動條(或者說viewport的寬度就是屏幕的寬度)的目的。
方法1:使用document.write動態輸出meta標簽
document.write('<meta name="viewport" content="width=device-width,initial-scale=1">')
方法2:通過setAttribute來改變
<meta name="viewport" content="width = 380"><script> var mvp = document.getElementById('testViewport'); mvp.setAttribute('content','width=480');</script>
說了那么多廢話,最后還是有必要總結一點有用的出來。
第一:如果不設置meta viewport標簽,那么移動設備上瀏覽器默認的寬度值為800px,980px,1024px等這些,總之是大于屏幕寬度的。這里的寬度所用的單位px都是指css中的px,它跟代表實際屏幕物理像素的px不是一回事。
第二:每個移動設備瀏覽器中都有一個理想的寬度,這個理想的寬度是指css中的寬度,跟設備的物理寬度沒有關系,在css中,這個寬度就相當于100%的所代表的那個寬度。我們可以用meta標簽把viewport的寬度設為那個理想的寬度,如果不知道這個設備的理想寬度是多少,那么用device-width這個特殊值就行了,同時initial-scale=1也有把viewport的寬度設為理想寬度的作用。所以,我們可以使用
<meta name="viewport" content="width=device-width, initial-scale=1">
來得到一個理想的viewport(也就是前面說的ideal viewport)。
為什么需要有理想的viewport呢?比如一個分辨率為320x480的手機理想viewport的寬度是320px,而另一個屏幕尺寸相同但分辨率為640x960的手機的理想viewport寬度也是為320px,那為什么分辨率大的這個手機的理想寬度要跟分辨率小的那個手機的理想寬度一樣呢?這是因為,只有這樣才能保證同樣的網站在不同分辨率的設備上看起來都是一樣或差不多的。實際上,現在市面上雖然有那么多不同種類不同品牌不同分辨率的手機,但它們的理想viewport寬度歸納起來無非也就 320、360、384、400等幾種,都是非常接近的,理想寬度的相近也就意味著我們針對某個設備的理想viewport而做出的網站,在其他設備上的表現也不會相差非常多甚至是表現一樣的。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
縱觀LOL歷屆S系列賽,哪一屆奪冠的含金量最高?哪一屆又最低?S1來自歐洲的FNC。當時隊伍不多。S2來自臺灣的TPA,在勝利面前擊敗熱火,急于奪冠。來自韓國的S3 SKT,faker的首次亮相是巔峰。魔王用他可怕的行動殺戮并將刀子壓在繩子上完成了統治之路?;始襆PL獲得第二名。來自韓國SSW的S4,前四名擊潰兄弟隊SSB,奪冠勢不可擋。LPL王室再次失利,獲得第二名。三星解散后,三星世子進入LP...
手機撥號上網是什么意思?撥號設置是設置默認使用哪張手機卡打電話,上網是開通數據,使用默認使用手機卡的流量。手機如何撥號上網?先打開撥號選項;點擊手機的撥號盤,點擊右下角三個點的設置選項;點擊【設置】,部分手機點擊【更多】選項按鈕顯示【設置】;可以看到,除了1是語音郵件設置,還可以設置2到9的快速撥號鍵。點擊添加聯系人,根據自己的實際情況在通訊錄中選擇經常聯系的聯系人。按照彈出的提示一步一步操作。1...
CM域名是哪個國家的域名?國人可以注冊嗎?。CM是邁凱輪的國家域名。任何國家的企業或個人都可以注冊,沒有任何限制。因為后綴CM接近后綴。com,也廣受國人喜愛,具有一定的投資價值。如果需要注冊,可以參考互聯網先鋒網站,該網站提供多種海外域名注冊,操作方便,有在線查詢功能。CM和CN分別是哪個國家?CM喀麥隆CN國際域名和IP地址管理機構ICANN認證的域名注冊商(簡稱注冊商)可以提供商業機構、網絡...