所謂移動端適配,就是WebApp在不一樣尺寸的屏幕上等比顯示css
原理:經過設置 initial-scale
, 將全部設備佈局視口的寬度調整爲設計圖的寬度.html
//獲取meta節點 var metaNode = document.querySelector('meta[name=viewport]'); //定義設計稿寬度爲375 var designWidth = 375; //計算當前屏幕的寬度與設計稿比例 var scale = document.documentElement.clientWidth/designWidth; //經過設置meta元素中content的initial-scale值達到移動端適配 meta.content="initial-scale="+scale+",minimum-scale="+scale+",maximum-scale="+scale+",user-scalable=no";
rem:CSS的長度單位, 根元素字體大小的倍數,只有根元素字體大小有關; html 中的根元素即 html 元素。瀏覽器
大部分瀏覽器的默認字體大小都是16px,因此1rem = 16px;less
rem適配原理:佈局
font-size
便可實現等比適配//對屏幕大小劃分了html不一樣的font-size
@media screen and (min-width: 320px) {html{font-size:50px;}} @media screen and (min-width: 360px) {html{font-size:56.25px;}} @media screen and (min-width: 375px) {html{font-size:58.59375px;}} @media screen and (min-width: 400px) {html{font-size:62.5px;}} @media screen and (min-width: 414px) {html{font-size:64.6875px;}} @media screen and (min-width: 440px) {html{font-size:68.75px;}} @media screen and (min-width: 480px) {html{font-size:75px;}} @media screen and (min-width: 520px) {html{font-size:81.25px;}} @media screen and (min-width: 560px) {html{font-size:87.5px;}} @media screen and (min-width: 600px) {html{font-size:93.75px;}} @media screen and (min-width: 640px) {html{font-size:100px;}} @media screen and (min-width: 680px) {html{font-size:106.25px;}} @media screen and (min-width: 720px) {html{font-size:112.5px;}} @media screen and (min-width: 760px) {html{font-size:118.75px;}} @media screen and (min-width: 800px) {html{font-size:125px;}} @media screen and (min-width: 960px) {html{font-size:150px;}}
var designWidth = 375; // 設計稿寬度 var remPx = 100; // 在屏幕寬度375px,的時候,設置根元素字體大小 100px var scale = window.innerWidth / designWidth; //計算當前屏幕的寬度與設計稿比例 // 根據屏幕寬度 動態計算根元素的 字體大小 document.documentElement.style.fontSize = scale*remPx + 'px';
這裏咱們計算當前屏幕的寬度與設計稿比後用比例scale乘上100,是由於rem都是基於font-size值設置的,100便於計算,值能夠爲任意數,好比10,可是Chrome中最小爲12,因此這裏選擇用100;字體
width: 6.4rem
font-size:0.16rem
從而達到rem適配。spa
// 計算屏幕寬度 var screen = document.documentElement.clientWidth; // 計算字體大小,取屏幕寬度的16分之一 var size = screen / 16; // 設置根元素字體大小 document.documentElement.style.fontSize = size + 'px';
js獲取當前屏幕的寬度,將屏幕寬度的16分之一設置給html的font-sizescala
// 此時設計稿的寬度爲375,定義一個less變量等於16分之一的設計稿寬度 @rem: 375/16rem;
若是此時設計稿中的16能夠爲任意值,你設置多少,js中屏幕寬度就除於多少再賦值給html的font-size。設計
若設計稿中的某元素設置寬高爲200pxcode
.box{ width:200px; height:200px; }
此時能夠替換爲:
.box{ width:200/@rem; height:200/@rem; }
分析:
設計稿中的元素尺寸都是基於設計稿的寬度而定,如上述,200px的寬度是基於設計稿375px而定的,但當js中獲取的寬度發生改變時,須要解決適配問題。假設js中獲取的此時屏幕寬度爲750px,那麼此時html的font-size值爲750/16 px;
此時計算box的width爲400px
注:1rem = 1 html的font-size
此方法不須要進行單位數值的計算,只須要定義一個less變量,再查找替換將單位px換成 /@rem 便可。
這種方法跟第四種雷同,但不須要再在less中定義變量,只須要進行js獲取配合查找替換px便可。
// 計算屏幕寬度 var screen = document.documentElement.clientWidth; // 設置根元素字體大小 document.documentElement.style.fontSize = screen + 'px';
.box{ width:200px; height:200px; }
.box{ width:200/375rem; height:200/375rem; }
分析:
這種方法是js動態獲取屏幕寬度,直接將html的font-size設置爲屏幕的寬度,再在less中進行換算。
若此時js獲取的屏幕寬度爲750px,html的font-size值設置爲750px後,此時計算box的width爲400px
200/375rem = 200/375*750 px = 400px