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 綁定touchstart
或 touchend
事件
<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è)置為default
或blank
,則頁面顯示在狀態(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鍵盤事件keyup
、keydown
今艺、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:input
中type=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
奸攻。
假如step
和min
一起使用,那么數(shù)值必須在min
和max
之間虱痕。
問題三睹耐,去除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一adjust
為 none
可以解決 iOS 上的問題苫费,但桌面版 Safari 的字體縮放功能會失效汤锨,因此最佳方案是將text一size一adjust
為 100%
。
一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為search
的input
,自帶close
按鈕樣式修改方法
有些機(jī)型的搜索input
控件會自帶close
按鈕(一個偽元素)抑党,而通常為了兼容所有瀏覽器包警,我們會自己實現(xiàn)一個,此時去掉原生close
按鈕的方法為
#Search::一webkit一search一cancel一button{
display: none;
}
如果想使用原生close
按鈕底靠,又想使其符合設(shè)計風(fēng)格揽趾,可以對這個偽元素的樣式進(jìn)行修改。
36. 喚起select
的option
展開
zepto方式:
$(sltElement).trrgger("mousedown");
原生js方式:
function showDropdown(sltElement) {
var event;
event = document.createEvent('MouseEvents');
event.initMouseEvent('mousedown', true, true, window);
sltElement.dispatchEvent(event);
};