[轉(zhuǎn)]移動(dòng)端常見(jiàn)面試題一:移動(dòng)端兼容解決方案

文章來(lái)源:移動(dòng)端常見(jiàn)面試題一:移動(dòng)端兼容解決方案

1玖像、安卓瀏覽器看背景圖片搅吁,有些設(shè)備會(huì)模糊

因?yàn)槭謾C(jī)分辨率太小簸呈,如果按照分辨率來(lái)顯示網(wǎng)頁(yè)冕茅,字會(huì)非常小,安卓手機(jī)devicePixoRadio比較亂蛹找,有1.5的姨伤,有2的也有3的。想讓圖片在手機(jī)里顯示更為清晰庸疾,必須使用2x的背景圖來(lái)代替img標(biāo)簽(一般情況下都是2倍的)乍楚,或者指定background-size:contain;都可以

用-webkit-min-device-pixel-ratio可以做到不同倍數(shù)不同尺寸的圖片:

.icon-logo
{
    background-image: url(src/assets/logo.png);
    width: 24px;
    height: 24px;
    background-size: contain;
}
@media screen and (-webkit-min-device-pixel-ratio: 2)
{
    .icon-logo { background-image: url(src/assets/logo@2.png); }
}
@media screen and (-webkit-min-device-pixel-ratio: 3)
{
    .icon-logo { background-image: url(src/assets/logo@3.png); }
}
@media screen and (-webkit-min-device-pixel-ratio: 4)
{
    .icon-logo { background-image: url(src/assets/logo@4.png); }
}

2、防止手機(jī)中頁(yè)面放大和縮小

<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

3届慈、上下拉動(dòng)滾動(dòng)條時(shí)卡頓徒溪、慢

body
{
    -webkit-overflow-scrolling:touch;
    overflow-scrolling:touch;
}

Android3+和iOSi5+支持CSS3的新屬性為overflow-scrolling

4、長(zhǎng)時(shí)間按住頁(yè)面出現(xiàn)閃退

element
{
    -webkit-touch-callout:none;
}

5金顿、iphone及ipad下輸入框默認(rèn)內(nèi)陰影

element
{
    -webkit-appearance:none;
}

6臊泌、ios和android下觸摸元素時(shí)出現(xiàn)半透明灰色遮罩

element
{
    -webkit-tap-highlight-color:rgba(255,255,255,0);
}

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

7渠概、active兼容處理 即 偽類(lèi):active失效

方法一:body添加ontouchstart

<body ontouchstart=''>

方法二:js給document綁定touchstart或touchend事件

<style>
    a
    {
        color:#000;
    }

    a:active
    {
        color:#fff;
    }

</style>

<a href=foo>bar</a>

<script>
    document.addEventListentener('touchstart',function(){},false);
</script>

8、1px邊框

在移動(dòng)端中嫂拴,如果給元素設(shè)置一個(gè)像素的邊框的話播揪,那么在手機(jī)上看起來(lái)是會(huì)比一個(gè)像素粗的。

解決方法:使用偽類(lèi)元素模擬邊框筒狠,使用transform縮放

.button
{
    height: 36px;
    line-height: 36px;
    font-size: 14px;
    padding: 0px;
    margin: 0px;
    padding-left: 16px;
    padding-right: 16px;
    background-color: white;
    border: none;
    outline: none;
    box-sizing: border-box;
    border-radius: 5px;
    position: relative;
    -webkit-user-select: none;
    -ms-user-select: none;
    -moz-user-select: none;
    text-decoration: none;
    display: block;
}
.button:after
{
    content: '';
    z-index: 1;
    position: absolute;
    border: 1px solid rgba(0,0,0,0.23);
    pointer-events: none;
    box-sizing: border-box;
    transform-origin: 0 0;
    transform: scale(calc(1/1));
    top: 0px;
    left: 0px;
    width: calc(100% * 1);
    height: calc(100% * 1);
    border-radius: calc(5px * 1);
    transition: all ease-in-out 150ms;
    background-color: rgba(0,0,0,0);
}
.button:active:after
{
    background-color: rgba(0,0,0,0.1);
}
.button.button-blue
{
    background-color: #3F51B5;
    color: white;
}
.button.button-blue:active:after
{
    background-color: rgba(0,0,0,0.15);
}
@media screen and (-webkit-min-device-pixel-ratio: 2)
{
    .button:after
    {
        border-radius: calc(5px * 2);
        width: calc(100% * 2);
        height: calc(100% * 2);
        transform: scale(calc(1/2));
    }
}
@media screen and (-webkit-min-device-pixel-ratio: 3)
{
    .button:after
    {
        border-radius: calc(5px * 3);
        width: calc(100% * 3);
        height: calc(100% * 3);
        transform: scale(calc(1/3));
    }
}
@media screen and (-webkit-min-device-pixel-ratio: 4)
{
    .button:after
    {
        border-radius: calc(5px * 4);
        width: calc(100% * 4);
        height: calc(100% * 4);
        transform: scale(calc(1/4));
    }
}

9猪狈、webkit mask兼容處理

某些低端手機(jī)不支持css3mask,可以選擇性的進(jìn)降級(jí)處理
比如可以使用js判斷來(lái)引用不同class:

if('WebkitMask' in documnet.documentElement.style)
{
    alert('支持 mask')
}
else
{
    alert('不支持 mask')
}

