手機端網頁所有內容根據螢幕大小自適應(大小,位置)
公司中有一個手機端網頁的設計稿,如下圖,尺寸是750*1334,通過chrome瀏覽器的除錯面板,我切換到手機模式,並且選擇iphone5型號的螢幕來除錯,i5的解析度是320*568,右上角的選單按鈕在設計稿中的尺寸是40*24,於是這裡就有了一個設計稿尺寸和螢幕尺寸的比例,根據這個比例將其與rem強行掛鉤。
JS:
var width=document.documentElement.clientWidth;//獲取螢幕的寬度
var height=document.documentElement.clientHeight;//獲取螢幕的高度
var bili1=width/750;//螢幕寬度與設計稿寬度的比例(750是設計稿的寬度)
var bili2=height/(1336-48);//螢幕高度與設計稿高度的比例(1336是設計稿的高度,其中48是設計稿中含有手機頂部的狀態列,需要去掉,1366-48才是真正需要顯示的東西)
var bili=bili1<bili2?bili1:bili2;//寬度的比例和高度的比例進行比較,取值最小的
var html = document.querySelector('html');//選擇html節點
var rem = 16;//手動設定rem與px的比例;
html.style.fontSize = rem + "px";//設定html的預設fontsize為16px。(注意,瀏覽器中最小值為12px,)
var __bili=bili/rem;//將比例和rem進行聯絡。
document.documentElement.style.setProperty('--bili', __bili+"rem");//設定css中的變數為--bili,值為__bili
CSS:
:root{
--bili:0.027rem;
}
.header{
height:calc(var(--bili) * 80);
}
這裡說下var __bili=bili/rem ,在我上面的設定裡,1rem=16px;而設計稿按鈕的寬度為40px,按照上面程式碼的比例320/750來算,在iphone5上的尺寸應該是:40*320/750 ,大概為17px。我們按照程式碼的變數來換成公式:width=relWidth*bili ==> width=relWidth*bili*rem/16 這裡bili就和rem存在聯絡了:bili/16就是程式碼上的bili/rem,那麼化簡下就是width=rekWidth*var(--bili) relWidth是設計稿中按鈕實際的寬度。在css中的引用:div{width:calc(40 * var(--bili))} 注意calc()運算子必須和數值用空格分開!
凡是涉及長度的例如padding,margin,height,width等都可以用calc(40 * var(--bili))的方式動態計算出實際的值,這樣就實現了100%的自適應,電腦端的也能夠自適應!
補充:最後需要在<header>裡新增<meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no">,其作用看屬性就知道,用來適應手機螢幕的寬度和高度
相容性:
設計稿:
效果圖: