這是rem佈局的核心代碼,這段代碼的大意是:
若是頁面的寬度超過了640px,那麼頁面中html的font-size恆爲100px,不然,頁面中html的font-size的大小爲: 100 * (當前頁面寬度 / 640)
因而,問題來了,爲何要這樣?別急,我先來一一回答javascript
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,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> 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>
2017-1-23 附加內容:css
rem這是個低調的css單位,近一兩年開始嶄露頭角,有許多同窗對rem的評價不一,有的在嘗試使用,有的在使用過程當中遇到坑就棄用了。可是我對rem綜合評價是用來作web app它絕對是最合適的人選之一。html
rem(font size of the root element)是指相對於根元素的字體大小的單位。簡單的說它就是一個相對單位。看到rem你們必定會想起em單位,em(font size of the element)是指相對於父元素的字體大小的單位。它們之間其實很類似,只不過一個計算的規則是依賴根元素一個是依賴父元素計算。前端
這裏我特別強調web app,web page就不能使用rem嗎,其實也固然能夠,不過出於兼容性的考慮在web app下使用更加能突顯這個單位的價值和能力,接下來咱們來看看目前一些企業的web app是怎麼作屏幕適配的。java
最近iphone6一下出了兩款尺寸的手機,致使的移動端的屏幕種類更加的混亂,記得一兩年前作web app有一種作法是以320寬度爲標準去作適配,超過320的大小仍是以320的規格去展現,這種實現方式以淘寶web app爲表明做,可是近期手機淘寶首頁進行了改版,採用了rem這個單位,首頁之內依舊是和之前同樣各類混亂,有定死寬度的頁面,也有那種流式佈局的頁面。web
咱們如今在切頁面佈局的使用經常使用的單位是px,這是一個絕對單位,web app的屏幕適配有不少中作法,例如:流式佈局、限死寬度,還有就是經過響應式來作,可是這些方案都不是最佳的解決方法。瀏覽器
例如流式佈局的解決方案有很多弊端,它雖然可讓各類屏幕都適配,可是顯示的效果極其的很差,由於只有幾個尺寸的手機可以完美的顯示出視覺設計師和交互最想要的效果,可是目前行業裏用流式佈局切web app的公司仍是挺多的,看看下面我收集的一些案例:安全
1.亞馬遜app
2.攜程iphone
3.蘭亭
上面的網站都是採用的流式佈局的技術實現的,他們在頁面佈局的時候都是經過百分比來定義寬度,可是高度大都是用px來固定住,因此在大屏幕的手機下顯示效果會變成有些頁面元素寬度被拉的很長,可是高度仍是和原來同樣,實際顯示很是的不協調,這就是流式佈局的最致命的缺點,每每只有幾個尺寸的手機下看到的效果是使人滿意的,其實不少視覺設計師應該沒法接受這種效果,由於他們的設計圖在大屏幕手機下看到的效果至關因而被橫向拉長來同樣。
流式佈局並非最理想的實現方式,經過大量的百分比佈局,會常常出現許多兼容性的問題,還有就是對設計有不少的限制,由於他們在設計之初就須要考慮流式佈局對元素形成的影響,只能設計橫向拉伸的元素佈局,設計的時候存在不少侷限性。
還有一種是固定頁面寬度的作法,早期有些網站把頁面設置成320的寬度,超出部分留白,這樣作視覺,前端都挺開心,視覺在也不用被流式佈局限制本身的設計靈感了,前端也不用在搞坑爹的流式佈局。可是這種解決方案也是存在一些問題,例如在大屏幕手機下兩邊是留白的,還有一個就是大屏幕手機下看起來頁面會特別小,操做的按鈕也很小,手機淘寶首頁起初是這麼作的,但近期改版了,採用了rem。
響應式這種方式在國內不多有大型企業的複雜性的網站在移動端用這種方法去作,主要緣由是工做大,維護性難,因此通常都是中小型的門戶或者博客類站點會採用響應式的方法從web page到web app直接一步到位,由於這樣反而能夠節約成本,不用再專門爲本身的網站作一個web app的版本。
天貓的web app的首頁就是採用這種方式去作的,以320寬度爲基準,進行縮放,最大縮放爲320*1.3 = 416,基本縮放到416都就能夠兼容iphone6 plus的屏幕了,這個方法簡單粗暴,又高效。說實話我以爲他和用接下去咱們要講的rem都很是高效,不過有部分同窗使用過程當中反應縮放會致使有些頁面元素會糊的狀況。
上面講了一大堆目前大部分公司主流的一些web app的適配解決方案,接下來說下rem是如何工做的。
上面說過rem是經過根元素進行適配的,網頁中的根元素指的是html咱們經過設置html的字體大小就能夠控制rem的大小。