以iphone6設計圖為基准
做法一:
<html> <head> <title></title> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" /> <style> body{ margin: 0; padding: 0; } .box{ width: 2rem; // 通過測量的尺寸除以100得到rem值 height: 2rem; background: red; } </style> </head> <body> <div class="box"></div> <script> document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + 'px'; // 這個7.5是設計稿的寬度除以100得到的(如果以iphone5設計圖為基准,7.5 => 6.4) </script> </body> </html>
做法二:
<html> <head> <title></title> <meta charset="utf-8" /> <meta name="viewport" content="" /> <style> body{ margin: 0; padding: 0; } .box{ width: 2.66666667rem; // 通過測量的尺寸除以動態設置的html字體大小得到rem值(需要頻繁使用計算器計算,影響開發效率) height: 2.66666667rem; background: red; } </style> </head> <body> <div class="box"></div> <script> // 通過設備像素比算出縮放比率 var scale = 1 / window.devicePixelRatio; // 動態修改視口縮放比率 document.querySelector('meta[name="viewport"]').setAttribute('content','width=device-width,initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no'); document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px'; // 10是定死的一個值,這是和網易有很大的區別(不過網易沒有動態修改視口縮放比率) </script> </body> </html>
兩者頁面元素尺寸都以rem為單位,但是文字字體大小不要使用rem換算,
而是使用媒體查詢來進行動態設置,比如下面的代碼就是網易的代碼:
@media screen and (max-width: 321px) { body { font-size:16px } } @media screen and (min-width: 321px) and (max-width:400px) { body { font-size:17px } } @media screen and (min-width: 400px) { body { font-size:19px } }
或者:
@media screen and (max-width: 321px) { header,footer { font-size:16px } } @media screen and (min-width: 321px) and (max-width:400px) { header,footer { font-size:17px } } @media screen and (min-width: 400px) { header,footer { font-size:19px } }