px是固定單位,不一樣分辨率下效果不同,致使網頁佈局出現誤差。html
em是根據父元素來改變字大小web
rem是根據根元素html來改變字體大小,只要改變了根元素的font-size就能夠改變全部字體的大小。app
1,佈局
html{font-size:20px;}字體
body{width:6rem;}spa
此處1rem=20pxscala
2,code
html{font-size:62.5%;}htm
body{width:6rem;}blog
此處1rem=10px;由於默認1rem=16px;
10/16=62.5%
咱們的目的是分辨率不一樣,字體大小也不一樣,即適應屏幕分辨率。那麼怎樣才能夠讓rem的大小隨着分辨率而變化呢?
1,media query,這個不是通用性方法,根據經常使用的分辨率制定rem。
1 html {font-size : 20px;} 2 @media only screen and (min-width: 401px){ 3 html {font-size: 25px !important;} 4 } 5 @media only screen and (min-width: 428px){ 6 html {font-size: 26.75px !important;} 7 } 8 @media only screen and (min-width: 481px){ 9 html {font-size: 30px !important; } 10 } 11 @media only screen and (min-width: 569px){ 12 html {font-size: 35px !important; } 13 } 14 @media only screen and (min-width: 641px){ 15 html {font-size: 40px !important; } 16 }
2,js方法
1 <script> 2 (function (doc, win) { 3 var docEl = doc.documentElement, 4 resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', 5 recalc = function () { 6 var clientWidth = docEl.clientWidth; 7 if (!clientWidth) return; 8 clientWidth=(clientWidth>640)?640:clientWidth; 9 docEl.style.fontSize = 20 * (clientWidth / 320) + 'px'; 10 }; 11 12 if (!doc.addEventListener) return; 13 win.addEventListener(resizeEvt, recalc, false); 14 doc.addEventListener('DOMContentLoaded', recalc, false); 15 })(document, window); 16 </script>
1,流式佈局
寬度用百分比;高度用px單位,即高度固定。大分辨率下變形。
固然能夠讓高度值爲rem單位;寬度也要注意兼容性問題。
2,限定寬度
固定的320px,大分辨率下,兩邊留白。不提倡。
3,響應式
不瞭解
道聽途說:直接從web page直接轉換爲web app。對大公司來講工做量大,維護難,中小企業能夠使用,節約成本。
4,設置viewport,縮放
<meta name="viewport" content="width=320,maximum-scale=1.3,user-scalable=no" />
效率高,效果也不錯。