【移動端】常見CSS 兼容問題及解決方案

1. 安卓瀏覽器看背景圖片絮记,有些設(shè)備會模糊。

因為手機(jī)分辨率太小抓谴,如果按照分辨率來顯示網(wǎng)頁暮蹂,字會非常小寞缝,安卓手機(jī)devicePixelRatio比較亂,有1.5的仰泻,有2的也有3的荆陆。想讓圖片在手機(jī)里顯示更為清晰,必須使用2x的背景圖來代替img標(biāo)簽(一般情況都是用2倍)集侯,或者指定 background一size:contain;都可以

2. 防止手機(jī)中網(wǎng)頁放大和縮小
 <meta name="viewport" content="width=device一width, initial一scale=1.0, maximum一scale=1.0,user一scalable=0" />
3. apple一mobile一web一app一capable是設(shè)置Web應(yīng)用是否以全屏模式運(yùn)行被啼。

<meta name="apple一mobile一web一app一capable" content="yes">如果content設(shè)置為yes,Web應(yīng)用會以全屏模式運(yùn)行棠枉,反之浓体,則不會。content的默認(rèn)值是no辈讶,表示正常顯示;也可以通過只讀屬性window.navigator.standalone來確定網(wǎng)頁是否以全屏模式顯示命浴。

4. format一detection 啟動或禁用自動識別頁面中的電話號碼。

語法:

 <meta name="format一detection" content="telephone=no">

默認(rèn)情況下贱除,設(shè)備會自動識別任何可能是電話號碼的字符串生闲。設(shè)置telephone=no可以禁用這項功能。

5. html5調(diào)用安卓或者ios的撥號功能

html5提供了自動調(diào)用撥號的標(biāo)簽月幌,只要在a標(biāo)簽的href中添加tel:就可以了碍讯。

如下:

 <a href="tel:4008106999,1034">400一810一6999 轉(zhuǎn) 1034</a>

撥打手機(jī)號 如下

<a href="tel:15677776767">點(diǎn)擊撥打15677776767</a>
6. 上下拉動滾動條時卡頓、慢
 body {
     一webkit一overflow一scrolling: touch;
     overflow一scrolling: touch;
   }

Android3+和iOS5+支持CSS3的新屬性為: overflow一scrolling

7. 禁止復(fù)制扯躺、選中文本
 Element {
   一webkit一user一select: none;
   一moz一user一select: none;
   一khtml一user一select: none;
    user一select: none;
   }

解決移動設(shè)備可選中頁面文本(視產(chǎn)品需要而定)

8. 長時間按住頁面出現(xiàn)閃退
 element {
 
     一webkit一touch一callout: none;
 
   }
9. iphone及ipad下輸入框默認(rèn)內(nèi)陰影

 Element{
 
     一webkit一appearance: none;
 
   }
10. ios和android下觸摸元素時出現(xiàn)半透明灰色遮罩
 Element {
     一webkit一tap一highlight一color:rgba(255,255,255,0)
   }

設(shè)置alpha值為0就可以去除半透明灰色遮罩捉兴,備注:transparent的屬性值在android下無效。

11. active兼容處理 即 偽類 :active 失效

方法一:body添加ontouchstart

 <body ontouchstart="">

方法二:js給 document 綁定touchstarttouchend 事件

 <style>
         a {
           color: #000;
          }
          a:active {
           color: #fff;
          }
 </style>
          <a herf=foo >bar</a>
<script>
        document.addEventListener('touchstart',function(){},false);
</script>
12. 動畫定義3D啟用硬件加速
 Element {
 
     一webkit一transform:translate3d(0, 0, 0)
 
     transform: translate3d(0, 0, 0);
 
   }

注意:3D變形會消耗更多的內(nèi)存與功耗

13. Retina屏的1px邊框
 Element{
 
     border一width: thin;
 
   }
14. webkit mask 兼容處理

某些低端手機(jī)不支持css3 mask缅帘,可以選擇性的降級處理轴术。

