Android2.3的overflow問題
在android2.3及以下系統版本的瀏覽器不支持overflow:scroll / auto,即在頁面元素里面的內容如果超過了父元素或祖先元素的高度是無法滾動的,可以通過css3的transform來實現滾動,代表作:iscroll。
Android2.3的聚焦問題
Android2.3會出現點擊聚焦的情況,出現黃色的邊框,通過對相應的元素設置css –webkit-tap-highlight-color: rgba(0,0,0,0)解決,另外一些高版本的系統也可能會出現有黃色邊框的情況,這時候試着用outline:none來解決。
Android2.3 position:fixed及input中文輸入bug
在android2.3系統中,如果頁面中有position為fixed的元素,input外層的元素定位為relative或者自身的定位為relative,就會產生一種奇怪的現象,在input中輸入數字或者字母都很正常,當切換輸入法為中文后,發現無法輸入,當把position設置為absolute后一切正常,所有當遇到這種情況時就只能改變布局了。
Android2.3 border-radius問題
不支持百分比,可用一個比較大的值 如: 9999px。
Android2.3 動畫問題
@-webkit-keyframes wave1{0%{ opacity:0;}8.33%{ opacity:1;}99%{opacity:1;}100%{}}
100%要留一幀空出來。在100%之前寫一個最后值 99%那里寫。2.3系統的動畫才會動。
Android2.3漸變問題
漸變這樣寫2.3才兼容:
background:-webkit-gradient(linear,00,0100%, color-stop(1%,rgba(111,191,7,0)), color-stop(74%,rgba(111,191,7,0)), color-stop(75%,rgba(111,191,7,0.9)), color-stop(100%,rgba(111,191,7,0.9)));
Linear是指漸變方式,0 0指從哪個方向開始。0 0 到 0 100% 說明是從上到下漸變。 后面的color-stop 可以指定百分比和顏色值。
Android4.0及低版本系統touch事件bug
在android4.0系統中,存在部分子版本的系統有touch事件的bug,表現為touchstart是正常的,touchmove只有在touchstart觸發的時候觸發一次,touchend不會被觸發,android2.3會觸發startmove一次,當touch結束后會執行剩余的move和end。在zepto庫中此問題也沒有得到解決,在android4.2系統中也存在這樣的問題,后來發現是瀏覽器將事件cancel調了,目的應該是防止在滾動頁面的時候調用,所以在touchmove事件中添加e.preventDefault(),發現touchend被觸發了,所以解決方案根據實際使用場景來進行處理。
Android4.X placeholder問題
placeholder 文字字體會偏上。 但是placeholder只能設置他的color。如:
input::-webkit-input-placeholder{ color:red;}
行高不能設置。這時候把line-height設成normal 就能上下居中了。
各個系統對position:fixed的支持情況
手機Safari – iOS5及以后版本都支持. iOS4及以下版本不支持,會當做static處理.
Android
- Android 2.1 及以下版本不支持.
- Android 2.2 滾動過程中不保持fixed的位置,滾動完成后回到fixed的位置.
- Android 2.3 支持fixed, 但是要求頁面禁止縮放.
- Android 3和4支持fixed.
Touchstart, click, tap事件分析
在移動端我們會經常用到touch事件,touchstart事件很靈敏,所有如果要綁定類似於pc端的click事件,用touchstart會經常的誤操作,例如滾動頁面的時候被誤點,所有市面上有很多手勢庫,封裝出了tap等方面,而在移動端click事件也是可以觸發的,click事件會在點擊300ms左右出發(原因是瀏覽器希望判斷是否是雙擊),原始的解釋參見google這篇[Creating Fast Buttons for Mobile Web Applications](Creating Fast Buttons for Mobile Web Applications),個人經過實驗,頁面元素的點擊可以考慮用click,和tap效果無明顯差別,所以在沒有手勢庫的情況下可以考慮用click來處理用戶的點擊行為。
禁用webkit瀏覽器默認樣式
webkit上的input,button,及select的默認樣式可以通過 –webkit-appearance:none禁用,然后自定義。
Placeholder自適應bug
一個placeholder自適應bug,頁面中使用<input>
標簽並且有屬性placeholder,在頁面橫屏再轉回豎屏時,會導致頁面無法自適應,無論是android還是ios都會中招。
解決方法是,在<input>
外層容器中加overflow:hidden
無刷新改變當前頁面url的問題整理
Android 2.3系統存在的問題:
- 無刷新改變當前頁面url。不支持onpopstate方法,可用onhashchange方法代替。
- 雖然支持history的pushState方法和window.onpopstate方法。但是按回退鍵,即發生history.back()的時候,不會觸發window.onpopstate方法。只會觸發hashchange事件。
瀏覽器對popstate事件的整體支持情況:
- history的pushState可操作瀏覽器歷史,並且改變當前頁面的URL。添加對應的url到歷史記錄里。但是用pushState方法會產生歷史記錄,可用replaceState方法代替,不會產生額外的歷史記錄。
- hashchange 和popstate事件 觸發的時候,hash已經改變了,無法阻止默認行為。即e.preventDefault()不起作用。
- pushState()方法永遠不會觸發hashchange事件
- popstate方法的觸發條件:
* 頁面前進、后退時觸發。
* Hashchange時觸發
5. 如何跳轉
* 如果history堆棧里有pushState過,那么就回跳到pushState所定的hash頁面。如window.history.pushState(‘object’, document.title, “#explorer”);的#explorer頁面
* 沒有pushState過,就按照history的記錄進行回退和前進。
Iscroll插件問題
Iscroll插件被很多webapp應用中來實現列表滾動,設置translate屬性可以使滾動更加順滑,但是在iscroll4.0中開啟了translate屬性后會導致滾動無法手動停止,在問答社區中有人說iscroll5會解決這個問題,等iscroll5正式發布后可以嘗試一下。Iscroll在ios上表現很出色,但是在一些android手機,尤其是低端機,性能不是很好,所以使用也要慎重。
資源分享(來自網絡)
推薦一個PPT可以讓你全面了解HTML5:http://slides.html5rocks.com/
HTML部分包括大家已經熟知的HTML4.01 Standard http://www.w3.org/TR/html401/還有就是即將成為Standard的 HTML 5 Candidate Recommendation http://www.w3.org/TR/html5/
HTML5 是在 HTML4的基礎上增加了更多的語義化標簽,比如:
<header>
<nav>
<section>
// 這有太多了,就不一一細說
並且在原有Tag上,擴展了更多的標記屬性,比如:
<input type="text" required />
<input type="email" value="some@email.com" />
HTML5除此之外,還引入了很多新的標簽和屬性,比如:WebApp開發方向的progress、無障礙瀏覽ARIA 、做SEO優化Microdata等等。
CSS部分也是同樣的,大家已經熟知的CSS2 Standard
W3C最新的是CSS Level3 標准,由於CSS3包含的內容非常多,文檔都是分開的,暫時沒辦法給出所有的標准地址,先貼一部分常用的標准吧:
JS部分對於HTML5來說主要體現在 Web API 方面,所有 API 都是 BOM對象,下面我也列出一些常見的標准地址:
通過上面的內容,大概已經了解HTML5是個什么東西了,下面就來說說HTML5開發APP可以使用的一些資源。其實HTML5開發與以往的Web並沒有本質的區別,主要差別體現在HTML5的一些新特性並沒有被老舊類庫很好的支持,這樣就需要一些更現代的類庫來使用HTML5做開發。
JS庫/框架
輕量級庫包括
Zepto.js 這個一個在移動端很好用的輕量級庫,非常小巧,但是功能也很簡單;
jQuery 2.0這里說的是2.0以后的版本,僅支持一些高級瀏覽器,使用很多HTML5的特性,雖然在移動端開發體積相對zepto較大了些,但是作為一個基礎庫來說確實令人愛不釋手;
App框架(下面的框架不僅僅只能用來移動端開發)
jQuery Mobile 和jQuery是一樣的編程思想,使用起來非常方便,包含瀏覽歷史管理、視圖導航渲染、UI組件等功能;
App Framework與jQuery Mobile非常相似的一個框架,實際我也沒有使用過,看過了API,基本與jQuery Mobile類似;
Sencha Touch Sencha的產品,是完全web組件化的思路,用來做企業應用開發非常的棒,但是,也有很多缺點,比如體積、復雜、性能等等;
MVC框架
Backbone MVC框架推薦Backbone,並不是因為Backbone有多好,但對於移動端開發來說,Backbone的體積是相對小巧的,並且功能也十分簡單,很容易上手,AngularJS體積較大,相對要復雜一些;
UI框架
Bootsrap 3 ,用來構建HTML/CSS的;
Pure CSS 與Bootstrap一樣的東東;
工具庫(說到工具,實在是太多了,我沒辦法一一列出來,視乎到這的時候才離題主的問題近了一些)
iScroll 模擬區域滾動,在移動端開發中使用
pointer.js 觸摸手勢工具,用來兼容Pointer Event Model與Touch Event Model;
Deeptissue.js觸摸手勢工具,擴展各種手勢事件
QUO.js 同上
hammer.js 也是手勢工具,但這是一個jQuery plugin;
spin.js 加載中動畫小工具
css3patterns使用css3繪制背景
svgpatterns使用svg繪制背景
textillate.js各種文字動畫效果
Effeckt.css各種CSS3的動畫效果
JPlayer 音視頻播放工具