1. 程式人生 > >【原】移動web資源整理

【原】移動web資源整理

2013年初接觸移動端,簡單做下總結,首先了解下移動web帶來的問題

  • 裝置更新換代快——低端機遺留下問題、高階機帶來新挑戰
  • 瀏覽器廠商不統一——相容問題多
  • 網路更復雜——弱網路,頁面開啟慢
  • 低端機效能差——頁面操作卡頓
  • HTML5新技術多——學習成本不低
  • 未知問題——坑多

面對這些問題,一開始我們只能在未知中試錯,知道錯誤的方案才能更容易尋找正確的解決問題思路,2年多來,可看到移動web在業界不斷趨向於成熟,各種框架和解決方案不斷的湧現讓移動端開發不再是個噩夢。

這幾天把想到的一點經驗先羅列出來,後續會持續更新,這篇文章可以給剛接觸webapp開發的同學帶來幫助,任何疑問歡迎留言探討~

目錄更新於20161114

meta基礎知識

H5頁面視窗自動調整到裝置寬度,並禁止使用者縮放頁面

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

忽略將頁面中的數字識別為電話號碼

<meta name="format-detection" content="telephone=no" />

忽略Android平臺中對郵箱地址的識別

<
meta name="format-detection" content="email=no" />

當網站新增到主螢幕快速啟動方式,可隱藏位址列,僅針對iossafari

<meta name="apple-mobile-web-app-capable" content="yes" />
<!-- ios7.0版本以後,safari上已看不到效果 -->

體驗demo,解決在主螢幕開啟頁面後,點選頁面連結不會跳轉到系統自帶的Safari

將網站新增到主螢幕快速啟動方式,僅針對iossafari頂端狀態條的樣式

<meta 
name="apple-mobile-web-app-status-bar-style" content="black" /> <!-- 可選default、black、black-translucent -->

viewport模板

viewport模板——通用

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<title>標題</title>
<link rel="stylesheet" href="index.css">
</head>

<body>
這裡開始內容
</body>

</html>

viewport模板 - target-densitydpi=device-dpi,android 2.3.5以下版本不支援

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=750, user-scalable=no, target-densitydpi=device-dpi"><!-- width取值與頁面定義的寬度一致 -->
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<title>標題</title>
<link rel="stylesheet" href="index.css">
</head>

<body>
這裡開始內容
</body>

</html>

常見問題

移動端如何定義字型font-family

中文字型使用系統預設即可,英文用Helvetica

/* 移動端定義字型的程式碼 */
body{font-family:Helvetica;}

移動端字型單位font-size選擇px還是rem

對於只需要適配少部分手機裝置,且解析度對頁面影響不大的,使用px即可

對於需要適配各種移動裝置,使用rem,例如只需要適配iPhone和iPad等解析度差別比較挺大的裝置

rem配置參考,適合視覺稿寬度為640px的:

<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
html{font-size:10px}
@media screen and (min-width:321px) and (max-width:375px){html{font-size:11px}}
@media screen and (min-width:376px) and (max-width:414px){html{font-size:12px}}
@media screen and (min-width:415px) and (max-width:639px){html{font-size:15px}}
@media screen and (min-width:640px) and (max-width:719px){html{font-size:20px}}
@media screen and (min-width:720px) and (max-width:749px){html{font-size:22.5px}}
@media screen and (min-width:750px) and (max-width:799px){html{font-size:23.5px}}
@media screen and (min-width:800px){html{font-size:25px}}

移動端touch事件(區分webkit 和 winphone)

當用戶手指放在移動裝置在螢幕上滑動會觸發的touch事件

以下支援webkit

  • touchstart——當手指觸碰螢幕時候發生。不管當前有多少隻手指
  • touchmove——當手指在螢幕上滑動時連續觸發。通常我們再滑屏頁面,會呼叫event的preventDefault()可以阻止預設情況的發生:阻止頁面滾動
  • touchend——當手指離開螢幕時觸發
  • touchcancel——系統停止跟蹤觸控時候會觸發。例如在觸控過程中突然頁面alert()一個提示框,此時會觸發該事件,這個事件比較少用

TouchEvent

  • touches:螢幕上所有手指的資訊
  • targetTouches:手指在目標區域的手指資訊
  • changedTouches:最近一次觸發該事件的手指資訊
  • touchend時,touches與targetTouches資訊會被刪除,changedTouches儲存的最後一次的資訊,最好用於計算手指資訊

引數資訊(changedTouches[0])

  • clientX、clientY在顯示區的座標
  • target:當前元素

以下支援winphone 8

  • MSPointerDown——當手指觸碰螢幕時候發生。不管當前有多少隻手指
  • MSPointerMove——當手指在螢幕上滑動時連續觸發。通常我們再滑屏頁面,會呼叫css的html{-ms-touch-action: none;}可以阻止預設情況的發生:阻止頁面滾動
  • MSPointerUp——當手指離開螢幕時觸發

移動端click螢幕產生200-300 ms的延遲響應

移動裝置上的web網頁是有300ms延遲的,玩玩會造成按鈕點選延遲甚至是點選失效。

以下是歷史原因,來源一個公司內一個同事的分享:

2007年蘋果釋出首款iphone上IOS系統搭載的safari為了將適用於PC端上大螢幕的網頁能比較好的展示在手機端上,使用了雙擊縮放(double tap to zoom)的方案,比如你在手機上用瀏覽器開啟一個PC上的網頁,你可能在看到頁面內容雖然可以撐滿整個螢幕,但是字型、圖片都很小看不清,此時可以快速雙擊螢幕上的某一部分,你就能看清該部分放大後的內容,再次雙擊後能回到原始狀態。

雙擊縮放是指用手指在螢幕上快速點選兩次,iOS 自帶的 Safari 瀏覽器會將網頁縮放至原始比例。

原因就出在瀏覽器需要如何判斷快速點選上,當用戶在螢幕上單擊某一個元素時候,例如跳轉連結<a href="#"></a>,此處瀏覽器會先捕獲該次單擊,但瀏覽器不能決定使用者是單純要點選連結還是要雙擊該部分割槽域進行縮放操作,所以,捕獲第一次單擊後,瀏覽器會先Hold一段時間t,如果在t時間區間裡使用者未進行下一次點選,則瀏覽器會做單擊跳轉連結的處理,如果t時間裡使用者進行了第二次單擊操作,則瀏覽器會禁止跳轉,轉而進行對該部分割槽域頁面的縮放操作。那麼這個時間區間t有多少呢?在IOS safari下,大概為300毫秒。這就是延遲的由來。造成的後果使用者純粹單擊頁面,頁面需要過一段時間才響應,給使用者慢體驗感覺,對於web開發者來說是,頁面js捕獲click事件的回撥函式處理,需要300ms後才生效,也就間接導致影響其他業務邏輯的處理。

解決方案:

  • fastclick可以解決在手機上點選事件的300ms延遲
  • zepto的touch模組,tap事件也是為了解決在click的延遲問題

觸控事件的響應順序

1、ontouchstart 
2、ontouchmove 
3、ontouchend 
4、onclick

解決300ms延遲的問題,也可以通過繫結ontouchstart事件,加快對事件的響應

什麼是Retina 顯示屏,帶來了什麼問題

retina:一種具備超高畫素密度的液晶屏,同樣大小的螢幕上顯示的畫素點由1個變為多個,如在同樣帶下的螢幕上,蘋果裝置的retina顯示屏中,畫素點1個變為4個

在高清顯示屏中的點陣圖被放大,圖片會變得模糊,因此移動端的視覺稿通常會設計為傳統PC的2倍

那麼,前端的應對方案是:

設計稿切出來的圖片長寬保證為偶數,並使用backgroud-size把圖片縮小為原來的1/2

//例如圖片寬高為:200px*200px,那麼寫法如下
.css{width:100px;height:100px;background-size:100px 100px;}

其它元素的取值為原來的1/2,例如視覺稿40px的字型,使用樣式的寫法為20px

.css{font-size:20px}

ios系統中元素被觸控時產生的半透明灰色遮罩怎麼去掉