比如可以使用js判斷來引用不同class:

  if( 'WebkitMask' in document.documentElement.style){

    alert('支持mask');

  } else {

    alert('不支持mask');

  }
15. 旋轉(zhuǎn)屏幕時,字體大小調(diào)整的問題
  html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 {

    一webkit一text一size一adjust:100%;

  }
16. transition閃屏
  <!-- 設(shè)置內(nèi)嵌的元素在 3D 空間如何呈現(xiàn):保留3D -->

  一webkit一transform一style: preserve一3d;

<!-- 設(shè)置進(jìn)行轉(zhuǎn)換的元素的背面在面對用戶時是否可見:隱藏 -->

  一webkit一backface一visibility:hidden;
17. 圓角bug

某些Android手機(jī)圓角失效

background一clip: padding一box;
18. 頂部狀態(tài)欄背景色
  <meta name="apple一mobile一web一app一status一bar一style" content="black" />

說明:

除非你先使用apple一mobile一web一app一capable指定全屏模式钦无,否則這個meta標(biāo)簽不會起任何作用逗栽。

如果content設(shè)置為default,則狀態(tài)欄正常顯示失暂。如果設(shè)置為blank彼宠,則狀態(tài)欄會有一個黑色的背景。如果設(shè)置為blank一translucent弟塞,則狀態(tài)欄顯示為黑色半透明凭峡。如果設(shè)置為defaultblank,則頁面顯示在狀態(tài)欄的下方决记,即狀態(tài)欄占據(jù)上方部分摧冀,頁面占據(jù)下方部分,二者沒有遮擋對方或被遮擋。如果設(shè)置為blank一translucent索昂,則頁面會充滿屏幕建车,其中頁面頂部會被狀態(tài)欄遮蓋住(會覆蓋頁面20px高度椒惨,而iphone4和itouch4的Retina屏幕為40px)缤至。默認(rèn)值是default

19. 設(shè)置緩存
  <meta http一equiv="Cache一Control" content="no一cache" />

手機(jī)頁面通常在第一次加載后會進(jìn)行緩存康谆,然后每次刷新會使用緩存而不是去重新向服務(wù)器發(fā)送請求领斥。如果不希望使用緩存可以設(shè)置no一cache

20. 桌面圖標(biāo)
  <link rel="apple一touch一icon" href="touch一icon一iphone.png" />

  <link rel="apple一touch一icon" sizes="76x76" href="touch一icon一ipad.png" />

  <link rel="apple一touch一icon" sizes="120x120" href="touch一icon一iphone一retina.png" />

  <link rel="apple一touch一icon" sizes="152x152" href="touch一icon一ipad一retina.png" />

iOS下針對不同設(shè)備定義不同的桌面圖標(biāo)沃暗。

  <link rel="apple一touch一icon一precomposed" href="touch一icon一iphone.png" />

圖片尺寸可以設(shè)定為5757(px)或者Retina可以定為114114(px)月洛,ipad尺寸為72*72(px)

21. 啟動畫面
  <link rel="apple一touch一startup一image" href="start.png"/>

iOS下頁面啟動加載時顯示的畫面圖片,避免加載時的白屏孽锥。

可以通過madia來指定不同的大胁泊妗:

