天天看點

移動web前端小結

原文位址:http://blog.csdn.net/small_rice_/article/details/22690535

在智能手機橫行的時代,作為一個web前端,不會編寫移動web界面,的确是件悲催的事情。當公司準備做一個微信的微網站時,作為一個多年經驗的web前端碼農,我迷茫了,真心不知道從何下手。

接下來就是搜一堆教程,然後開始編寫代碼,三天後,我的第一個移動端web頁面編寫完成。

回頭想想,移動端的web頁面代碼編寫遠沒有我想的那樣複雜(可能是我做的這個項目比較簡單的緣故)。但是就入門來說,其實是蠻簡單的,我把他總結為一下幾個方面:特殊的meta标簽/百分百比布局寬度/rem設定字型大小/css3的使用。

好吧,讓我們開始吧,以下是移動web新手的淺見,老鳥請繞行,如有賜教不勝感激。

1.特殊的meta标簽;

因為現在我們用的智能手機(iOS,Android)的浏覽器都是基于webkit核心,這裡有一些針對webkit的特殊meta标簽,在開發移動端web是起到很重要的作用:

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

強制讓文檔的寬度與裝置的寬度保持1:1,并且文檔最大的寬度比例是1.0,且不允許使用者點選螢幕放大浏覽;

<meta content="yes" name="apple-mobile-web-app-capable" />

複制代碼

iphone裝置中的safari私有meta标簽,它表示:允許全屏模式浏覽;

<meta content="black" name="apple-mobile-web-app-status-bar-style" />

iphone的私有标簽,它指定的iphone中safari頂端的狀态條的樣式;

<meta content="telephone=no" name="format-detection" />

告訴裝置忽略将頁面中的數字識别為電話号碼。

<meta content="email=no" name="format-detection" />

Android中禁止自動識别頁面中的郵件位址,iOS中不會自動識别郵件位址;

(注:由于webkit的浏覽器對于html5的支援比較好,是以我們在聲明頭部的時候最好用html5的聲明方式。當然如果你習慣了html4,那我隻能告訴你,還是先學學html5在接着看吧!)

2.百分百布局;

拿到設計師的640px(以iPhone4的比例做的設計稿)的設計稿後,我就嚴格的按照設計稿設定了各個子產品的高度/字号。接下來悲催的事情發生了,寫出來的頁面在手機上顯示的異常大。我傻了,這是嘛情況!後來咨詢專業人士才了解到,雖然iphone4的分辨率是960x640px,但是其螢幕的像素密度比較高,它的實際大小應該是減半的。是以在寫代碼時一切的高度/字号都要是設計稿的1/2。接着說百分比布局:

在做移動web頁面時,我們要用百分比布局來實作自适應螢幕寬度。有pc端web頁面開發經驗的同學就會知道,元素的盒子模型(不清楚的同學可以去w3school上查查)。

那我想要一個元素100%顯示,又必須有一個固定的padding-left/padding-right,還有1px的邊框,怎麼辦?

element{

        width: 100%;

        padding-left: 10px;

        border: 1px solid blue;

}

這樣編寫代碼必然導緻出現橫向滾動條,腫麼辦?要相信問題就是用來解決的。這時候偉大的css3為我們提供了box-sizing屬性,對于這個屬性的具體解釋不做贅述(想深入了解的同學可以到w3school檢視,要知道自己動手會更容易記憶)。讓我們看看如何解決上面的問題:

        box-sizing:border-box;

        -webkit-box-sizing:border-box;

好的,問題被解決了!

3. rem設定字型大小;

px:就是css中最基本的長度機關了,用px做機關基本上沒什麼問題,可以做到讓頁面按套路精确的展現。但是,(聽到但是的時候是不是突然有些不适,就像每次開發的同學喊我的時候,我的潛意識會告訴自己,壞了又出bug了!!)如果全篇用px布局會暗藏一個問題,就是當使用者和Ctrl滾頁面的時候(說白了就是ctrl+,ctrl-),你會發現頁面結構産生了不可預知的錯亂,是以有磚家倡導使用em替代px。

em:em是相對機關,em相對的基準點就是浏覽器的字型大小(浏覽器預設字型為16px),是以1em預設等于16px。那麼14px=0.875em; 公式是14/16=0.875em。用em來寫的話,就可以解決ctrl+,ctrl-時造成的頁面錯亂問題。

可是,問題又來了,em準确的說是相對于父節點的字号來計算的,如果自身定義了字号那麼就相對自身字号來計算,舉例如下:

html { font-size: 100%; }

.box-0 {

    height: 1em; /* 此時height等于16px */

.box-1 {

    font-size: 0.625em; /* 此時基準字号以變更為16*0.625=10px */

    height: 1em; /* 此時實際height等于10px */

看明白了吧,1em并不是一個固定不變的值,再加上數學是體育老師教的,這不是自作孽嗎。沒關系,css3為我們引入一個新的機關就是rem可以解決這個問題。

rem:rem和em一樣也是一個相對機關,為了友善了解,我們就了解rem為root em,顧名思義rem隻相對跟節點<html>計算,這就是說隻要在根節點設定好參考值,那麼全篇的1rem都相等,計算方式同em,預設1rem=16px; 同理你可以設定html { font-size:62.5% } 那麼1rem就等于10px,以此類推 …(當然萬惡的ie678不支援rem,但是還好我們在做的是移動端web頁面)

4.使用css3;

做這種高大上的移動web頁面怎麼能少的了css3。不過平時css3用的比較少,這裡記下幾個我在這個項目中用到的css3屬性。更深入的親們自己去學咯。同樣,這裡不對屬性做贅述,放着強大的w3school不用,我隻能對你說:藥不能停啊!:

A.圓角(這個太常用了)

        -moz-border-radius: 3px;

        -webkit-border-radius: 3px;

        border-radius: 3px;

B.漸變(這個在做按鈕的時候很常用)

        background-image: -moz-linear-gradient(top, #2288cc, #389de2); /* Firefox */

        background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #389de2), color-stop(1, #2288cc)); /* Saf4+, Chrome */

C.去掉手持裝置點選時出現的透明層 (一般會在頭部做格式化)

a,button,input{

        -webkit-tap-highlight-color: rgba(0,0,0,0);

        -webkit-tap-highlight-color: transparent; /* For some Androids */

在應用了此屬性時,連結的active屬性會實效,解決的方法是,在頁面unload時運作document.addEventListener("touchstart", function(){}, true);使active狀态可用。(注:在小米系統下,點選連結仍然會出現紅色的邊框,各位同學如有解決方法,請賜教,不勝感激。)

D.改變盒子模型(上面已講過)

5.關于調試;

好了,有了上面的知識,我們就可以寫一個移動的頁面了。但不要太樂觀了,我們要怎麼調試呢?難道每寫一個頁面就發一次伺服器,然後用手機通路測試環境!當然不需要那麼麻煩,如果是用pc機的同學,可以用一個本地localhost工具調試(這次就不要各位自己動手了,附送上我自己用的工具。用法很簡單,把所有的頁面放到一個檔案夾中,頁面放在根目錄下,工具也放在跟目錄下,把你要調試的頁面改成index.html。當然如果你有好幾個頁面,最好還是做一個index頁面。啟動調試器,用手機通路你電腦的ip,要保證手機所用的wifi和pc的網絡在一個網段)。用mac的同學就到網上找一篇localhost的配置方法,開啟以下這個功能就可以通路了。

繼續閱讀