本文分為兩個部分,第一部分討論跨平臺網站的可行性,第二部分討論viewport是如何設置的
開發跨平臺網站?
靠標簽的自適應寬高實現多尺寸通用!?
標簽寬高可以自適應沒錯,我們很早就可以這么做了。但是你會發現很多pc端的傳統網站還是會把寬度固定。(淘寶采用1000px寬度,搜狐950px...)為什么我們不讓網站自適應寬高呢?那是因為,如果我們聽任標簽寬度被瀏覽器任意拉伸,將導致極差的體驗:你不會希望當瀏覽器被縮放到100px時,你的左邊欄變成了面條;也不會希望當瀏覽器被過度拉伸時,你的網站看起來像小學生的橫格本。所以,靠標簽的自適應來實現跨平臺,是不現實的,是以犧牲用戶體驗為代價的。很多時候我們必須固定寬高。
依靠html5設備檢測構建響應式網站!
我們依靠html5的設備檢測查看當前設備是手機還是平板,并依此去加載相對應的css。舉個例子來說:如果檢測到你的設備是平板,我可以橫著顯示三欄,如果是手機的話,我就只顯示一欄。這個聽起來不難,但實現起來非常復雜,我們不僅要針對不同設備開發多套模版,還要對圖片的尺寸進行處理。對此,我們可以看看波士頓環球報是如何借助HTML5實現響應式設計的。
總的來說,實現跨平臺網站對大多數網站來說成本過高,限制太多,是否可行要結合網站實際情況。
viewport與網站尺寸
手機瀏覽器是把頁面放在一個虛擬的“窗口”(viewport)中,通常這個虛擬的“窗口”(viewport)比屏幕寬,這樣就不用把每個網頁擠到很小 的窗口中(這樣會破壞沒有針對手機瀏覽器優化的網頁的布局),用戶可以通過平移和縮放來看網頁的不同部分。移動瀏覽器引進了 viewport 這個 meta tag,讓網頁開發者來控制 viewport 的大小和縮放。
基本概念
(1) CSS pixels與device pixels
CSS pixels: 瀏覽器使用的抽象單位, 主要用來在網頁上繪制內容。
device pixels: 顯示屏幕的的最小物理單位,每個dp包含自己的顏色、亮度。
等值的 CSS pixels在手機屏幕上占多大的位置,這不是固定的,這取決于很多屬性。經過分析和總結,我們可以得出這么一條公式: 1 CSS pixels = (devicePixelRatio)^2 device pixels (^2是平方的意思,至于 devicePixelRatio是什么東西,后面會講解) 。
(2) PPI/DPI
PPI,有時也叫DPI,所表示的是每英寸所擁有的像素(pixel)數目,數值越高,即代表顯示屏能夠以越高的密度顯示圖像。(注:這里的像素, 指的是device pixels。)搞清楚了PPI是什么意思,我們就能很容易理解PPI的計算方式了,我們需要首先算出手機屏幕的對角線等效像素,然后處以對角線(我們平 常所說的手機屏幕尺寸就是說的手機屏幕對角線的長度),就可以得到PPI了。準確的計算公示大家可以參照下圖。比較有意思的是,根據公式計算出來的 iPhone 4的PPI為330,要比蘋果官方公布的326要高一點點。
同理,以HTC G7為例,480*800的分辨率,3.7英寸,算出來就是252的PPI。
(3) 密度決定比例
我們計算PPI就是為了知道一部手機設備是屬于哪個密度區間的,因為不同的密度區間,對應著不同的默認縮放比例,這是一個很重要的概念。
由上圖可知,PPI在120-160之間的手機被歸為低密度手機,160-240被歸為中密度,240-320被歸為高密度,320以上被歸為超高密度(Apple給了它一個上流的名字——retina)。
這些密度對應著一個特定的縮放比例值,拿我們最熟悉的iphone4或4s來說,它們的PPI是326,屬于超高密度的手機。當我們書寫一個寬度為 320px的頁面放到iphone中顯示,你會發現,它竟然是滿寬的。這是因為,頁面被默認放大了兩倍,也就是640px,而iphone4或4s的寬, 正是640px。
圖中把高密度的一類圈起來,是因為這是android手機的統計數據,在國內安卓手機市場中,高密度的設備占了絕大多數的市場份額,這是很重要的一點,也是我們做安卓端webapp要注意的關鍵點。
viewport的使用
viewport總共有5個屬性,分別如下:
新聞熱點
疑難解答