【原】webapp開發中兼容Android4.0以下版本的css hack


話說現在的手機型號越來越多,主要還是android和ios這2個巨頭稱霸了江湖,而他們自帶的瀏覽器內核是webkit,那對於做移動網頁開發的同事來說,一般只要做好webkit內核瀏覽器的展現效果就行了,看起來很簡單,其實背后還有一個大坑等着你。

雖說是webkit內核,但頁面的展現效果還會受到自身系統的影響,升級后的系統打了補丁,新增了新的屬性,支持更多豐富炫麗的效果,那么舊的系統(未升級的)就不支持一些新的屬性,開發哥哥就是沒有做好低端版本兼容的話,就會產生所謂的bug的,再加上android和ios系統各個版本也會帶私有屬性或者少帶某個屬性,於是坑爹的東西就這樣產生,各種奇葩的bug,仿佛又回到IE時代,還是上次在文章(使用iScroll.js解決ios4下不支持position:fixed的問題)中的那句話:回到頭來我們還是乖乖去做好兼容,要么就找到完美的解決方案,誰讓可愛的用戶和親愛的老板是上帝呢,於是,我們淪落為苦逼的攻城獅~

幾個月前寫過一篇文章:[webkit移動開發筆記]之如何去除android上a標簽產生的邊框,在android2+的版本中,按鈕邊框會產生bug,需要清除掉,解決方案如下:

a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0);}/* 1.去除android a/button/input標簽被點擊時產生的邊框 2.去除ios a標簽被點擊時產生的半透明灰色背景 */

大家在注釋中可以看到,ios被點擊時產生的半透明灰色背景會被這個屬性也清除掉,沒有了效果,用戶體驗一般,這個時候我們要保留android4+的邊框和ios系統的半透明灰色背景顯示正常,那么我們標題中的問題來啦,如何讓頁面只兼容android4.0以下版本的系統,無需JS也可以做到,有木有!!!

在CSS3的兼容中,相信大家對使用media的兼容並不陌生,我之前也提到過很多次,那么今天使用的hack也是跟它離不開的,代碼如下:

@media all and (-webkit-transform-3d){/* Android4.0下不識別該-webkit-transform-3d,使用它可做Android4.0下版本兼容 */
.css{...}
}

這里利用-webkit-transform-3d屬性,因為Android4.0下不識別該選擇器,瀏覽器解析代碼時,會直接跳過此步驟,那么我們簡單寫下代碼,就是做好對Android4.0以下版本的兼容啦!

測試例子:http://jsbin.com/aziyor/1

測試代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>webapp開發中兼容Android4.0下版本的css hack</title>
<style type="text/css">
body{color:red}
@media all and (-webkit-transform-3d){
.green{color:green}
}
</style>
</head>
<body>
  <h1 class="green">android4.0+和ios瀏覽器中,我是綠色的;android4.0以下瀏覽器中,你會看到我是紅色的</h1>
</body>
</html>

android4.0+和ios瀏覽器中效果圖:

android4.0以下瀏覽器中效果圖:

ok,本篇文章結束,感謝公司某同事提供的兼容辦法,寫出來共享,希望好的東西能夠幫助到更多的朋友,解決大家的困擾~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM