REM

Equal to the computed value of "font-size" on the root element

rem是CSS3新增的相對(duì)長(zhǎng)度單位土匀,是指相對(duì)于根元素htmlfont-size計(jì)算值的大小谤牡。簡(jiǎn)單可理解為屏幕寬度的百分比蛉迹。

REM瀏覽器支持情況

em相同的是它們都是使用元素設(shè)定字體大小纵柿,不同的是em是根據(jù)父級(jí)元素設(shè)置大小题翰。而rem在根據(jù)指定html根元素的字符大小而定的秉宿,從IE6到Chrome中先煎,默認(rèn)根元素的font-size都是16px的。如果想要設(shè)置12px的字體大小也就是12px/16px = 0.75rem茅逮。

  • 由于px是相對(duì)固定單位璃赡,字號(hào)大寫直接被定死,無(wú)法隨著瀏覽器進(jìn)行縮放献雅。
  • emrem都是相對(duì)單位碉考,em是相對(duì)于其父元素的font-size,頁(yè)面層級(jí)越深挺身,em換算越復(fù)雜侯谁,麻煩。
  • rem直接相對(duì)于根元素html章钾,避開(kāi)層級(jí)關(guān)系墙贱,移動(dòng)端新型瀏覽器對(duì)其支持較好。
單位轉(zhuǎn)換

使用em可改變HTML的默認(rèn)font-size贱傀,如果設(shè)置為62.5%惨撇,則表示將默認(rèn)字體大小從16px修改為10px,即10px / 16px = 62.5%府寒。

html{
  font-size:62.5%; 
}

前端適配是為了讓設(shè)計(jì)稿在大部分設(shè)備上得到一致性的展示

  • 強(qiáng)制meta viewport寬度為設(shè)計(jì)稿寬度
    問(wèn)題是某些瀏覽器的webview中會(huì)出現(xiàn)兼容問(wèn)題魁衙,且對(duì)于1像素會(huì)無(wú)法渲染报腔。

  • 使用rem自適應(yīng)布局
    在背景和字體上存在某些問(wèn)題

不同分辨率下的font-size

制作案例

設(shè)計(jì)稿與制作稿

備注說(shuō)明

  • 設(shè)計(jì)稿尺寸為750x1180
  • 適配除了iPadPro上邊距有些問(wèn)題其他基本合格
  • 真機(jī)尚待測(cè)試

注意事項(xiàng)

  • JS代碼在CSS之前加載
  • 換算方案使用JS后計(jì)算尺寸后,將對(duì)應(yīng)的像素尺寸除以100得到rem單位剖淀。
  • CSS RESET添加設(shè)置了HTML字體初始值和Body字體的初始值纯蛾,已避免JS無(wú)法接在等問(wèn)題。

頁(yè)面結(jié)構(gòu)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=0"/>
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <meta name="format-detection" content="telephone=no"/>
    <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
    <meta http-equiv="Cache-Control" content="no-cache" />
    <title>room</title>
    <script></script>
    <style></style>
</head>
<body>
    <div class="fixed-top bg bg-main"></div>
    <div class="contianer">
        <div class="bg title member"></div>
        <div class="userlist">
            <div class="useritem">
                <img src="./assets/img/room/avatar.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
            <div class="useritem">
                <img src="./assets/img/room/avatar.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
            <div class="useritem">
                <img src="./assets/img/room/avatar.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
            <div class="useritem">
                <img src="./assets/img/room/avatar.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
            <div class="useritem">
                <img src="./assets/img/room/avatar.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
            <div class="useritem">
                <img src="./assets/img/room/avatar.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
            <div class="useritem">
                <img src="./assets/img/room/nopic.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
            <div class="useritem">
                <img src="./assets/img/room/nopic.png" class="avatar"/>
                <p>玩家昵稱</p>
            </div>
        </div>
        <div class="bg title info"></div>
        <div class="bg match"></div>
        <div class="fixed-bottom">
            <a href="javascript:;" class="bg btn-join" id="join">加入游戲</a>
            <a href="javascript:;" class="bg btn-download" id="download">下載游戲</a>
        </div>
    </div>
</body>
</html>

自適應(yīng)腳本

/**
 * REM自適應(yīng)
 * designWidth 設(shè)計(jì)稿實(shí)際寬度
 * maxWidth 制作稿的最大寬度
 * */
;(function(designWidth, maxWidth){
    var docEle = document.documentElement;
    //設(shè)置viewport
    var meta;
    var viewportContent = "width=device-width,initial-scale=1,maximum-scale=1.0,user-scalable=no,viewport-fit=cover";//viewport-fit=cover用于適配iphoneX
    meta = document.querySelector("meta[name=viewport]");
    if(meta){
        meta.setAttribute("content", viewportContent);
    }else{
        meta = document.createElement("meta");
        meta.setAttribute("name","viewport");
        meta.setAttribute("content", viewportContent);
        if(docEle.firstElementChild){
            docEle.firstElementChild.appendChild(meta);
        }else{
            var div = document.createElement("div");
            div.appendChild(meta);
            document.write(div.innerHTML);
            div = null;
        }
    }

    //創(chuàng)建REM樣式
    var styleEle = document.createElement("style");
    if(docEle.firstElementChild){
        docEle.firstElementChild.appendChild(styleEle);
    }else{
        var div = document.createElement("div");
        div.appendChild(styleEle);
        document.write(div.innerHTML);
        div = null;
    }

    //等待viewport設(shè)置好后執(zhí)行refreshRem
    var refreshRem = function(){
        var width = docEle.getBoundingClientRect().width;
        maxWidth = maxWidth || 540;//限制在540的屏幕下纵隔,這樣100%就跟10rem不一樣了
        width > maxWidth && (width = maxWidth);

        var rem = width * 100 / designWidth;
        styleEle.innerHTML = "html{font-size:"+rem+"px !important;}";
    };
    refreshRem();

    //事件監(jiān)聽(tīng)
    var timeID;
    window.addEventListener("resize", function(){
        clearTimeout(timeID);//防止執(zhí)行兩次
        timeID = setTimeout(refreshRem, 300);
    },false);
    window.addEventListener("pageshow", function(evt){
        //瀏覽器后退時(shí)重新計(jì)算
        if(evt.persisted){
            clearTimeout(timeID);
            timeID = setTimeout(refresh, 300);
        }
    },false);

    //事件監(jiān)聽(tīng)
    var defaultFontSize = "16px";
    if(document.readState === "complete"){
        document.body.style.fontSize = defaultFontSize;
    }else{
        document.addEventListener("DOMContentLoaded", function(evt){
            document.body.style.fontSize = defaultFontSize;
        }, false);
    }
})(720, 750);

重置樣式

/*reset css*/
body,dl,dd,ul,ol,h1,h2,h3,h4,h5,h6,pre,form,input,textarea,p,hr,thead,tbody,tfoot,th,td{margin:0;padding:0;}
ul,ol{list-style:none;}
a{text-decoration:none;}
html{-ms-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none;font-size:50px;}
body{line-height:1.5;font-size:16px;}
body,button,input,select,textarea{font-family:'helvetica neue',tahoma,'hiragino sans gb',stheiti,'wenquanyi micro hei',5FAE8F6F96C59ED1,5B8B4F53,sans-serif;}
b,strong{font-weight:bold;}
i,em{font-style:normal;}
table{border-collapse:collapse;border-spacing:0;}
table th,table td{border:1px solid #ddd;padding:5px;}
table th{font-weight:inherit;border-bottom-width:2px;border-bottom-color:#ccc;}
img{border:0 none;width:auto;max-width:100%;vertical-align:top;}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;vertical-align:baseline;}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}
button[disabled],input[disabled]{cursor:default;}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}
input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}
input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
@media screen and (-webkit-min-device-pixel-ratio:0){
    input{line-height:normal!important;}
}
select[size],select[multiple],select[size][multiple]{border:1px solid #AAA;padding:0;}
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}
audio,canvas,video,progress{display:inline-block;}

頁(yè)面樣式

/*page css*/
body{
    background-color:#6A3B27;
}
.fixed-top{
    position:fixed;
    top:0;
    left:0;
    z-index:-10;
    zoom:1;
}
.bg{
    background-repeat:no-repeat;
    background-size:cover;
    background-position:center 0; 
}
.bg-main{
    width:100%;
    min-width:7.2rem;
    height:100%;
    max-height:11.8rem;
    overflow:hidden;
    background-image:url("./assets/img/room/bg.jpg");
}
.fixed-bottom{
    position:fixed;
    bottom:0;
    left:0;
    right:0;
    z-index:20;
}
.fixed-bottom>a{
    width: 50%;
    height:100%;
    min-height:1.1rem;
    line-height: 1.1rem;
    overflow:hidden;
    cursor:pointer;
    display:block;
    text-indent:-99rem;
    text-align:center;
    float: left;
}
.fixed-bottom>.bg.btn-download{
    background-image:url("./assets/img/room/download.png");
}
.fixed-bottom>.bg.btn-join{
    background-image:url("./assets/img/room/join.png");
}
.title{
    position:absolute;
    width:3.54rem;
    height:0.67rem;
    left: 50%;
    margin-left:-1.77rem;
    z-index:10;
}
.title.member{
    top:2.42rem;
    background-image:url("./assets/img/room/room_member.png");
}
.title.info{
    top:6.98rem;
    background-image:url("./assets/img/room/room_info.png");
}
.userlist{
    z-index:10;
    position:absolute;
    top: 3.25rem;
    width:6.4rem;
    left: 50%;
    margin-left:-3.2rem;
    display:block;
}
.userlist .useritem{
    width:1.6rem;
    float:left;    
    text-align: center;
}
.userlist .useritem p{
    color:#EEDF9C;
    margin:0 auto;
    text-align:center;
    font-size:0.22rem;
}
.userlist .useritem .avatar{
    width:1.37rem;
    margin: 0 auto;
}
.match{
    z-index: 10;
    position: absolute;
    top: 7.74rem;
    height: 2.77rem;
    width: 6.42rem;
    left:50%;
    margin-left:-3.21rem;
    background-image:url("./assets/img/room/room_table.png");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翻诉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子巨朦,更是在濱河造成了極大的恐慌米丘,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糊啡,死亡現(xiàn)場(chǎng)離奇詭異拄查,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)棚蓄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門堕扶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人梭依,你說(shuō)我怎么就攤上這事稍算。” “怎么了役拴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵糊探,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我河闰,道長(zhǎng)科平,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任姜性,我火速辦了婚禮瞪慧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘部念。我一直安慰自己弃酌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布儡炼。 她就那樣靜靜地躺著妓湘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乌询。 梳的紋絲不亂的頭發(fā)上多柑,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音楣责,去河邊找鬼竣灌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛秆麸,可吹牛的內(nèi)容都是我干的初嘹。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼沮趣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屯烦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起房铭,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驻龟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后缸匪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體翁狐,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年凌蔬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了露懒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砂心,死狀恐怖懈词,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辩诞,我是刑警寧澤坎弯,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站译暂,受9級(jí)特大地震影響抠忘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秧秉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一褐桌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧象迎,春花似錦荧嵌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至汪厨,卻和暖如春赃春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劫乱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工织中, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锥涕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓狭吼,卻偏偏與公主長(zhǎng)得像旁蔼,于是被迫代替她去往敵國(guó)和親唤衫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子询筏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容