ios使用者點選一個連結,會出現一個半透明灰色遮罩, 如果想要禁用,可設定-webkit-tap-highlight-coloralpha值為0,也就是屬性值的最後一位設定為0就可以去除半透明灰色遮罩

a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0;)}

部分android系統中元素被點選時產生的邊框怎麼去掉

android使用者點選一個連結,會出現一個邊框或者半透明灰色遮罩, 不同生產商定義出來額效果不一樣,可設定-webkit-tap-highlight-coloralpha值為0去除部分機器自帶的效果

a,button,input,textarea{
-webkit-tap-highlight-color: rgba(0,0,0,0;)
-webkit-user-modify:read-write-plaintext-only; 
}

-webkit-user-modify有個副作用,就是輸入法不再能夠輸入多個字元

另外,有些機型去除不了,如小米2

對於按鈕類還有個辦法,不使用a或者input標籤,直接用div標籤

winphone系統a、input標籤被點選時產生的半透明灰色背景怎麼去掉

<meta name="msapplication-tap-highlight" content="no">

webkit表單元素的預設外觀怎麼重置

通用

.css{-webkit-appearance:none;}

偽元素改變number型別input框的預設樣式

input[type=number]::-webkit-textfield-decoration-container {
    background-color: transparent;    
}
input[type=number]::-webkit-inner-spin-button {
     -webkit-appearance: none;
}
input[type=number]::-webkit-outer-spin-button {
     -webkit-appearance: none;
}

webkit表單輸入框placeholder的顏色值能改變麼

