相信不少剛開始寫移動端頁面的同志們都要面對頁面自適應的問題,固然解決方案不少,好比:百分比佈局,彈性佈局flex(什麼是flex),也都能得到不錯的效果,這裏主要介紹的是本人在實踐中用的最順手最簡單的佈局方案——rem(什麼是rem)佈局javascript
rem佈局很是簡單,首頁你只需在頁面引入這段原生js代碼就能夠了----其實這種自適應方案是一種「等比例縮放」,在手機上會隨屏幕大小而變化,可是在ipad上面圖標、間距會過大,,, 這裏推薦rem佈局(進階版)css
1 (function (doc, win) { 2 var docEl = doc.documentElement, 3 resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', 4 recalc = function () { 5 var clientWidth = docEl.clientWidth; 6 if (!clientWidth) return; 7 if(clientWidth>=640){ 8 docEl.style.fontSize = '100px'; 9 }else{ 10 docEl.style.fontSize = 100 * (clientWidth / 640) + 'px'; 11 } 12 }; 13 14 if (!doc.addEventListener) return; 15 win.addEventListener(resizeEvt, recalc, false); 16 doc.addEventListener('DOMContentLoaded', recalc, false); 17 })(document, window);
這是rem佈局的核心代碼,這段代碼的大意是:
若是頁面的寬度超過了640px,那麼頁面中html的font-size恆爲100px,不然,頁面中html的font-size的大小爲: 100 * (當前頁面寬度 / 640)
因而,問題來了,爲何要這樣?別急,我先來一一回答html
width: 3rem; height: 2rem;
那要是寬55px,高37px呢?而後通過換算,,設置以下 ↓ width: 2.75rem; height: 1.85rem;
是否是發現這換算起來有點麻煩啊,,,(固然,你要是心算帝請無視)width: 0.55rem; height: 0.37rem;
是否是換算起來簡單多了?!1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width,maximum-scale=1.0,user-scalable=no,initial-scale=1.0"> 6 <script> 7 (function (doc, win) { 8 var docEl = doc.documentElement, 9 resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', 10 recalc = function () { 11 var clientWidth = docEl.clientWidth; 12 if (!clientWidth) return; 13 if(clientWidth>=640){ 14 docEl.style.fontSize = '100px'; 15 }else{ 16 docEl.style.fontSize = 100 * (clientWidth / 640) + 'px'; 17 } 18 }; 19 20 if (!doc.addEventListener) return; 21 win.addEventListener(resizeEvt, recalc, false); 22 doc.addEventListener('DOMContentLoaded', recalc, false); 23 })(document, window); 24 </script> 25 /*你引進的資源*/ 26 <title>標題</title> 27 </head> 28 <body> 29 /*你的代碼*/ 30 </body> 31 </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"> <script> (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; if (clientWidth >= 640) { docEl.style.fontSize = '100px'; } else { docEl.style.fontSize = 100 * (clientWidth / 640) + 'px'; } }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window); </script> <title>Title</title> <link rel="stylesheet" href="css/style.css"/> <link rel="stylesheet" href="css/index.css"> </head> <body> <header></header> <section></section> <footer></footer> </body> <script src="js/XXX.js"></script> </html>