最好的閱讀是輸出。 –玉伯css
即將開始涉入移動Web了,有點小興奮也有點小緊張,但願能在將來的團隊裏帶來一些價值。記錄一下我如今所認識的移動Web。html
原文摘自個人前端博客,歡迎你們來訪問前端
原文地址:http://www.hacke2.cn/hello-mobile-aop/jquery
初涉移動Web,會有一些基本的名稱須要掌握,什麼設備像素比呀,移動端Web的內核呀,viewport呀,屏幕的的最小物理單位呀。我已經記錄了一些,之後還得繼續補充。css3
咱們來看看移動端最多見的佈局:git
下面實現上述頁面常見移動Web佈局三種方法:web
對於第一種佈局,其實現原理就是header和footer部分都爲fixed定位。內容頁面可使用-webkit-overflow-scrolling:touch
來進行滾動,固然,對於不支持的,也可使用iscroll來兼容。 fixed佈局網上人說坑太多,滾動的時候bug太多,特別是表單元素時彈出輸入法會有不少問題,因此不建議使用,如下是一些網上參考的資料:canvas
和fixed同樣,只不過將fixed定位設爲絕對定位。設定其left,right等值。下面有一個絕對定位的DEMO。瀏覽器
flexbox佈局我估計是仿照flex*佈局方式。因爲主流移動端都使用的現代瀏覽器都支持這個CSS3屬性。Flexbox佈局俗稱伸縮佈局,它能夠簡單快速的建立一個具備彈性功能的佈局。因爲移動多終端的需求,因此首選是flexbox。
以前提到的常見移動Web名詞,設備像素比:2的高清視網膜技術卻會使圖片變得模糊,這是爲何呢?
根據計算公式,一個像素點會被拆分紅4個小點,顯示起來天然模糊了。
解決方案通常有兩個:
1.設置target-densitydpi=device-dpi
,採用按照真實比例來展現,而後進行媒體查詢技術以下面代碼:
#header { background:url (medium-density-image.png); } @media screen and (- webkit -device-pixel-ratio:1.5) { /* CSS for high-density screens */ #header { background:url (high-density-image.png);} } @media screen and (- webkit -device-pixel-ratio:0.75) { /* CSS for low-density screens */ #header { background:url (low-density-image.png);} }
這樣有一個弊端就是:須要爲每一種分辨率書寫單獨的代碼。
另外,多張圖片的顯示能夠進行canvas
的繪製,進行GPU
渲染。。
background-size設置爲高度,自適應寬度100%,這也是CSS3的屬性。
px單位
傳統PC端經常使用的px來設置大小。由於他比較穩定和精確。
em單位
瀏覽器中放大或縮放瀏覽頁面時會存在一個問題,由於字體大小是固定了的。要解決這個問題,咱們可使用「em」單位。 em有以下特色:
rem單位
rem
是CSS3的屬性,和em
同樣,他的值是不固定的。區別在於他參考的是一個根元素的肯定值。em
是相對於其父元素來設置字體大小的,這樣就會存在一個問題,進行任何元素設置,都有可能須要知道他父元素的大小,在咱們屢次使用時,就會帶來沒法預知的錯誤風險。而rem是相對於根元素html
,這樣就意味着,咱們只須要在根元素肯定一個參考值。
在瞭解了px,em,rem的區別後,咱們能夠進行以下設置:
html { font-size: 62.5%; } body { font-size: 14px; font-size: 1.4rem; }
咱們在寫大小的時候經過一些簡單的計算就能夠了,好比的拿到的設計稿有一一部分爲18px的文字,那咱們在寫代碼的時候就能夠寫:
p : {font-size:18px;font-size:1.8rem}/*(1.8 x 10=18)*/
在移動端不用過多考慮平臺端的兼容性,完成動畫也是藉助CSS3的動畫來實現。
在我看來,移動端動畫優先選擇爲如下順序:
transition > Animation > js
並且最好使用translate3d強制設備進行GPU
渲染,但也不能過分使用。 咱們可使用CSS3動畫庫animate.css玩完成常見的動畫。更多關於CSS3動畫的能夠參考:
移動端原生的最重要的事件touch
:
其中,他們之間觸發的前後順序爲:
touchstart > touchmove > touchend > click
移動端click會延遲300ms,緣由是他在等待判斷是否是雙擊。固然,如今的一些框架解決了這個問題:
用這幾個事件能夠衍生出不少事件,好比左滑右滑,上下滑屏,放大,縮放等。詳情能夠看指尖上的JS系列。
如今已經有一些封裝了的框架:
固然還有其餘移動端專屬的事件,好比:
我用原生JS模仿了神馬搜索搜出美團後的信息輪播:
移動端有一些較爲成熟框架:
一些公司也有本身的框架
但更多公司選擇使用一些基礎的類庫本身封裝一些常見的交互,畢竟在移動端上流量真的是寸土必爭。好比神馬搜索用的是zepto.js。經過gzip壓縮後只有幾k,並且風格與JQ如出一轍,無學習成本。
固然還有些爲工具框架