REM布局

何为em?

em是相对单位。相对于当前对象内文本的字体尺寸。如果当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

通俗地讲就是:1em = 20px(相对font-size,假设这个元素font-size=20px),如果元素本身没有设置font-size,就按照他的父级的font-size计算(其实本身的font-size继承了父级的font-size),我们看看代码:

<style type="text/css">
          .box{font-size:20px; border:1px solid red; overflow:hidden;}
          .box>.con{width:10em; height:10em; background:#000; color:#fff;}
          .box>.con_1{float:left;}
          .box>.con_2{float:right; font-size:30px;}
</style>
<div class="box">
       <div class="con con_1">con1:我没有font-size</div>
       <div class="con con_2">con2:我有font-size</div>
</div>
em效果
  • 在con_1中,因为本身没有font-size,所以10em=10*20px(父级的font-size)=200px,宽高为200px。
  • 在con_2中,因为本身有font-size,所以10em=10*30px(自身的font-size)=300px,宽高为300px。

如果用em布局会出现一个问题,进行任何元素设置,都需要知道他父元素的大小,在我们多次使用时,就会带来无法预知的错误风险。

rem现身

在W3C官网上是这样描述rem的——"font size of root element"(根元素的字体大小)。

也就是说,rem是相对于根元素<html>的,还是用上面的例子:

<style type="text/css">
          .box{font-size:20px; border:1px solid red; overflow:hidden;}
          .box>.con{width:10rem; height:10rem; background:#000; color:#fff;}
          .box>.con_1{float:left;}
          .box>.con_2{float:right; font-size:30px;}
</style>
<div class="box">
       <div class="con con_1">con1:我没有font-size</div>
       <div class="con con_2">con2:我有font-size</div>
</div>

rem效果

因为网页<html>的默认字体大小是16px,所以 1rem=16px10rem=160px,所以con_1con_2的宽高为160px

如何适配各种设备的屏幕

了解了rem的基本原理,我们来看看如何利用rem来完美适配各种设备屏幕。理想的适配是把设计稿直接等比缩放在设备上,这样在任何不同的屏幕上布局都会很完美,手淘就是用的rem来进行适配的。

有人用rem.js来解决问题:
事实上rem.js是把屏幕等分成20份,每份为1rem,如果设备的物理像素宽为640px,那么1rem=640px/20=32px,<html>font-size32px。(1rem对应的大小就是rem基准值rem.js做的就是把rem基准值<html>font-size)。

因为rem.js是作用在<html>上,所以页面引入的时候最好是放在所有资源之前,例如:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>rem布局</title>
<script type="text/javascript" src="js/rem.js"></script>  //在这里引入
<link href="css/style.css" rel="stylesheet" />
</head>

<body>
    <div>rem布局厉害了</div> 
<script type="text/javascript" src="js/jQuery.js"></script>
</body>
</html>
/* rem.js文件内容 */
(function () {
    var html = document.documentElement;

    function onWindowResize() {
        html.style.fontSize = html.getBoundingClientRect().width / 20 + 'px';
    }

    window.addEventListener('resize', onWindowResize);
    onWindowResize();
})();

在我们实际切图的时候,对于视觉稿上的元素尺寸换算,只需要元素的原始的px值(即你量的大小)除以rem基准值即可。例如设计稿的大小为640px。rem基准值=640px/20=32px,有个元素大小你量出来是140px*286px,那么换算过来就是:

  • 140px=140/32=4.375rem
  • 286px=286/32=8.9375rem

px自动转换成rem

在实际生产当中,如果每一次计算px转换rem,就会非常麻烦,所以:
在Sublime Text3中安装插件CSSREM,即可完成自动转换。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容