直接解決辦法:
如果元素的高度是用100%表示,那么,安卓的鍵盤彈出時,高度會發生變化,導致布局混亂,所以最好給高度設置像素高度
$("html,body").height(window.innerHeight);
或者
document.body.querySelector("#main").style.height = window.innerHeight + "px";
原因分析:
一、背景
在做移動端h5頁面時,因為遇到了安卓端軟鍵盤會導致頁面壓縮變形的問題,經過查閱與思考,終於解決問題,以下為解決過程。
二、圖示
修改前(安卓)
修改前(IOS端)
修改后(安卓端)
三、原因分析
安卓端:安卓中,如果將footer元素
設置為position:fixed
或absolute
,因為軟鍵盤會改變頁面的高度(將頁面頂上來),因此footer元素
也跟着移動上來,導致頁面變形;
IOS端:蘋果的軟鍵盤是覆蓋的(分層),因此H5頁面顯示沒有什么問題。
四、解決方法
安卓端解決input鍵盤彈出導致頁面壓縮變形的方法為:
方法1:將元素設置成static
或者relative
,不要脫離文檔流。
因為使用fixed
或者absolute
,會使得元素跟隨body
的底部移動,而安卓端軟鍵盤將導致body
高度變小而導致變形。
方法2:若想設置成absolute
,則可以通過js固定其父級元素(如body
或者父級div
)的高度
例如1:設置元素高度時以px
為單位設置,不要以%
或vh
為單位
- 若需動態適應不同手機屏幕高度(以
px
為單位),可以在頁面渲染時用js獲取屏幕高度,經過計算后得出元素的高度
let Height = window.innerHeight - 160; $('div').height(Height);
例如2:寫個監聽resize事件(瀏覽器窗口大小調整時觸發)
let Height = $('body').height(); $(window).resize(function() { $('body').height(Height); });
當鍵盤彈出的時候,固定body
高度不變。
注:不要設置成fixed