1. 程式人生 > 其它 >移動端鍵盤輸入框把底部元素頂上去了_【H5】316 移動端H5跳坑指南

移動端鍵盤輸入框把底部元素頂上去了_【H5】316 移動端H5跳坑指南

技術標籤:移動端鍵盤輸入框把底部元素頂上去了

最近在一個移動端的 Web 專案中踩了很多的坑,感覺有必要把它們記錄下來,分享給即將踏入移動端 Web 開發大門的朋友們,更好的解決ios和android相容。

1.input獲取焦點時,頁面被放大

設定meta標籤

<meta name="apple-mobile-web-app-capable" content="yes"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

2.ios input輸入時白屏

這個問題貌似只有再ios9中才有解決方法:在input的父元素上新增相對定位就行了,非常神奇

style="postion:relative;"

3.軟鍵盤撐起頁面下不來

用js控制focus blur

//input輸入框彈起軟鍵盤的解決方案。var bfscrolltop = document.body.scrollTop;$("input").focus(function () {  document.body.scrollTop = document.body.scrollHeight;}).blur(function () {  document.body.scrollTop = bfscrolltop;});
4.new Date()設定日期在IOS的相容問題

一般這樣建立一個日期變數

var d = new Date("2017-08-11 12:00:00");

發現在iOS中不相容,返回valid Date。IOS中不支援 - 連線日期需要寫成

var d = new Date("2017-08-11 12:00:00".replace(/-/g, "/"));
5.ios頁面滾動不流暢

首先你可能會給頁面的html和body增加了height: 100%, 然後就可能造成IOS上頁面滑動的卡頓問題。

解決方案是:

1.讓html和body固定100%(或者100vh),

2.然後再在內部放一個height:100%的div,設定overflow-y: auto;和-webkit-overflow-scrolling: touch;

.scroll-box{  /* 模態框之類的div不能放在這個容器中 */  height: 100%;  overflow-y: auto;  -webkit-overflow-scrolling: touch;  overflow-scrolling: touch;}

6.position:fixed/absolute隨螢幕滾動

注:ios裡貌似不支援fixed。。。這裡主要指absolute在position:fixed/absolute內加入:

-webkit-transform: translateZ(0);

抖動情況,則在內容區域,加入 :

overflow-y: auto;
7.點選元素產生背景或邊框怎麼去掉

ios使用者點選一個連結,會出現一個半透明灰色遮罩, 如果想要禁用,可設定-webkit-tap-highlight-color的alpha值為0去除灰色半透明遮罩;

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

winphone系統,點選標籤產生的灰色半透明背景,能通過設定去掉;

//特殊說明:有些機型去除不了,如小米2。對於按鈕類還有個辦法,不使用a或者input標籤,直接用div標籤

a,button,input,textarea{  -webkit-tap-highlight-color: rgba(0,0,0,0);   -webkit-user-modify:read-write-plaintext-only; //-webkit-user-modify有個副作用,就是輸入法不再能夠輸入多個字元}  // 也可以 * { -webkit-tap-highlight-color: rgba(0,0,0,0); }//winphone下"msapplication-tap-highlight" content=
8.IOS機型margin屬性無效問題?

(1) 設定html body的高度為百分比時,margin-bottom在safari裡失效

(2) 直接padding代替margin

9.Ios鍵盤換行變為搜尋?

首先,input 要放在 form裡面。

這時 "換行" 已經變成 “前往”。

如果想變成 “搜尋”,input 設定 type="search"。

10.iOS 1px border 實現

iOS裝置上,由於retina屏的原因,1px 的 border 會顯示成兩個物理畫素,所以看起來會感覺很粗,這是一個移動端開發常見的問題。解決方案有很多,但都有自己的優缺點。

0.5px border

從iOS 8開始,iOS 瀏覽器支援 0.5px 的 border,但是在 Android 上是不支援的,0.5px 會被認為是 0px,所以這種方法,相容性是很差的。

另外一種方法是背景漸變,

CSS3 有了漸變背景,可以通過漸變背景實現 1px 的 border,實現原理是設定 1px 的漸變背景,50% 有顏色,50% 是透明。

@mixin commonStyle() {  background-size: 100% 1px,1px 100% ,100% 1px, 1px 100%;  background-repeat: no-repeat;  background-position: top, right top,  bottom, left top;}@mixin border($border-color) {  @include commonStyle();  background-image:linear-gradient(180deg, $border-color, $border-color 50%, transparent 50%),  linear-gradient(270deg, $border-color, $border-color 50%, transparent 50%),  linear-gradient(0deg, $border-color, $border-color 50%, transparent 50%),  linear-gradient(90deg, $border-color, $border-color 50%, transparent 50%);}
11.ios與android的標籤表現不一致的問題

ios和android的select標籤還有input[type=”button”]在真機上的樣式會有區別,所以我們可以加上這一條css來消除ios和android的樣式差別:

-webkit-appearance: none;
12.打電話發簡訊
<a href="tel:020-11811922">打電話給:0755-10086a><a href="sms:10086">發簡訊給: 10086a>
▼原創系列推薦▼ 1.JavaScript 重溫系列(22篇全) 2.ECMAScript 重溫系列(10篇全) 3.JavaScript設計模式 重溫系列(9篇全) 4.正則 / 框架 / 演算法等 重溫系列(16篇全) 5. 【彙總】59篇原創系列彙總

你點的每個贊,我都認真當成了喜歡