這兩天要把公司之前的觸屏設備的客戶端應用作成h5的web應用,並且有針對不一樣設備和同一設備下的不一樣狀態(有windows豎屏和橫屏和android的平板),並且都有設計師爲其針對的不一樣設計標準包括字體大小和不一樣ui組件的大小,雖然當時通過討論,公司老員工建議就按照這個標準去作,不用考慮自適應,由於設備就這幾種,可是我是一直不甘心,總想把它作成能適配不一樣設備分辨率的東西,因此來研究這個問題(在瞭解rem以前,我會作自適應,但只是在作了佈局上的自適應,不包括字體)。javascript
由於在以前的公司作過的項目中的某些模塊參照過別的產品,發現過有用rem和em的,而後就來網上研究學習瞭解了下這幾種相對單位。其中就找到了這篇文章:http://isux.tencent.com/web-app-rem.html,發現這篇文章對除了rem來設計界面的其餘方法作了介紹和總結。文章總結了rem相對於其餘幾種設計方法的好處,其餘幾種方法的壞處,具體那些壞處朋友能夠去看下這篇文章。css
之因此以前沒有去研究學習rem,包括以前沒有去研究接受其餘的新技術,好比es6,前端mvvm框架、模塊化開發、項目構建,編譯,打包發佈工具等等。是由於在以前的所在公司,公司任務比較充實,天天都有任務要作,那時用的基本都是老技術,單純的用html,css,js,jq,easyui,bootstrap開發,雖然有點厭倦,寫的代碼比較low,但還好業務邏輯這方面比較有趣,有些界面實現也比較有趣(一直很喜歡作界面),加上我自己工做責任心強,因此那時天天還算過得充實。充實的結果致使我天天都在作任務,幾乎天天晚上7,8點下班回家,而後吃飯,再洗涑,再搞會其餘的,基本上就9點過,10點了,這樣下來一天也比較疲倦,就常常致使我無意再學習其餘新技術,只想休息放鬆下,那時我周6加班仍是比較頻繁,而後就基本只有週日了,可是因爲想睡懶覺和要洗衣服,打遊戲,因此學習時間也變得比較少了,總得意思就是學習時間變少了(可是我不是徹底不學習,但那時主要學習js和css去了,那本es5我看了好多遍,每次都有新收穫。),固然這其中很大緣由仍是我懶,其實我仍是寫了好些博客草稿,只不過都由於這個懶的緣由沒有去整理髮布(10篇沒有發佈)。。。。。html
可是那段時間仍是過得頗有價值的,鍛鍊了我編程的思惟邏輯(我是後臺出身,仍是有點面向對象的概念,學習js也不是那麼吃力。在學校學習了一年C#.NET,而後當初應聘的第一份工做是.net,可是公司框架已成熟,對前端需求大,我就去作了前端,而後愛上了前端,可是公司的幾個簡單經常使用的小接口仍是我寫的,雖然借鑑了些百度。到了如今的公司,因爲公司須要,我也會偶爾負責後端開發,好比公司如今的一個小型cms,我獨立開發,徹底獨立開發,從數據庫到c#.net的數據層,業務層(業務層不多,業務主要在前端,除了通用的數據接口,後端的業務層主要是一些安全驗證,好比對前端編碼過的where條件解碼,過濾sql,避免sql注入;全部的通常處理程序只是做爲一個入口,具體的代碼編譯進dll,雖然做用可能小,可是總比沒有好)等等(後臺用三層架構,沒用mvc),通用的數據接口和比較經常使用的接口是本身參照以前公司接口思想寫的(包括樹,grid分頁等),沒有用第三方框架。固然個人C#.NET仍是隻是皮毛,數據庫設計也是會相對比較簡單的的東西,表建立和視圖本身寫,存儲過程用的別個現成的稍微改了一點點(主要是分頁存儲過程等通用的,只是加了個where條件參數。等我把前端想學的學完了,我可能會去學sql,學存儲過程),固然我主要喜歡前端,之後也會一直向前端發展,後臺我只須要懂點皮毛就能夠了,有後臺那個概念就OK,主要就是了解B&S的先後端的交互,即瀏覽器http和服務器的交互,以及先後端的生命週期。)。由於業務邏輯複雜好玩,任務多,當業務邏輯多到我以爲個人代碼是垃圾,不堪入目,當時一直沒有好的方法去解決這些痛點,如今才體會到原來這些新技術就是解決這些痛點的,而且這些技術會規範你的項目開發邏輯,深深的體會到mvvm設計模式很適合web前端(這裏我很推崇vue,漸進式的前端框架,組件化的思想,相對其餘框架來講,它作模塊化開發,開發大型應用會比較簡單,環境搭建也很簡單,有官方的腳手架工具vue-cli(安裝cli以前,先安裝webpack,最好是用淘寶鏡像cnpm安裝),地址:http://cn.vuejs.org/v2/guide/installation.html)。前端
到了如今的一家公司,因爲公司的任務不是那麼多,時間也比較足,因此我在空閒時間會去研究怎麼讓個人代碼更簡潔、更具可讀性,更抽象、更高效的去實現功能業務需求,讓項目模塊具備可擴展,可複用,易於變動,高內聚低耦合等等。而後就去探索,發現不少驚喜,發現還有不少須要學習的新技術,實際上當你認真的去了解這些技術後,發現也沒有想象種那麼難,反而是讓你的開發變得更簡單。vue
迴歸正題,我之前作界面就是上面那篇文章裏提到的流式佈局(主要用bootstrap柵格佈局),寬度百分比,高度固定(最開始我高度也百分比,顯然不行),這種方式的壞處就是兼容性不是很好,只適應特定的幾種分辨率,也很差維護。下面我就來介紹下最終我以爲很好的rem(若是設計師沒用給出明確的組件大小,能夠結合bootstrap柵格佈局實現快速佈局,而且後期能夠改形成響應式佈局,能夠到bootstrap官網定製下載只包含柵格的css代碼)。java
/***************START*************************************/android
html { font-size: calc(100vw/3.75); }
document.documentElement.style.fontSize = window.innerWidth/3.75 + 'px'
document.documentElement.style.fontSize = window.innerWidth/10.80 + 'px',這樣在1080設備上的html的font-size=100px,0.14rem就等於14px;這樣就能兼容不一樣設備分辨率了,好比,若是在2160px設備分辨率下,html的font-size經計算就等於200px,那麼0.14rem=0.14rem*200=28px了。