Html開發(fā)之Viewport的使用
近年來隨著移動端的快速發(fā)展,越來越多傳統(tǒng)的web應用需要適配移動終端,下面記錄一下如何通過viewport實現(xiàn)簡單的不同型號的手機端的適配問題。不過在此之前,介紹一下如何通過Chrome瀏覽器,調試在移動終端上的效果。
調試工具
首先我們打開chrome谷歌瀏覽器,輸入天貓地址(實現(xiàn)了手機端適配),按F12進入開發(fā)者模式。進入如下的界面:
接下來點擊右下方圈紅的部分,可以調出另一個控制臺,如下界面:
選擇某個Device-設備,點擊Emulate,之后重新刷新頁面即可看到效果,這里我選中iphone5,具體效果如下:
可以知道的是天貓是做了移動端的適配的。
支持移動端
知道了如何進行調試之后,如何支持移動端呢。這里主要是通過Viewport來實現(xiàn)移動端的適配的。其實仔細觀察一些使用HTML5開發(fā)手機應用或手機網(wǎng)頁時,我們可能(有些可能不是通過viewport來實現(xiàn)適配的)會發(fā)現(xiàn)如下代碼:
- <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no;" />
那么Viewport是什么呢?
手機瀏覽器是把頁面放在一個虛擬的窗口-viewport中的,通常情況下這個虛擬的窗口比屏幕寬,這樣就不用吧每個網(wǎng)頁擠到很小的窗口中(這樣會破壞沒有針對手機瀏覽器優(yōu)化的網(wǎng)頁的布局),此時雖然顯示不完全,但是用戶仍可以通過平移和縮放來看網(wǎng)頁的內容。viewport就是讓網(wǎng)頁開發(fā)者通過其大小,動態(tài)的設置其網(wǎng)頁內容中控件元素的大小,從而使得在瀏覽器上實現(xiàn)和web網(wǎng)頁中相同的效果(比例縮小)。
當然,更加優(yōu)秀的做法是類似天貓的做法:針對手機端重新進行頁面設計、布局,因為手機屏幕畢竟有限,按照web頁面等比縮小的方式較之最原始有改進,但是如何在小屏幕上展示最合適的內容給用戶的設計才是最貼切的。
不過對于一些沒有太多要求的,可以簡單的通過viewport實現(xiàn)適配。
Viewport語法
width:控制viewport的大小,一般情況下指定為device-width(單位為縮放為100%的CSS像素),也可以指定一個固定的值例如600.
height:和width相應,指定高度。
initial-scal:初始縮放比例,頁面***次load的時候的縮放比例。
maximum-scale:允許用戶縮放到的***比例。
minimum-scale:允許用戶縮放到的最小比例。
user-scalable:用戶是否可以手動縮放。
Demo
了解了Viewport接下來,我們實現(xiàn)一個小Demo,web版2048游戲的手機適配,web上的效果如下圖:
接下來的邏輯便是通過實際的設備大小,調整元素大小,核心代碼:
- var documentWidth = window.screen.availWidth;
- var gridContainerWidth = 0.92*documentWidth;
- var cellSideLength = 0.18*documentWidth;
- var cellSpace = 0.04*documentWidth;
- var headerWidth=window.screen.availWidth;
- function prepareForMobile(){
- if(documentWidth>500){
- //web端
- gridContainerWidth =500;
- cellSpace=20;
- cellSideLength=100;
- headerWidth = 500;
- }else
- {
- //手機端額外處理頭部
- headerWidth = headerWidth*0.92;
- }
- $('#grid-container').css('width',gridContainerWidth - 2*cellSpace);
- $('#grid-container').css('height',gridContainerWidth - 2*cellSpace);
- $('#grid-container').css('padding',cellSpace);
- $('#grid-container').css('border-radius',0.02*gridContainerWidth);
- $('.grid-cell').css('width',cellSideLength);
- $('.grid-cell').css('height',cellSideLength);
- $('.grid-cell').css('border-radius',0.02*cellSideLength);
- //設置頭部
- $('.header').css('width',headerWidth);
- $('#newGame').css('width',headerWidth*0.20+'px');
- $('#topScore').css('width',headerWidth*0.40*0.90+'px');
- }
之后通過chrome瀏覽器即可看到在各個手機端上的效果: