1. 程式人生 > >便於計算的rem使用方法,以及注意事項

便於計算的rem使用方法,以及注意事項

一、相容性。

目前,IE9+,Firefox、Chrome、Safari、Opera 的主流版本都支援了rem(大膽用吧,目前幾乎所有手機瀏覽器都支援rem)

二、什麼是rem。

rem是相對於根元素html字型大小來計算的,即( 1rem = html字型大小 )

三、使用rem佈局有什麼優點。

優點可大啦,他的強大可以讓你不在考慮不同尺寸螢幕的手機,和製作PC端一樣的寫法,只需要設定好引數,就可以為所欲為了。

四、你可能會疑惑,但只要你看了這段JS後你會明白的,看不懂的小夥伴們,看了第五點的介紹你就會明白了。

不多說,上程式碼

//                            _ooOoo_
//                           o8888888o
//                           88" . "88
//                           (| -_- |)
//                            O\ = /O
//                        ____/`---'\____
//                      .   ' \\| |// `.
//                       / \\||| : |||// \
//                     / _||||| -:- |||||- \
//                       | | \\\ - /// | |
//                     | \_| ''\---/'' | |
//                      \ .-\__ `-` ___/-. /
//                   ___`. .' /--.--\ `. . __
//                ."" '< `.___\_<|>_/___.' >'"".
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |
//                 \ \ `-. \_ __\ /__ _/ .-` / /
//         ======`-.____`-.___\_____/___.-`____.-'======
//                            `=---='
//
//         .............................................
//                  佛祖鎮樓                  BUG辟易
//             佛曰:
//                  寫字樓裡寫字間,寫字間里程序員;
//                  程式人員寫程式,又拿程式換酒錢。
//                  酒醒只在網上坐,酒醉還來網下眠;
//                  酒醉酒醒日復日,網上網下年復年。
//                  但願老死電腦間,不願鞠躬老闆前;
//                  賓士寶馬貴者趣,公交自行程式設計師。
//                  別人笑我忒瘋癲,我笑自己命太賤;
//                  不見滿街漂亮妹,哪個歸得程式設計師?
//                  
(function(designWidth, maxWidth) {
    var doc = document,
        win = window,
        docEl = doc.documentElement,
        remStyle = document.createElement("style"),
        tid;

    function refreshRem() {
        var width = docEl.getBoundingClientRect().width;
        maxWidth = maxWidth || 540;
        width>maxWidth && (width=maxWidth);
        var rem = width * 100 / designWidth;
        remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
    }

    if (docEl.firstElementChild) {
        docEl.firstElementChild.appendChild(remStyle);
    } else {
        var wrap = doc.createElement("div");
        wrap.appendChild(remStyle);
        doc.write(wrap.innerHTML);
        wrap = null;
    }
    refreshRem();

    win.addEventListener("resize", function() {
        clearTimeout(tid);
        tid = setTimeout(refreshRem, 300);
    }, false);

    win.addEventListener("pageshow", function(e) {
        if (e.persisted) {
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 300);
        }
    }, false);

    if (doc.readyState === "complete") {
        doc.body.style.fontSize = "16px";
    } else {
        doc.addEventListener("DOMContentLoaded", function(e) {
            doc.body.style.fontSize = "16px";
        }, false);
    }
})(750, 750);

五、給大家介紹下如何使用上面這段js和這段程式碼的意義。

1)用法很簡單,只需要在html檔案head最上面加入視口程式碼

<meta name="viewport" content="width=device-width, initial-scale=1.0">

2)然後新建一個js資料夾,將我們的佛祖和動態計算html字型大小的js程式碼放進去,然後在視口下面引入,注意,引入的script標籤需要加上 async="async",不然頁面在載入時佈局會出現短時間的亂

3)使用過程中,這段js程式碼有兩個引數可以傳入,這兩個引數就是你的設計師給你的設計稿寬度,填上就可以了,

4)使用很簡單,設計稿寬度除以100使用即可(例如:設計稿寬度300px = 3rem,採用的是除100來換算,從而使在使用過程中更方便,無需使用rem單位換算工具)

5)rem不僅僅可以用在移動端佈局,還可以用在PC端上,

例如:設計師給了你內容寬度1200px以上的設計搞要你做自適應時,你完全可以不用擔心,只需要量一下設計稿寬度,修改我們js的兩個引數修改為設計稿內容寬度即可。(提個醒,記得加上視口)

6)這段js主要是動態修改hrml字型大小,從而做到rem單位不動的情況下,自動適應所有手機端螢幕大小,想一下1rem在不同寬度手機上的值都是不一樣的,是不是很完美呢。

7)此方法內有一段程式碼是可以修改的,修改為螢幕高度會有意想不到的效果,大家可以自我思考一下。

var width = docEl.getBoundingClientRect().width;//這段程式碼可修改

8)引用了這一段js的指令碼檔案script標籤 記得加上   async="async"  屬性  不然會導致進入頁面時,頁面出現短時間錯亂問題

六、在用rem的時候可能會遇到點小坑,下面小編給大家列出來幾個經典的。

1)border:0.01rem solid #ccc;  邊框的0.01rem在手機上會看不見,所以邊框的0.01rem建議使用1px替代。

2)background-size使用rem無效,建議:修改背景圖大小不要卡死,使用百分比去控制,比如background-size: 100% auto;等

在你看完這篇文章之後,如果覺得對您有幫助,謝謝關注

( 碼字不易,如果此文章對您有幫助,左上角麻煩點個贊,謝謝)