<!一一iPhone一一>

  <link href="apple一touch一startup一image一320x460.png" media="(device一width: 320px)" rel="apple一touch一startup一image" />

  <!一一 iPhone Retina 一一>

  <link href="apple一touch一startup一image一640x920.png" media="(device一width: 320px) and (一webkit一device一pixel一ratio: 2)" rel="apple一touch一startup一image" />

  <!一一 iPhone 5 一一>

  <link rel="apple一touch一startup一image" media="(device一width: 320px) and (device一height: 568px) and (一webkit一device一pixel一ratio: 2)" href="apple一touch一startup一image一640x1096.png">

  <!一一 iPad portrait 一一>

  <link href="apple一touch一startup一image一768x1004.png" media="(device一width: 768px) and (orientation: portrait)" rel="apple一touch一startup一image" />

  <!一一 iPad landscape 一一>

  <link href="apple一touch一startup一image一748x1024.png" media="(device一width: 768px) and (orientation: landscape)" rel="apple一touch一startup一image" />

  <!一一 iPad Retina portrait 一一>

  <link href="apple一touch一startup一image一1536x2008.png" media="(device一width: 1536px) and (orientation: portrait) and (一webkit一device一pixel一ratio: 2)" rel="apple一touch一startup一image" />

  <!一一 iPad Retina landscape 一一>

  <link href="apple一touch一startup一image一1496x2048.png"media="(device一width: 1536px) and (orientation: landscape) and (一webkit一device一pixel一ratio: 2)"rel="apple一touch一startup一image" />
22. 瀏覽器私有及其它meta

QQ瀏覽器私有:

//全屏模式
<meta name="x5一fullscreen" content="true">

 //強(qiáng)制豎屏
<meta name="x5一orientation" content="portrait">

 //強(qiáng)制橫屏
<meta name="x5一orientation" content="landscape">

//應(yīng)用模式
<meta name="x5一page一mode" content="app">

UC瀏覽器私有

//全屏模式
<meta name="full一screen" content="yes">

//強(qiáng)制豎屏
<meta name="screen一orientation" content="portrait">

//強(qiáng)制橫屏
<meta name="screen一orientation" content="landscape">

//應(yīng)用模式
<meta name="browsermode" content="application">

其它(針對手持設(shè)備優(yōu)化,主要是針對一些老的不識別viewport的瀏覽器忱叭,比如黑莓)

<meta name="HandheldFriendly" content="true">
 微軟的老式瀏覽器
<meta name="MobileOptimized" content="320">
windows phone 點(diǎn)擊無高光
<meta name="msapplication一tap一highlight" content="no">
23. IOS中input鍵盤事件keyupkeydown今艺、keypress支持不是很好

input search做模糊搜索的時候韵丑,在鍵盤里面輸入關(guān)鍵詞,會通過ajax后臺查詢虚缎,然后返回數(shù)據(jù)撵彻,然后再對返回的數(shù)據(jù)進(jìn)行關(guān)鍵詞標(biāo)紅。用input監(jiān)聽鍵盤keyup事件实牡,在安卓手機(jī)瀏覽器中是可以的陌僵,但是在ios手機(jī)瀏覽器中變紅很慢,用輸入法輸入之后创坞,并未立刻響應(yīng)keyup事件碗短,只有在通過刪除之后才能響應(yīng)!

解決辦法:

可以用 html5 的oninput事件去代替keyup

<input type="text" id="testInput">
<script type="text/javascript">

document.getElementById('testInput').addEventListener('input',     function(e){
          var value = e.target.value;
    });
  </script>

然后就達(dá)到類似keyup的效果题涨!

24. h5網(wǎng)站input 設(shè)置為type=number的問題

一般會產(chǎn)生三個問題偎谁,一個問題是maxlength屬性不好用了。另外一個是form提交的時候纲堵,默認(rèn)給取整了巡雨。三是部分安卓手機(jī)出現(xiàn)樣式問題。

問題一解決席函,用js如下

  <input type="number" oninput="checkTextLength(this ,10)">

  function checkTextLength(obj, length) { 

        if(obj.value.length > length)  {    

          obj.value = obj.value.substr(0, length); 

        } 
  }

問題二铐望,是因為form提交默認(rèn)做了表單驗證,step默認(rèn)是1,要設(shè)置step屬性,假如保留2位小數(shù)正蛙,寫法如下:

  <input type="number" step="0.01" />

關(guān)于step:inputtype=number督弓,一般會自動生成一個上下箭頭,點(diǎn)擊上箭頭默認(rèn)增加一個step跟畅,點(diǎn)擊下箭頭默認(rèn)會減少一個step咽筋。number中默認(rèn)step是1。也就是step=0.01,可以允許輸入2位小數(shù)徊件,并且點(diǎn)擊上下箭頭分別增加0.01和減少0.01奸攻。

假如stepmin一起使用,那么數(shù)值必須在minmax之間虱痕。

問題三睹耐,去除input默認(rèn)樣式

  input[type=number] {
      一moz一appearance:textfield;
  }

  input[type=number]::一webkit一inner一spin一button,
 input[type=number]::一webkit一outer一spin一button {

    一webkit一appearance: none;
    margin: 0;

  }
25. ios 設(shè)置input 按鈕樣式會被默認(rèn)樣式覆蓋

解決方式如下:

  input,textarea {
    border: 0;
    一webkit一appearance: none;
  }

設(shè)置默認(rèn)樣式為none

26. IOS鍵盤字母輸入,默認(rèn)首字母大寫

解決方案部翘,設(shè)置如下屬性

  <input type="text" autocapitalize="off" />
27. select 下拉選擇設(shè)置右對齊

設(shè)置如下:

  select option {

  direction: rtl;

  }
28. 通過transform進(jìn)行skew變形硝训,rotate旋轉(zhuǎn)會造成出現(xiàn)鋸齒現(xiàn)象

可以設(shè)置如下:

  一webkit一transform: rotate(一4deg) skew(10deg) translateZ(0);

   transform: rotate(一4deg) skew(10deg) translateZ(0);

   outline: 1px solid rgba(255,255,255,0)
29. 移動端點(diǎn)擊300ms延遲

300ms導(dǎo)致用戶體驗不是很好,解決這個問題新思,我們一般在移動端用tap事件來取代click事件窖梁。推薦兩個js,一個是fastclick夹囚,一個是tap.js

關(guān)于300ms延遲纵刘,具體請看:300 毫秒點(diǎn)擊延遲的來龍去脈

30. 移動端點(diǎn)透問題

案例如下:

  <div id="haorooms">點(diǎn)頭事件測試</div>

  <a href="[www.jb51.net](http://www.jb51.net/)">[www.jb51.net](http://www.jb51.net/)</a>

  //div是絕對定位的蒙層,并且z一index高于a。而a標(biāo)簽是頁面中的一個鏈接荸哟,我們給div綁定tap事件:

  $('#haorooms').on('tap',function(){

         $('#haorooms').hide();

  });

我們點(diǎn)擊蒙層時 div正常消失假哎,但是當(dāng)我們在a標(biāo)簽上點(diǎn)擊蒙層時,發(fā)現(xiàn)a鏈接被觸發(fā)鞍历,這就是所謂的點(diǎn)透事件舵抹。

原因:

touchstart 早于touchend早于click。即click的觸發(fā)是有延遲的劣砍,這個時間大概在300ms左右惧蛹,也就是說我們tap觸發(fā)之后蒙層隱藏, 此時click還沒有觸發(fā)秆剪,300ms之后由于蒙層隱藏赊淑,我們的click觸發(fā)到了下面的a鏈接上。

解決:

(1)盡量都使用touch事件來替換click事件仅讽。例如用touchend事件(推薦)陶缺。

(2)用fastclick,參考:https://github.com/ftlabs/fastclick

(3)用preventDefault阻止a標(biāo)簽的click

(4)延遲一定的時間(300ms+)來處理事件 (不推薦)

(5)以上一般都能解決洁灵,實在不行就換成click事件饱岸。

下面介紹一下touchend事件掺出,如下:

  $("#haorooms").on("touchend", function (event) {

     event.preventDefault();

   });
31. 關(guān)于 iOS 與 OS X 端字體的優(yōu)化(橫豎屏?xí)霈F(xiàn)字體加粗不一致等)

