|
如今大熱的HTML5到底美在哪里?HTML5到底能為實(shí)際的移動(dòng)開發(fā)帶來哪些改變?來自阿里云云手機(jī)服務(wù)運(yùn)營(yíng)部的前端開發(fā)工程師正邪 (廖健)分享了他眼中的HTML5之美,主要講訴HTML5的常見原理并從CSS、JavaScript和框架三個(gè)方面做了細(xì)致講解:
說到HTML5一般都會(huì)提到它新增了一些新的標(biāo)簽,這些標(biāo)簽?zāi)軌驕p少文檔的大小,也可以節(jié)省一些CSS定義,但是這個(gè)好處不足以說明HTML5在技術(shù)變革上帶來的影響,我們還是先要明白HTML5的原理到底是怎樣的,它帶來的變革為什么會(huì)這么大?
常見的原理
HTML5的產(chǎn)生以及它的設(shè)計(jì)完全是遵循了一些常見的原理,這些原理在李松峰老師的博客上有詳細(xì)地闡述。
首先第一條原理是:發(fā)送時(shí)保守、接收時(shí)開放。
作為工程師,發(fā)送給瀏覽器的文檔應(yīng)該盡量的嚴(yán)謹(jǐn),但是瀏覽器作為接收方,應(yīng)該持有一個(gè)開放的姿態(tài),而不會(huì)因?yàn)槟硞€(gè)文檔有問題,到瀏覽器窗口里面就不顯示了,只是留下一片空白給用戶。既然HTML存在標(biāo)簽沒有正常閉合的可能性,也存在屬性丟失的情況,只要文檔沒有產(chǎn)生二義性,瀏覽器應(yīng)該猜測(cè)到最終的行為并做出正確處理,在技術(shù)層面瀏覽器有理由這么做。
第二,避免不必要的復(fù)雜性。
我們?cè)诰帉懙腍TML的時(shí)候,可能會(huì)定義一個(gè)很長(zhǎng)很長(zhǎng)的文檔類型聲明,這個(gè)文檔類型聲明是給瀏覽器看的,如果能夠簡(jiǎn)化它,在創(chuàng)作的時(shí)候就能省下一些時(shí)間,而且也不用浪費(fèi)力氣去記那些難記的字符。實(shí)際上,省略大多數(shù)字符,瀏覽器也能按照我們期望的那樣去運(yùn)行。
還有script標(biāo)簽,我們可能會(huì)設(shè)置它的type為“text/Javascript”,實(shí)際上也是不必要,如果type屬性沒有被聲明,默認(rèn)就按JavaScript處理。類似的東西有很多,在文檔里面能省掉的我們就應(yīng)該大膽地省掉,這樣不僅是在創(chuàng)作這個(gè)文檔的時(shí)候,能夠給我們帶來這些方便,而且在共同維護(hù)的時(shí)候也能帶來一些益處。
第三,網(wǎng)絡(luò)價(jià)值同達(dá)到網(wǎng)絡(luò)用戶數(shù)量的平方成正比。
現(xiàn)在HTML5這么火,很多人就拿它跟Flash去做對(duì)比,說Flash多么多么爛,說HTML5多么多么好。實(shí)際上我們創(chuàng)作的內(nèi)容最后是給用戶去看的,如果這個(gè)東西用戶覺得好,不管用什么技術(shù)我覺得都是次要的。
最后我們要的是將服務(wù)推送到用戶面前,而不是要說某種技術(shù)多么好,可以殺死另一個(gè)技術(shù)。實(shí)際上在這里,它們的協(xié)同工作才是符合HTML5的設(shè)計(jì)思想,在這個(gè)層面上我覺得Flash也是HTML5中的一員。
第四,大多數(shù)人的意見和可運(yùn)行的代碼。
沒有HTML5規(guī)范的時(shí)候,瀏覽器廠商可以各自為陣,可以加入了自己的標(biāo)準(zhǔn),雖然這些標(biāo)準(zhǔn)不是W3C制定的,但是大多人都有這些需求,它們能解決實(shí)際問題。所以也刺激W3C加入到這些標(biāo)準(zhǔn)的制定中去。
技術(shù)細(xì)節(jié)
CSS
有位測(cè)試工程師報(bào)了個(gè)bug給開發(fā)工程師。說頁面上的單選框樣式太難看了,建議改一下,換個(gè)顏色。開發(fā)工程師當(dāng)時(shí)就暈倒了,說這個(gè)是瀏覽器默認(rèn)的,改不了。改不了怎么辦?只能把bug打回去。
基于CSS3的特性,現(xiàn)在完全可以改變?yōu)g覽器控件的默認(rèn)外觀。
然后是布局。改變樣式是CSS的強(qiáng)項(xiàng),也是它的職責(zé)所在。我們可以使用百分比做彈性布局。現(xiàn)在設(shè)備比較多,有iPad、iPhone、還有其各種屏幕尺寸的安卓,假如我想用HTML5的技術(shù)做一個(gè)應(yīng)用,適用于所有平臺(tái),這個(gè)時(shí)候百分百肯定是不夠的,而精準(zhǔn)的彈性布局又顯得很重要。
CSS3有一個(gè)box-flex的屬性,假設(shè)有個(gè)容器,里面有三個(gè)div,在設(shè)置了margin的同時(shí)將它們的box-flex設(shè)置成1,看到的效果就是三個(gè)元素均等分,我還可以改變它的比例,比如將第一個(gè)元素固定寬度,剩下的兩個(gè)元素也可以均等分。除了從左往右布局,使用cloumn-count可以做到從上往下布局。
box-flex可以解決一部分屏幕適配的問題,如果想做到更精準(zhǔn)的布局,比如說在小屏幕下的布局是一個(gè)樣子,大屏幕下可能加入了更多的元素,或者更復(fù)雜了,甚至大小、顏色、位置都變了。這個(gè)時(shí)候可以使用Media Queries的技術(shù)。我們可以先定義某個(gè)樣式,然后在某種屏幕上面覆蓋默認(rèn)樣式,或者完全使用另一套樣式。
除了CSS3這些奇妙的屬性,用它來設(shè)計(jì)一些復(fù)雜背景也是非常適合的。這里有一個(gè)我同事開發(fā)的Chrome插件叫Coda Cola,他還為這個(gè)插件做了一個(gè)分享的網(wǎng)站。別人根據(jù)這個(gè)插件,做出了一些比較酷的CSS效果,可以再分享出來。
JavaScript
說了CSS3,再說說JavaScript。大家說JavaScript美嗎?好像我們對(duì)它的印象也不是很好。不僅前端,后端對(duì)JavaScript的印象也好不到哪去,甚至?xí)愀狻?/p>
首先它的執(zhí)行效率比較慢。
然后它的API接口比較爛,比如我要查找某個(gè)元素,可以用getElementById,getElementsByTagName, 這么一長(zhǎng)串。除了很長(zhǎng),我還要把第三個(gè)參數(shù)指定為false。現(xiàn)在做應(yīng)用的話,我們一般都會(huì)選擇用框架來幫助自己進(jìn)行開發(fā),從那些復(fù)雜的語法中解脫出來。
再者,JavaScript調(diào)試比較困難,JavaScript邊解釋變執(zhí)行,代碼一多,方法之間的調(diào)用層級(jí)變深,如果出錯(cuò),就很難定位到錯(cuò)誤所在。特別是在沒有firebug等調(diào)試工具之前,找錯(cuò)誤有時(shí)候就跟做噩夢(mèng)一般。JavaScript雖然有這么多弊病,但是它現(xiàn)在還在快速發(fā)展。到現(xiàn)在,我們有很多種的框架可以選擇,這里面肯定有大家喜愛的框架。但在HTML5到來的時(shí)刻,我們有一些更好的選擇。比如說做元素查找,以前可能用到框架,現(xiàn)在不用框架,使用原生的API也可以很方便地做到。這是第一點(diǎn),就是有些功能不再需要框架做支持了。
第二,JavaScript中加入一些新的特性,比如說LocalStorage。沒有LocalStorage的時(shí)候,我們可以使用Cookie在客戶端記錄一些用戶相關(guān)的數(shù)據(jù),但是Cookie記錄的容量有限,而且HTTP請(qǐng)求會(huì)攜帶cookie數(shù)據(jù)。在需要保存大量數(shù)據(jù)或者設(shè)計(jì)離線應(yīng)用的時(shí)候,LocalStorage就非常有用了,LocalStorage的容量比較大,在移動(dòng)平臺(tái)上,至少有2M的存儲(chǔ)空間。
框架
雖然說有了一些原生的API,也有了一些新的功能,但是在開發(fā)的時(shí)候,我們還是要借助一些框架來提高工作效率。有一個(gè)叫Zepto的框架,是我們?cè)陧?xiàng)目中經(jīng)常會(huì)用到的框架。它的API幾乎跟jQuery一樣,跟jQuery相比,Zepto去除了一些移動(dòng)平臺(tái)上不必要的代碼。除此之外,它還支持了tap、swipe等手勢(shì)。 在移動(dòng)平臺(tái)上,我們也可以使用Canvas技術(shù)做一些游戲。
在移動(dòng)互聯(lián)網(wǎng)上,手機(jī)跟PC有一些特征上的差異。用到手機(jī)特有的功能,我們可以做一些很有意思的東西。比如說我想獲得地理定位,還有傳感器、查詢通訊錄、拍照,這些都是手持設(shè)備特有的功能,雖然W3C有制定這些API的規(guī)范,但是目前沒有瀏覽器已經(jīng)完整實(shí)現(xiàn)。如果使用PhoneGap的話,我們就能使用到這些API了。
我這里有一個(gè)視頻,演示的是使用PhoneGap做的一個(gè)指南針應(yīng)用。我在Chrome上裝了一個(gè)叫Ripple的插件,它是一個(gè)PhoneGap模擬器插件。裝好這個(gè)插件之后,就可以在瀏覽器上進(jìn)行中開發(fā)了,這個(gè)插件模擬了設(shè)備的大小和外觀,并且加入了device特性的調(diào)試環(huán)境。在界面上,左右都有很復(fù)雜的控件,操作它們可以模擬device特性。就這樣一個(gè)應(yīng)用,只需要大概20行代碼。
然后打包也很簡(jiǎn)單,PhoneGap官方有個(gè)在線的打包工具,它架設(shè)在Amazon云計(jì)算平臺(tái)上,我們只需要把源代碼的zip包傳上去,然后就能下載打包好的應(yīng)用程序安裝文件。
所以說,使用HTML5技術(shù)做一個(gè)安卓應(yīng)用真的是非常簡(jiǎn)單,基于PhoneGap,可以連SDK也不用下,并且能做到直接開發(fā)、打包,不過一臺(tái)安卓手機(jī)還是需要的,因?yàn)槲覀冞€是需要部署上去看看真實(shí)效果。
it知識(shí)庫:HTML5之美,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。