Rem布局

1.什么是rem

rem是CSS3引入的一種相對(duì)尺寸單位卢厂,其值等于根元素html的font-size值疾渣。
所謂的相對(duì)漾肮,就是指其錨定于根元素html的font-size值清焕。當(dāng)根元素html的font-size值發(fā)生變化時(shí),1rem的具體值也會(huì)發(fā)生變化蝠猬。

2.為什么要使用rem布局

為了解決界面在不同分辨率設(shè)備上的適配問題切蟋。下面是一個(gè)簡(jiǎn)單的頁(yè)面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">    
    <title>Rem Test</title>
    <style>
        .box1{
            width: 150px;
            background-color: #bfa;
            text-align:center;
            margin: 50px auto;
        }
    </style>
</head>
<body>
    <div class="box1">hello world</div>
</body>
</html>

用不同分辨率(375*667 / 820*1180像素)的設(shè)備顯示,效果如下:


可以看到在iPhone中比較合適的內(nèi)容對(duì)于iPad Air來說就顯得有些太小了榆芦。這是因?yàn)轫?yè)面中使用的是固定尺寸單位px柄粹。
我們希望hello world及其所在的方塊在不同的設(shè)備上能夠以相似的比例呈現(xiàn)出來。

3.如何使用rem布局

rem布局匆绣,其實(shí)本質(zhì)上就是等比縮放驻右。所有需要?jiǎng)討B(tài)布局的元素不再使用px固定尺寸,而是采用rem相對(duì)尺寸犬绒。
我們根據(jù)設(shè)備的尺寸用 javaScript 動(dòng)態(tài)計(jì)算出rem換算成px后的值旺入,并調(diào)整body元素的文字大小。
當(dāng)屏幕較大時(shí)凯力,設(shè)置 font-size 為較大值茵瘾,元素就會(huì)變大;當(dāng)屏幕較小時(shí)咐鹤,設(shè)置 font-size 為較小值拗秘,元素就會(huì)變小。
具體步驟如下:

3.1獲取設(shè)備的屏幕的寬度
var deviceWidth = document.documentElement.clientWidth || window.innerWidth

當(dāng)頁(yè)面的內(nèi)容太多無法在一個(gè)屏幕中顯示時(shí)祈惶,我們比較習(xí)慣通過上下滑動(dòng)屏幕或者鼠標(biāo)滾輪讓更多的內(nèi)容顯示出來雕旨,而不是橫向滾動(dòng)條。
所以捧请,我們一般根據(jù)屏幕的寬度來調(diào)整頁(yè)面使其盡可能在橫向上不要超出屏幕凡涩。

3.2設(shè)置根元素html的font-size值(1rem基準(zhǔn)值)
document.documentElement.style.fontSize = (deviceWidth / 7.5) + 'px'

代碼中的7.5只是一個(gè)參考值,可以根據(jù)需要自由調(diào)整疹蛉。

3.3設(shè)置body的字體大小
document.querySelector('body').style.fontSize = 0.4 + 'rem'

如果希望自動(dòng)調(diào)整body元素的文字大小活箕,可以使用上面的代碼。與前面一樣0.4也只是一個(gè)參考值可款。

3.4將上面的代碼包裝成函數(shù)育韩,使其在窗口尺寸發(fā)生變化時(shí)調(diào)用
window.onresize = function(){
    remSize()
}

完整的代碼如下,為了提高復(fù)用率我們將其包裝成一個(gè)獨(dú)立的js文件闺鲸。

//計(jì)算rem
function remSize(){
    //獲取設(shè)備寬度
    var deviceWidth = document.documentElement.clientWidth || window.innerWidth
   //設(shè)置調(diào)整的范圍在320-750之間
    if(deviceWidth >= 750){
        deviceWidth = 750
    }
    if(deviceWidth <= 320){
        deviceWidth = 320
    }
    //750px:1rem=100px 375px:1rem=50px
    document.documentElement.style.fontSize = (deviceWidth / 7.5) + 'px'
    //設(shè)置字體大小
    document.querySelector('body').style.fontSize = 0.4 + 'rem'
}

remSize()
//窗口發(fā)生變化時(shí)調(diào)用
window.onresize = function(){
    remSize()
}
3.5改寫html中的尺寸單位為rem筋讨,并將js文件引入
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Rem Test</title>
    <style>
        .box1{
            width: 3rem;
            background-color: #bfa;
            text-align:center;
            margin: 1rem auto;
        }
    </style>
</head>
<body>
    <div class="box1">hello world</div>
    <script src="./JS/rem.js"></script>
</body>
</html>

下面是使用rem布局后的效果


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摸恍,隨后出現(xiàn)的幾起案子悉罕,更是在濱河造成了極大的恐慌,老刑警劉巖立镶,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壁袄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡谜慌,警方通過查閱死者的電腦和手機(jī)然想,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欣范,“玉大人变泄,你說我怎么就攤上這事∧涨恚” “怎么了妨蛹?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晴竞。 經(jīng)常有香客問我蛙卤,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任颤难,我火速辦了婚禮神年,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘行嗤。我一直安慰自己已日,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布栅屏。 她就那樣靜靜地躺著飘千,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栈雳。 梳的紋絲不亂的頭發(fā)上护奈,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音哥纫,去河邊找鬼霉旗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛磺箕,可吹牛的內(nèi)容都是我干的奖慌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼松靡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼简僧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雕欺,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤岛马,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后屠列,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啦逆,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年笛洛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夏志。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛让,死狀恐怖沟蔑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狱杰,我是刑警寧澤瘦材,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站仿畸,受9級(jí)特大地震影響食棕,放射性物質(zhì)發(fā)生泄漏朗和。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一簿晓、第九天 我趴在偏房一處隱蔽的房頂上張望眶拉。 院中可真熱鬧,春花似錦抢蚀、人聲如沸镀层。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吴侦,卻和暖如春屋休,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背备韧。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工劫樟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人织堂。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓叠艳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親易阳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子附较,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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