移動端H5開發(fā)常用技巧

html 篇

常用的meta屬性設(shè)置

meta對于移動端的一些特殊屬性苍凛,可根據(jù)需要自行設(shè)置

//Android?禁止屏幕旋轉(zhuǎn)

//全屏顯示

//UC應(yīng)用模式,使用了application這種應(yīng)用模式后,頁面講默認全屏,禁止長按菜單控硼,禁止收拾,標(biāo)準(zhǔn)排版夺蛇,以及強制圖片顯示。

//QQ強制豎屏

//QQ強制全屏

//QQ應(yīng)用模式

電話號碼識別

在 iOS Safari (其他瀏覽器和 Android 均不會)上會對那些看起來像是電話號碼的數(shù)字處理為電話鏈接酣胀,比如:

7 位數(shù)字刁赦,形如:1234567

帶括號及加號的數(shù)字愿卸,形如:(+86)123456789

雙連接線的數(shù)字,形如:00-00-00111

11 位數(shù)字截型,形如:13800138000

關(guān)閉識別

開啟識別

123456

郵箱識別(Android)

安卓上會對符合郵箱格式的字符串進行識別趴荸,我們可以通過如下的 meta 來管別郵箱的自動識別:

同樣地,我們也可以通過標(biāo)簽屬性來開啟長按郵箱地址彈出郵件發(fā)送的功能:

dooyoe@gmail.com

css 篇

0.5px細線

移動端 H5 項目越來越多宦焦,設(shè)計師對于 UI 的要求也越來越高发钝,比如 1px 的邊框。在高清屏下波闹,移動端的 1px 會很粗酝豪。

那么為什么會產(chǎn)生這個問題呢?主要是跟一個東西有關(guān)精堕,DPR(devicePixelRatio) 設(shè)備像素比孵淘,它是默認縮放為 100%的情況下,設(shè)備像素和 CSS 像素的比值歹篓。目前主流的屏幕 DPR=2(iPhone 8),或者 3(iPhone 8 Plus)瘫证。拿 2 倍屏來說,設(shè)備的物理像素要實現(xiàn) 1 像素庄撮,而 DPR=2背捌,所以 css 像素只能是 0.5。

下面介紹最常用的方法

/*?底邊框?*/

.b-border{

position:?relative;

}

.b-border:before{

content:'';

position:?absolute;

left:0;

bottom:0;

width:100%;

height:1px;

background:#d9d9d9;

-webkit-transform:scaleY(0.5);

transform:scaleY(0.5);

-webkit-transform-origin:00;

transform-origin:00;

}

/*?上邊框?*/

.t-border{

position:?relative;

}

.t-border:before{

content:'';

position:?absolute;

left:0;

top:0;

width:100%;

height:1px;

background:#d9d9d9;

-webkit-transform:scaleY(0.5);

transform:scaleY(0.5);

-webkit-transform-origin:00;

transform-origin:00;

}

/*?右邊框?*/

.r-border{

position:?relative;

}

.r-border:before{

content:'';

position:?absolute;

right:0;

bottom:0;

width:1px;

height:100%;

background:#d9d9d9;

-webkit-transform:scaleX(0.5);

transform:scaleX(0.5);

-webkit-transform-origin:00;

transform-origin:00;

}

/*?左邊框?*/

.l-border{

position:?relative;

}

.l-border:before{

content:'';

position:?absolute;

left:0;

bottom:0;

width:1px;

height:100%;

background:#d9d9d9;

-webkit-transform:scaleX(0.5);

transform:scaleX(0.5);

-webkit-transform-origin:00;

transform-origin:00;

}

/*?四條邊?*/

.setBorderAll{

position:?relative;

&:after?{

content:'?';

position:?absolute;

top:0;

left:0;

width:200%;

height:200%;

transform:scale(0.5);

transform-origin:?left?top;

box-sizing:?border-box;

border:1pxsolid#e5e5e5;

border-radius:4px;

}

}

屏蔽用戶選擇

禁止用戶選擇頁面中的文字或者圖片

div{

-webkit-touch-callout:?none;

-webkit-user-select:?none;

-khtml-user-select:?none;

-moz-user-select:?none;

-ms-user-select:?none;

user-select:?none;

}

清除輸入框內(nèi)陰影

在 iOS 上洞斯,輸入框默認有內(nèi)部陰影,以這樣關(guān)閉:

div{

-webkit-appearance:?none;

}

如何禁止保存或拷貝圖像

代碼如下

img{

-webkit-touch-callout:?none;

}

輸入框默認字體顏色

設(shè)置 input 里面 placeholder 字體的顏色

input::-webkit-input-placeholder,

textarea::-webkit-input-placeholder{

color:#c7c7c7;

}

input:-moz-placeholder,

textarea:-moz-placeholder{

color:#c7c7c7;

}

input:-ms-input-placeholder,

textarea:-ms-input-placeholder{

color:#c7c7c7;

}

用戶設(shè)置字號放大或者縮小導(dǎo)致頁面布局錯誤

設(shè)置字體禁止縮放

body{

-webkit-text-size-adjust:100%!important;

text-size-adjust:100%!important;

-moz-text-size-adjust:100%!important;

}

android系統(tǒng)中元素被點擊時產(chǎn)生邊框

部分android系統(tǒng)點擊一個鏈接毡庆,會出現(xiàn)一個邊框或者半透明灰色遮罩, 不同生產(chǎn)商定義出來額效果不一樣。去除代碼如下

a,button,input,textarea{

-webkit-tap-highlight-color:rgba(0,0,0,0)

-webkit-user-modify:read-write-plaintext-only;

}

iOS 滑動不流暢

ios 手機上下滑動頁面會產(chǎn)生卡頓烙如,手指離開頁面么抗,頁面立即停止運動。整體表現(xiàn)就是滑動不流暢亚铁,沒有滑動慣性蝇刀。iOS 5.0 以及之后的版本,滑動有定義有兩個值 auto 和 touch刀闷,默認值為 auto熊泵。

「解決方案」

在滾動容器上增加滾動 touch 方法

.wrapper{

-webkit-overflow-scrolling:?touch;

}

設(shè)置 overflow 設(shè)置外部 overflow 為 hidden,設(shè)置內(nèi)容元素 overflow 為 auto仰迁。內(nèi)部元素超出 body 即產(chǎn)生滾動甸昏,超出的部分 body 隱藏。

body{

overflow-y:?hidden;

}

.wrapper{

overflow-y:?auto;

}

js 篇

移動端click屏幕產(chǎn)生200-300 ms的延遲響應(yīng)

移動設(shè)備上的web網(wǎng)頁是有300ms延遲的徐许,往往會造成按鈕點擊延遲甚至是點擊失效施蜜。解決方案:

fastclick可以解決在手機上點擊事件的300ms延遲

zepto的touch模塊,tap事件也是為了解決在click的延遲問題

觸摸事件的響應(yīng)順序

ontouchstart

ontouchmove

ontouchend

onclick

audio 和 video 在 ios 和 andriod 中自動播放

這個不是bug雌隅,由于自動播放網(wǎng)頁中的音頻或視頻翻默,會給用戶帶來一些困擾或者不必要的流量消耗缸沃,所以蘋果系統(tǒng)和安卓系統(tǒng)通常都會禁止自動播放和使用 JS 的觸發(fā)播放,必須由用戶來觸發(fā)才可以播放修械。加入自動觸發(fā)播放的代碼

$('html').one('touchstart',function(){

audio.play()

})

iOS 上拉邊界下拉出現(xiàn)空白

手指按住屏幕下拉趾牧,屏幕頂部會多出一塊白色區(qū)域。手指按住屏幕上拉肯污,底部多出一塊白色區(qū)域翘单。

在 iOS 中,手指按住屏幕上下拖動蹦渣,會觸發(fā) touchmove 事件哄芜。這個事件觸發(fā)的對象是整個 webview 容器,容器自然會被拖動柬唯,剩下的部分會成空白认臊。

「解決方案」

document.body.addEventListener(

'touchmove',

function(e){

if(e._isScroller)return

//?阻止默認事件

e.preventDefault()

},

{

passive:false

}

)

ios 日期轉(zhuǎn)換 NAN 的問題

將日期字符串的格式符號替換成'/'

'yyyy-MM-dd'.replace(/-/g,'/')

軟鍵盤問題

IOS 鍵盤彈起擋住原來的視圖

可以通過監(jiān)聽移動端軟鍵盤彈起 Element.scrollIntoViewIfNeeded(Boolean)方法用來將不在瀏覽器窗口的可見區(qū)域內(nèi)的元素滾動到瀏覽器窗口的可見區(qū)域。如果該元素已經(jīng)在瀏覽器窗口的可見區(qū)域內(nèi)锄奢,則不會發(fā)生滾動失晴。

true,則元素將在其所在滾動區(qū)的可視區(qū)域中居中對齊拘央。

false师坎,則元素將與其所在滾動區(qū)的可視區(qū)域最近的邊緣對齊。根據(jù)可見區(qū)域最靠近元素的哪個邊緣堪滨,元素的頂部將與可見區(qū)域的頂部邊緣對準(zhǔn)胯陋,或者元素的底部邊緣將與可見區(qū)域的底部邊緣對準(zhǔn)。

window.addEventListener('resize',function(){

if(

document.activeElement.tagName?==='INPUT'||

document.activeElement.tagName?==='TEXTAREA'

)?{

window.setTimeout(function(){

if('scrollIntoView'indocument.activeElement)?{

document.activeElement.scrollIntoView(false)

}else{

document.activeElement.scrollIntoViewIfNeeded(false)

}

},0)

}

})

onkeyUp 和 onKeydown 兼容性問題

IOS 中 input 鍵盤事件 keyup袱箱、keydown遏乔、等支持不是很好, 用 input 監(jiān)聽鍵盤 keyup 事件,在安卓手機瀏覽器中沒有問題发笔,但是在 ios 手機瀏覽器中用輸入法輸入之后盟萨,并未立刻相應(yīng) keyup 事件

IOS12 輸入框難以點擊獲取焦點,彈不出軟鍵盤

定位找到問題是 fastclick.js 對 IOS12 的兼容性了讨,可在 fastclick.js 源碼或者 main.js 做以下修改

FastClick.prototype.focus?=function(targetElement){

varlength

if(

deviceIsIOS?&&

targetElement.setSelectionRange?&&

targetElement.type.indexOf('date')?!==0&&

targetElement.type?!=='time'&&

targetElement.type?!=='month'

)?{

length?=?targetElement.value.length

targetElement.setSelectionRange(length,?length)

targetElement.focus()

}else{

targetElement.focus()

}

}

IOS 鍵盤收起時頁面沒用回落捻激,底部會留白

通過監(jiān)聽鍵盤回落時間滾動到原來的位置

window.addEventListener('focusout',function(){

window.scrollTo(0,0)

})

//input輸入框彈起軟鍵盤的解決方案。

varbfscrolltop?=document.body.scrollTop

$('input')

.focus(function(){

document.body.scrollTop?=document.body.scrollHeight

//console.log(document.body.scrollTop);

})

.blur(function(){

document.body.scrollTop?=?bfscrolltop

//console.log(document.body.scrollTop);

})

IOS 下 fixed 失效的原因

軟鍵盤喚起后前计,頁面的 fixed 元素將失效胞谭,變成了 absolute,所以當(dāng)頁面超過一屏且滾動時男杈,失效的 fixed 元素就會跟隨滾動了丈屹。不僅限于 type=text 的輸入框,凡是軟鍵盤(比如時間日期選擇伶棒、select 選擇等等)被喚起旺垒,都會遇到同樣地問題彩库。

解決方法: 不讓頁面滾動,而是讓主體部分自己滾動,主體部分高度設(shè)為 100%先蒋,overflow:scroll

.warper{

position:?absolute;

width:100%;

left:0;

right:0;

top:0;

bottom:0;

overflow-y:?scroll;

-webkit-overflow-scrolling:?touch;/*?解決ios滑動不流暢問題?*/

}

.fix-bottom{

position:?fixed;

bottom:0;

width:100%;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骇钦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竞漾,更是在濱河造成了極大的恐慌司忱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畴蹭,死亡現(xiàn)場離奇詭異坦仍,居然都是意外死亡,警方通過查閱死者的電腦和手機叨襟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門繁扎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糊闽,你說我怎么就攤上這事梳玫。” “怎么了右犹?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵提澎,是天一觀的道長。 經(jīng)常有香客問我念链,道長盼忌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任掂墓,我火速辦了婚禮谦纱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘君编。我一直安慰自己跨嘉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布吃嘿。 她就那樣靜靜地躺著祠乃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兑燥。 梳的紋絲不亂的頭發(fā)上亮瓷,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音贪嫂,去河邊找鬼寺庄。 笑死艾蓝,一個胖子當(dāng)著我的面吹牛力崇,可吹牛的內(nèi)容都是我干的斗塘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼亮靴,長吁一口氣:“原來是場噩夢啊……” “哼馍盟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茧吊,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤贞岭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搓侄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞄桨,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年讶踪,在試婚紗的時候發(fā)現(xiàn)自己被綠了芯侥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡乳讥,死狀恐怖柱查,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情云石,我是刑警寧澤唉工,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站汹忠,受9級特大地震影響淋硝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宽菜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一奖地、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赋焕,春花似錦参歹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侨嘀,卻和暖如春臭挽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咬腕。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工欢峰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓纽帖,卻偏偏與公主長得像宠漩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子懊直,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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