input::-webkit-input-placeholder{color:#AAAAAA;}
input:focus::-webkit-input-placeholder{color:#EEEEEE;}

webkit表單輸入框placeholder的文字能換行麼

ios可以,android不行~

在textarea標籤下都可以換行~

IE10(winphone8)表單元素預設外觀如何重置

禁用 select 預設下拉箭頭

::-ms-expand 適用於表單選擇控制元件下拉箭頭的修改,有多個屬性值,設定它隱藏 (display:none) 並使用背景圖片來修飾可得到我們想要的效果。

select::-ms-expand {
display: none;
}

禁用 radio checkbox 預設樣式

::-ms-check 適用於表單複選框或單選按鈕預設圖示的修改,同樣有多個屬性值,設定它隱藏 (display:none) 並使用背景圖片來修飾可得到我們想要的效果。

input[type=radio]::-ms-check,input[type=checkbox]::-ms-check{
display: none;
}

禁用PC端表單輸入框預設清除按鈕

當表單文字輸入框輸入內容後會顯示文字清除按鈕,::-ms-clear 適用於該清除按鈕的修改,同樣設定使它隱藏 (display:none) 並使用背景圖片來修飾可得到我們想要的效果。

input[type=text]::-ms-clear,input[type=tel]::-ms-clear,input[type=number]::-ms-clear{
display: none;
}

禁止ios 長按時不觸發系統的選單,禁止ios&android長按時下載圖片

.css{-webkit-touch-callout: none}

禁止iosandroid使用者選中文字

.css{-webkit-user-select:none}

打電話發簡訊寫郵件怎麼實現

打電話

<a href="tel:0755-10086">打電話給:0755-10086</a>

發簡訊,winphone系統無效

<a href="sms:10086">發簡訊給: 10086</a>
<a href="mailto:[email protected]">[email protected]</a>

模擬按鈕hover效果

移動端觸控按鈕的效果,可明示使用者有些事情正要發生,是一個比較好體驗,但是移動裝置中並沒有滑鼠指標,使用css的hover並不能滿足我們的需求,還好國外有個啟用移動端css的active效果。

直接在body上新增ontouchstart,同樣可啟用移動端css的active效果,比較推薦這種方式,程式碼如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<style type="text/css">
a{-webkit-tap-highlight-color: rgba(0,0,0,0);}
.btn-blue{display:block;height:42px;line-height:42px;text-align:center;border-radius:4px;font-size:18px;color:#FFFFFF;background-color: #4185F3;}
.btn-blue:active{background-color: #357AE8;}
</style>
</head>
<body ontouchstart>
<div class="btn-blue">按鈕</div>

</body>
</html>

或者:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<style type="text/css">
a{-webkit-tap-highlight-color: rgba(0,0,0,0);}
.btn-blue{display:block;height:42px;line-height:42px;text-align:center;border-radius:4px;font-size:18px;color:#FFFFFF;background-color: #4185F3;}
.btn-blue:active{background-color: #357AE8;}
</style>
</head>
<body>

<div class="btn-blue">按鈕</div>

<script type="text/javascript">
document.addEventListener("touchstart", function(){}, true)
</script>
</body>
</html>

相容性ios5+、部分android 4+、winphone 8

要做到全相容的辦法,可通過繫結ontouchstart和ontouchend來控制按鈕的類名

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<style type="text/css">
a{-webkit-tap-highlight-color: rgba(0,0,0,0);}
.btn-blue{display:block;height:42px;line-height:42px;text-align:center;border-radius:4px;font-size:18px;color:#FFFFFF;background-color: #4185F3;}
.btn-blue-on{background-color: #357AE8;}
</style>
</head>
<body>

<div class="btn-blue">按鈕</div>

<script type="text/javascript">
var btnBlue = document.querySelector(".btn-blue");
btnBlue.ontouchstart = function(){
    this.className = "btn-blue btn-blue-on"
}
btnBlue.ontouchend = function(){
    this.className = "btn-blue"
}
</script>
</body>
</html>

螢幕旋轉的事件和樣式

事件

window.orientation,取值:正負90表示橫屏模式、0和180表現為

相關推薦

移動web資源整理

2013年初接觸移動端,簡單做下總結,首先了解下移動web帶來的問題 裝置更新換代快——低端機遺留下問題、高階機帶來新挑戰 瀏覽器廠商不統一——相容問題多 網路更復雜——弱網路,頁面開啟慢 低端機效能差——頁面操作卡頓 HTML5新技術多——學習成本不低 未知問題——坑多 面對這些問題,

移動web頁面使用字型的思考

回想2年前剛開始接觸手機專案,接到PSD稿後,發現視覺設計師們喜歡用微軟雅黑作為中文字型進行設計,於是我寫頁面的時候也定義 font-family 為微軟雅黑,後來發到線上後,細心的產品經理髮現頁面的字型不是微軟雅黑,要求馬上修改,我就驚呆了,還跟產品爭執一番。 後來瞭解到的手機系統 ios、andro

移動web頁面給使用者傳送郵件的方法 (郵件含文字、圖片、連結)

微信商戶通有這麼一個需求,使用者開啟H5頁面後,引導使用者到電腦下載設計資源包,由於各種內部原因,被告知無後臺資源支援,自己折騰了一段時間找了下面2個辦法,簡單做下筆記。 mailto使用方法 1、基礎寫法 當瀏覽者點選這個連結時,瀏覽器會自動呼叫預設的客戶端電子郵件程式,並在收件人框中自動填上

移動端vue頁面點透事件 - 分析與解決

近期專案遇到了vue頁面事件被帶到下一個頁面的問題,也就是我們常說的點透事件,主要表現在android機器上,花了不少時間折騰,簡單做下總結~   vue頁面之間的切換通過Vue Router的router.push方法 b.vue之前已經訪問過,資料通過vuex管理,從a.vue進入到b

轉載國外程序員整理的Java資源大全

應用開發 廣泛 database 開發者 索引 編寫 ots 函數庫 運行時 構建 這裏搜集了用來構建應用程序的工具。 Apache Maven:Maven使用聲明進行構建並進行依賴管理,偏向於使用約定而不是配置進行構建。Maven優於Apache Ant。後者采用了一種

Go語言及Web框架Beego環境無腦搭建

本文涉及軟體均以截至到2013年10月12日的最新版本為準 1、 相關軟體準備: 1) go1.2rc1.windows-386.msi,對應32位windows系統安裝使用 下載地址: 2) go1.2rc1.windows-amd64.msi,對應32位windows系統安裝使用 下載地

Sql Server 2008---安裝時卸載Visual Studio

studio ima ext 一段 image 控制面板 選擇 應用 技術 由於數據庫連接不上,所以卸載數據庫,然後安裝的時候出問題報錯,結果是因為vs, 所以就有了卸載vs這一步。某些圖片借用一下。 1. 打開電腦中的控制面板--程序和功能 2.找到要卸載的軟件,但

Http-用getInputStream()或者getParameterMap()獲得Post請求的數據

數據 clas data ons 找到 clu 類的屬性 瀏覽器 比較 【前言】 最近在寫一個接口,寫好以後想測試,自己寫ajax(Post方法)來調用接口倒是可以用action所在類的屬性的get/set方法獲得數據。但是不只是頁面的ajax會調用這個接口,還有外系統會調

shell編寫一個簡單的jmeter自動化壓測腳本

image tac vbo 用戶數 osx dot png das uvc 在公司做壓力測試也挺長時間了,每次測試前環境數據準備都需要話費較長時間,所以一直在考慮能不能將整個過程實現自動化進行,於是就抽空寫了一個自動化腳本,當然這個腳本目前功能十分簡陋,代碼也不完善,很有很

無腦操作:Windows 10 + MySQL 5.5 安裝使用及免安裝使用

界面 圖標 ini文件 字符集設置 exe 可能 mon rem 選擇 本文介紹Windows 10環境下, MySQL 5.5的安裝使用及免安裝使用 資源下載: MySQL安裝文件:http://download.csdn.net/detail/lf19820717/

The Linux Command Line - Redirection

report tee edi each new linux c pattern ext rom ● cat - Concatenate files● sort - Sort lines of text● uniq - Report or omit repeated line

The Linux Command Line - Processes

all task rep shutdown ack port report proc name ps - report a snapshot of current processes top - display tasks job - list active jobs bg

unique/swap不甚清楚

wap .cn nbsp cnblogs images 技術分享 png 分享 .com                                              【原】unique/swap【不甚清楚】

fetch跨域請求附帶cookie(credentials)

allow src ssi ann oct o-c ech .com 頭部 HTTP訪問控制 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS 解決跨域的方式有很多種,本文介紹“跨域請

在windows平臺上調試vpcs

進行 源代碼 sta win32 sting cygwin clip 源碼 type 1.下載Cygwin32.2.下載vpcs源代碼.3.解壓vpcs源碼,修改Makefile.cygwin文件 以下兩行CFLAGS=-D$(OSTYPE) -D$(CPUTYPE) -D

圖片移動端圖片上傳旋轉、壓縮的解決方案

dex adding .com pad 移動 side www shu add 移動端圖片上傳旋轉、壓縮的解決方案 來源 知乎 作者 林鑫 工作上有手機上傳準考證等圖片的功能,這個是非常必要的,作者寫的很全面,就直接記錄這個地址了 還有一篇 文件的上傳、下載

Django開發Web接口

常用 不同 導致 -s 規模 通信速度 數據 color ont 【HTTP協議與JSON】 1. HTTP協議 特點如下: (1)支持客戶/服務器模式。 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、POST。每種方法規定了客戶與服務器

對MYSQL下視圖的一些總結

訪問者 虛表 不起作用 圖片 rom -- 除了 出現 img 註:本文使用mysql5.5版本為例。 做過數據庫開發的同學,對視圖(VIEW)應該不會陌生。 我接觸視圖最多的應用場景有兩個: 1)出於權限問題,為了限制訪問者看到過多的表字段(或內容),就建立一個視

筆記移動端H5數字鍵盤input type=number的處理(IOS和Android)

!= 字符串 文檔 代碼 || clear tcl rfi 導致 在Vue中的項目,基於VUX-UI開發,一個常見的需求: 1、金額輸入框 2、彈出數字鍵盤 3、僅支持輸入兩位小數,限制最大11位數,不允許0開頭   第一,首先想到額就是在VUX-UI中制定ty

無腦操作:IDEA + maven + SpringBoot + JPA + Thymeleaf實現CRUD及分頁

xtend sla lns ase tid item pen element per 一、開發環境: 1、windows 7 企業版 2、IDEA 14 3、JDK 1.8 4、Maven 3.5.2 5、MariaDB 6、SQLYog 二、Maven設