10辩恼、pc端與移動(dòng)端字體大小的問(wèn)題

html,body,form,fieldset,p,div,h1,h2,h3,h4,h5,h6
{
    -webkit-text-size-adjust:100%;
}

pc端字體正常顯示雇庙,但ios真機(jī)就出現(xiàn)谓形,h1、span等標(biāo)簽字體比較大状共。

html
{
    -webkit-text-size-adjust:100%;/*ios端谷歌瀏覽器測(cè)試有效套耕,Android端未測(cè)試*/
}

11.transiton閃屏

/*設(shè)置內(nèi)聯(lián)的元素在3D空間如何呈現(xiàn):保留3D*/
-webkit-transform-style:preserve-3D;

/*設(shè)置進(jìn)行轉(zhuǎn)換的元素的背面在面對(duì)用戶時(shí)是否課件:隱藏*/
-webkit-backface-visibility:hidden;

12.圓角bug

某些Android手機(jī)圓角失效 background-clip:padding-box;

13.click的300ms延遲問(wèn)題

在移動(dòng)端中,click事件是生效的峡继,但是冯袍,點(diǎn)擊之后會(huì)有300ms的延遲響應(yīng)

原因:safari是最早做出這個(gè)機(jī)制的,因?yàn)樵谝苿?dòng)端里碾牌,瀏覽器需要等待一段時(shí)間來(lái)判斷此次用戶操作是單擊還是雙擊康愤,所以就有click300ms的延遲機(jī)制,Android也很快就有了

不用click舶吗,用自定義事件tap

tap是需要自定義的:如果用戶執(zhí)行了touchstart在很短的時(shí)間又觸發(fā)了touchend,且兩次的距離很小征冷,而且不能

引入fastclick庫(kù)來(lái)解決

14.響應(yīng)式圖片

在移動(dòng)端中,圖片的處理應(yīng)該是很謹(jǐn)慎的誓琼,假設(shè)有一張圖片本身的尺寸是X寬检激,設(shè)置和包裹它的div一樣寬,如果是div寬度小于圖片寬度沒(méi)有問(wèn)題腹侣,但是如果div寬度大于圖片的寬度叔收,圖片被拉伸失真

解決方法:讓圖片最大只能是自己的寬度

img{

max-width: 100%;

display: block;

margin: 0 auto;

}

15.點(diǎn)透bug的產(chǎn)生

例如:

<div id="haorooms">點(diǎn)頭事件測(cè)試</div>
<a href="www.jb51.net">www.jb51.net</a>

div是絕對(duì)定位的蒙層,并且z-index高于a傲隶。而a標(biāo)簽是頁(yè)面中的一個(gè)鏈接饺律,我們給div綁定tap事件:

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

我們點(diǎn)擊蒙層時(shí)div正常消失,但是當(dāng)我們?cè)赼標(biāo)簽上點(diǎn)擊蒙層時(shí)跺株,發(fā)現(xiàn)a鏈接被觸發(fā)复濒,這就是所謂的點(diǎn)透事件。

原因:
touchstart早于touchend早于click乒省。即click的觸發(fā)是由延遲的巧颈,這個(gè)時(shí)間大概在300ms左右,也就是說(shuō)我們tap觸發(fā)之后蒙層隱藏袖扛。此時(shí)click還沒(méi)有觸發(fā)洛二,300ms之后由于蒙層隱藏,我們的click觸發(fā)到了下面的a鏈接攻锰。

解決:
1.盡量都使用touch事件來(lái)替換click事件晾嘶。例如用touchend事件(推薦)
2.用fastclick
3.用preventDefault阻止a標(biāo)簽的click

內(nèi)容大部分都沒(méi)測(cè)試過(guò),使用前請(qǐng)先測(cè)試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娶吞,一起剝皮案震驚了整個(gè)濱河市垒迂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妒蛇,老刑警劉巖机断,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楷拳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吏奸,警方通過(guò)查閱死者的電腦和手機(jī)欢揖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奋蔚,“玉大人她混,你說(shuō)我怎么就攤上這事〔幢” “怎么了坤按?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)馒过。 經(jīng)常有香客問(wèn)我臭脓,道長(zhǎng),這世上最難降的妖魔是什么腹忽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任来累,我火速辦了婚禮,結(jié)果婚禮上窘奏,老公的妹妹穿的比我還像新娘嘹锁。我一直安慰自己,他們只是感情好蔼夜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布兼耀。 她就那樣靜靜地躺著压昼,像睡著了一般求冷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窍霞,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天匠题,我揣著相機(jī)與錄音,去河邊找鬼但金。 笑死韭山,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冷溃。 我是一名探鬼主播钱磅,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼似枕!你這毒婦竟也來(lái)了盖淡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凿歼,失蹤者是張志新(化名)和其女友劉穎褪迟,沒(méi)想到半個(gè)月后冗恨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡味赃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年掀抹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片心俗。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡傲武,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出另凌,到底是詐尸還是另有隱情谱轨,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布吠谢,位于F島的核電站土童,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏工坊。R本人自食惡果不足惜献汗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望王污。 院中可真熱鬧罢吃,春花似錦、人聲如沸昭齐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阱驾。三九已至就谜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間里覆,已是汗流浹背丧荐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喧枷,地道東北人虹统。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像隧甚,于是被迫代替她去往敵國(guó)和親车荔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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