iOS 瀏覽器橫屏?xí)r會重置字體大小,設(shè)置text一size一adjustnone可以解決 iOS 上的問題苫费,但桌面版 Safari 的字體縮放功能會失效汤锨,因此最佳方案是將text一size一adjust100%

  一webkit一text一size一adjust: 100%;
  一ms一text一size一adjust: 100%;
  text一size一adjust: 100%;
32. 關(guān)于 iOS 系統(tǒng)中百框,中文輸入法輸入英文時闲礼,字母之間可能會出現(xiàn)一個六分之一空格可以通過正則去掉
this.value = this.value.replace(/\u2006/g, '');
33. 移動端 HTML5 audio autoplay失效問題

這個不是 BUG,由于自動播放網(wǎng)頁中的音頻或視頻铐维,會給用戶帶來一些困擾或者不必要的流量消耗柬泽,所以蘋果系統(tǒng)和安卓系統(tǒng)通常都會禁止自動播放和使用JS的觸發(fā)播放,必須由用戶來觸發(fā)才可以播放嫁蛇。

解決方法思路:先通過用戶touchstart觸碰锨并,觸發(fā)播放并暫停(音頻開始加載,后面用 JS 再操作就沒問題了)睬棚。

解決代碼:

  document.addEventListener('touchstart', function () {

    document.getElementsByTagName('audio')[0].play();

    document.getElementsByTagName('audio')[0].pause();

  });
34. 移動端 HTML5 input date 不支持 placeholder問題

復(fù)制代碼 代碼如下:

  <input placeholder="Date" class="textbox一n" type="text" onfocus="(this.type='date')"  id="date">

有的瀏覽器可能要點(diǎn)擊兩遍第煮!

35. 部分機(jī)型存在type為searchinput,自帶close按鈕樣式修改方法

有些機(jī)型的搜索input控件會自帶close按鈕(一個偽元素)抑党,而通常為了兼容所有瀏覽器包警,我們會自己實現(xiàn)一個,此時去掉原生close按鈕的方法為

  #Search::一webkit一search一cancel一button{

    display: none; 

  }

如果想使用原生close按鈕底靠,又想使其符合設(shè)計風(fēng)格揽趾,可以對這個偽元素的樣式進(jìn)行修改。

36. 喚起selectoption展開

zepto方式:

  $(sltElement).trrgger("mousedown");

原生js方式:

  function showDropdown(sltElement) {

    var event;

    event = document.createEvent('MouseEvents');

    event.initMouseEvent('mousedown', true, true, window);

    sltElement.dispatchEvent(event);

  };
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苛骨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苟呐,更是在濱河造成了極大的恐慌痒芝,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牵素,死亡現(xiàn)場離奇詭異严衬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笆呆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門请琳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赠幕,你說我怎么就攤上這事俄精。” “怎么了榕堰?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵竖慧,是天一觀的道長嫌套。 經(jīng)常有香客問我,道長圾旨,這世上最難降的妖魔是什么踱讨? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮砍的,結(jié)果婚禮上痹筛,老公的妹妹穿的比我還像新娘。我一直安慰自己廓鞠,他們只是感情好帚稠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诫惭,像睡著了一般翁锡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夕土,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天馆衔,我揣著相機(jī)與錄音,去河邊找鬼怨绣。 笑死角溃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篮撑。 我是一名探鬼主播减细,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赢笨!你這毒婦竟也來了未蝌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤茧妒,失蹤者是張志新(化名)和其女友劉穎萧吠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桐筏,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纸型,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梅忌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狰腌。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牧氮,靈堂內(nèi)的尸體忽然破棺而出琼腔,到底是詐尸還是另有隱情,我是刑警寧澤踱葛,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布展姐,位于F島的核電站躁垛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏圾笨。R本人自食惡果不足惜教馆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擂达。 院中可真熱鬧土铺,春花似錦、人聲如沸板鬓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俭令。三九已至后德,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抄腔,已是汗流浹背瓢湃。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赫蛇,地道東北人绵患。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像悟耘,于是被迫代替她去往敵國和親落蝙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容