什么是輕APP?
什么是Web App:
1、開(kāi)發(fā)成本較低。使用web開(kāi)發(fā)技術(shù)就可以輕松的完成web app的開(kāi)發(fā)。
2、升級較簡(jiǎn)單。升級不需要通知用戶(hù),在服務(wù)端更新文件即可,用戶(hù)完全沒(méi)有感覺(jué)。
3、維護比較輕松。和一般的web一樣,維護比較簡(jiǎn)單,它其實(shí)就是一個(gè)站點(diǎn)。
Native App:
1、更新體驗較差、同時(shí)也比較麻煩。每一次發(fā)布新的版本,都需要做版本打包,且需要用戶(hù)手動(dòng)更新(有些應用程序即使不需要用戶(hù)手動(dòng)更新,但是也需要有一個(gè)惡心的提示)。
2、非???。因為native app可以調用IOS中的UI控件以UI方法,它可以實(shí)現WebApp無(wú)法實(shí)現的一些非??岬慕换バЧ?。
3、Native app是被Apple認可的。Native app可以被Apple認可為一款可信任的獨立軟件,可以放在A(yíng)pple Stroe出售,但是Web app卻不行。
Webapp說(shuō)白了就是一個(gè)針對Iphone、Android優(yōu)化后的web站點(diǎn),它使用的技術(shù)無(wú)非就是HTML或HTML5、CSS3、JavaScript,服務(wù)端技術(shù)JAVA、PHP、ASP。
當然,因為這些高端智能手機(Iphone、Android)app開(kāi)發(fā)的內置瀏覽器都是基于webkit內核的,所以在開(kāi)發(fā)WEBAPP時(shí),多數都是使 用 HTML5和CSS3技術(shù)做UI布局。當使用HTML5和CSS3l做UI時(shí),若還是遵循著(zhù)一般web開(kāi)發(fā)中使用HTML4和CSS2那樣的開(kāi)發(fā)方式的話(huà),這也就失去了WEBAPP的本質(zhì)意義了,且有些效果也無(wú)法實(shí)現的,所以在此又回到了我們的主題–webapp的布局方式和技術(shù)。
在此所說(shuō)的移動(dòng)平臺前端開(kāi)發(fā)是指針對高端智能手機(如Iphone、Android)做站點(diǎn)適配也就是WebApp,并非是針對普通手機APP開(kāi)發(fā) Wap 2.0,所以在閱讀本篇文章以前,你需要對webkit內核的瀏覽器有一定的了解,你需要對HTML5和CSS3有一定的了解。如果你已經(jīng)對此有所了解,那現在就開(kāi)始往下閱讀吧……1、首先我們來(lái)看看webkit內核中的一些私有的meta標簽,這些meta標簽在開(kāi)發(fā)webapp時(shí)起到非常重要的作用第一個(gè)meta標簽表示:強制讓文檔的寬度與設備的寬度保持1:1,并且文檔最大的寬度比例是1.0,且不允許用戶(hù)點(diǎn)擊屏幕放大瀏覽;第二個(gè)meta標簽是iphone設備中的safari私有meta標簽,它表示:允許全屏模式瀏覽;第三個(gè)meta標簽也是iphone的私有標簽,它指定的iphone中safari頂端的狀態(tài)條的樣式;第四個(gè)meta標簽表示:告訴設備忽略將頁(yè)面中的數字識別為電話(huà)號碼。
2、HTML5標簽的使用在 開(kāi)始編寫(xiě)webapp時(shí),哥建議前端工程師使用HTML5,而放棄HTML4,app開(kāi)發(fā)因為HTML5可以實(shí)現一些HTML4中無(wú)法實(shí)現的豐富的WEB應用程 序 的體驗,可以減少開(kāi)發(fā)者很多的工作量,當然了你決定使用HTML5前,一定要對此非常熟悉,要知道HTML5的新標簽的作用。比如定義一塊內容或文章 區域 可使用section標簽,定義導航條或選項卡可以直接使用nav標簽等等。
3、放棄CSS float屬性在項目開(kāi)發(fā)過(guò)程中可以會(huì )遇到內容排列排列顯示的布局(見(jiàn)下圖),假如你遇見(jiàn)這樣的視覺(jué)稿,哥建議你放棄float,可以直接使用4、利用CSS3邊框背景屬性這 個(gè)按鈕有圓角效果,有內發(fā)光效果還有高光效果,這樣的按鈕使用CSS3寫(xiě)是無(wú)法寫(xiě)出來(lái)的,當然圓角可以使用CSS3來(lái)寫(xiě),但高光和內發(fā)光卻無(wú)法使 用 CSS3編寫(xiě),這個(gè)時(shí)候你不妨使用-webkit-border-image來(lái)定義這個(gè)按鈕的樣式。-webkit-border-image就個(gè)很 復雜 的樣式屬性。
5、塊級化a標簽請保證將每條數據都放在一個(gè)a標簽中,為何這樣做?因為在觸控手機上,為提升用戶(hù)體驗,盡可能的保證用戶(hù)的可點(diǎn)擊區域較大。
6、自適應布局模式在 編寫(xiě)CSS時(shí),我不建議前端工程師把容器(不管是外層容器還是內層)的寬度定死。為達到適配各種手持設備,我建議前端工程師使用自適應布局模式(支付 寶 采用了自適應布局模式),因為這樣做可以讓你的頁(yè)面在ipad、itouch、ipod、iphone、android、 web safarik、 chrome都能夠正常的顯示,你無(wú)需再次考慮設備的分辨率。
7、學(xué)會(huì )使用上一節,我們說(shuō)過(guò)自適應布局模式,企業(yè)APP開(kāi)發(fā)有些同學(xué)可能會(huì )問(wèn):如何在移動(dòng)設備上做到完全自適應呢?很感謝webkit為display屬性提供了一個(gè)webkit-box的值,它可以幫助前端工程師做到盒子模型靈活控制。
8、如何去除Android平臺中對郵箱地址的識別看 過(guò)iOS webapp API的同學(xué)都知道iOS提供了一個(gè)meta標簽:用于禁用iOS對頁(yè)面中電話(huà)號碼的自動(dòng)識別。在iOS中是不自動(dòng)識別郵件 地 址的,但在A(yíng)ndroid平臺,它會(huì )自動(dòng)檢測郵件地址,當用戶(hù)touch到這個(gè)郵件地址時(shí),Android會(huì )彈出一個(gè)框提示用戶(hù)發(fā)送郵件,如果你不 想 Android自動(dòng)識別頁(yè)面中的郵件地址,你不妨加上這樣一句meta標簽在head 中9、如何去除iOS和Android中的輸入URL的控件條你的老板或者PD或者交互設計師可能會(huì )要求你:能否讓我們的webapp更加像nativeapp,我不想讓用戶(hù)看見(jiàn)那個(gè)輸入url的控件條?
答案是可以做到的。我們可以利用一句簡(jiǎn)單的javascript代碼來(lái)實(shí)現這個(gè)效果:
請注意,這句代碼必須放在window.onload里才能夠正常的工作,而且你的當前文檔的內容高度必須是高于窗口的高度時(shí),這句代碼才能有效的執行。
10、如何禁止用戶(hù)旋轉設備我曾經(jīng)也想禁止用戶(hù)旋轉設備,也想實(shí)現像某些客戶(hù)端那樣:只能在肖像模式或景觀(guān)模式下才能正常運行。但現在我可以很負責任的告訴你:別想了!在移動(dòng)版的webkit中做不到!
至 少Apple webapp API已經(jīng)說(shuō)到了:我們?yōu)榱俗層脩?hù)在safari中正常的瀏覽網(wǎng)頁(yè),我們必須保證用戶(hù)的設備處于任何一個(gè)方 位 時(shí),safari都能夠正常的顯示網(wǎng)頁(yè)內容(也就是自適應),所以我們禁止開(kāi)發(fā)者阻止瀏覽器的orientationchange事件,看來(lái)蘋(píng)果公司 的出 發(fā)點(diǎn)是正確的,蘋(píng)果確實(shí)不是一般的蘋(píng)果。
iOS已經(jīng)禁止開(kāi)發(fā)者阻止orientationchange事件,那Android呢?對不起,我沒(méi)有找到任何資料說(shuō)Android禁止開(kāi)發(fā)者阻止瀏覽器orientationchange事件,但是在A(yíng)ndroid平臺,確實(shí)也是阻止不了的。
11、如何檢測用戶(hù)是通過(guò)主屏啟動(dòng)你的看 過(guò)Apple webapp API的同學(xué)都知道iOS為safari提供了一個(gè)將當前頁(yè)面添加主屏的功能,按 下 iphoneipodipod touch底部工具中的小加號,或者ipad頂部左側的小加號,就可以將當前的頁(yè)面添加到設備的主屏,在設備的主屏會(huì ) 自動(dòng) 增加一個(gè)當前頁(yè)面的啟動(dòng)圖標,點(diǎn)擊該啟動(dòng)圖標就可以快速、便捷的啟動(dòng)你的webapp。從主屏啟動(dòng)的webapp和瀏覽器訪(fǎng)問(wèn)你的webapp最大 的區別 是它清除了瀏覽器上方和下方的工具條,這樣你的webapp就更加像是nativeapp了,還有一個(gè)區別是window對像中的 navigator子對 象的一個(gè)standalone屬性。iOS中瀏覽器直接訪(fǎng)問(wèn)站點(diǎn)時(shí),navigator.standalone為false,從 主屏啟動(dòng)webapp 時(shí),navigator.standalone為true, 我們可以通過(guò)navigator.standalone這個(gè)屬性獲知 用戶(hù)當前是否是從主屏訪(fǎng) 企業(yè)APP開(kāi)發(fā)問(wèn)我們的webapp的。在A(yíng)ndroid中從來(lái)沒(méi)有添加到主屏這回事!
12、如何關(guān)閉iOS中鍵盤(pán)自動(dòng)大寫(xiě)我 們知道在iOS中,當虛擬鍵盤(pán)彈出時(shí),默認情況下鍵盤(pán)是開(kāi)啟首字母大寫(xiě)的功能的,根據某些業(yè)務(wù)場(chǎng)景,可能我們需要關(guān)閉這個(gè)功能,移動(dòng)版本webkit 為 input元素提供了autocapitalize屬性,通過(guò)指定autocapitalize=“off”來(lái)關(guān)閉鍵盤(pán)默認首字母大寫(xiě)。
13、iOS中如何徹底禁止用戶(hù)在新窗口打開(kāi)頁(yè)面有 時(shí)我們可能需要禁止用戶(hù)在新窗口打開(kāi)頁(yè)面,我們可以使用a標簽的target=“_self”來(lái)指定用戶(hù)在新窗口打開(kāi),或者target屬性保持空, 但 是你會(huì )發(fā)現iOS的用戶(hù)在這個(gè)鏈接的上方長(cháng)按3秒鐘后,iOS會(huì )彈出一個(gè)列表按鈕,用戶(hù)通過(guò)這些按鈕仍然可以在新窗口打開(kāi)頁(yè)面,這樣的話(huà),開(kāi)發(fā)者指定 的 target屬性就失效了,但是可以通過(guò)指定當前元素的-webkit-touch-callout樣式屬性為none來(lái)禁止iOS彈出這些按鈕。這 個(gè)技 巧僅適用iOS對于A(yíng)ndroid平臺則無(wú)效。
14、iOS中如何禁止用戶(hù)保存圖片、復制圖片我們在第13條技巧中提到元素的-webkit-touch-callout屬性,同樣為一個(gè)img標簽指定-webkit-touch-callout為none也會(huì )禁止設備彈出列表按鈕,這樣用戶(hù)就無(wú)法保存\復制你的圖片了。
15、iOS中如何禁止用戶(hù)選中文字我們通過(guò)指定文字標簽的-webkit-user-select屬性為none便可以禁止iOS用戶(hù)選中文字。
16、iOS中如何獲取滾動(dòng)條的值桌 面瀏覽器中想要獲取滾動(dòng)條的值是通過(guò)document.scrollTop和document.scrollLeft得到的,但在iOS中你會(huì )發(fā)現這 兩 個(gè)屬性是未定義的,為什么呢?因為在iOS中沒(méi)有滾動(dòng)條的概念,在A(yíng)ndroid中通過(guò)這兩個(gè)屬性可以正常獲取到滾動(dòng)條的值,那么在iOS中我們該如 何獲 取滾動(dòng)條的值呢?
通過(guò)window.scrollY和window.scrollX我們可以得到當前窗口的y軸和x軸滾動(dòng)條的值。
17、如何解決盒子邊框溢出當 你指定了一個(gè)塊級元素時(shí),并且為其定義了邊框,設置了其寬度為100%。在移動(dòng)設備開(kāi)發(fā)過(guò)程中我們通常會(huì )對文本框定義為寬度100%,將其定義為塊級 元 素以實(shí)現全屏自適應的樣式,但此時(shí)你會(huì )發(fā)現,該元素的邊框(左右)各1個(gè)像素會(huì )溢了文檔,導致出現橫向滾動(dòng)條,為解決這一問(wèn)題,我們可以為其添加一個(gè) 特殊 的樣式-webkit-box-sizing:border-box;用來(lái)指定該盒子的大小包括邊框的寬度。