rem原理详解

**rem是什么?

rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过rem计算的规则是依赖根元素,em是依赖父元素计算。


**rem布局原理

拿到设计稿,按照设计稿的宽去设置一个合适的rem ,配合js查询屏幕大小来改变html的font-size,从而达到适配各种屏幕的效果


**rem布局优缺点

优点,宽度自适应,可以完美适配不同宽度的屏幕

缺点,高度不固定,如果遇到高度要求很严格的就实现不了


**rem 常用换算模式

1em = 16px; 

html{

font-size:16px;

}px

html{

font-size:62.5%  // 10/16*100% 也就是设置 是10px

}

其实也就是我们设置页面根元素字体font-size 是多大 1em 就是多大 以上是两个常用标准 比

根据媒体查询,不同屏幕之间用不同的标准

@media only  screen  and (min-device- width 320px )and (-webkit-min-device-pixel-ratio:  2 ) {
    //针对iPhone  4 5 c, 5 s, 所有iPhone 6 的放大模式,个别iPhone 6 的标准模式
html{ font-size : 10px ; }
}
@media only  screen  and (min-device- width 375px )and (-webkit-min-device-pixel-ratio:  2 ) {
  //针对大多数iPhone 6 的标准模式
html{ font-size : 12px ;}
}
   
@media only  screen  and (min-device- width 375px )and (-webkit-min-device-pixel-ratio:  3 ) {
  //针对所有iPhone 6 +的放大模式
html{ font-size : 16px ;}
   
}
@media only  screen  and (min-device- width : 412px ) and (-webkit-min-device-pixel-ratio:  3 ) {
  //针对所有iPhone 6 +的标准模式, 414px 写为 412px 是由于三星Nexus  6 412px ,可一并处理
html{< font-size : 20px ;}
}

**基于JS动态计算font-size

( function  (doc, win) {
     var  docEl = doc.documentElement,
         resizeEvt =  'orientationchange'  in  window ?  'orientationchange'  'resize' ,
         recalc =  function  () {
             var  clientWidth = docEl.clientWidth;<br>window.innerWidth>max ?  window.innerWidth : max;
             if  (!clientWidth)  return ;
             docEl.style.fontSize = 20 * (clientWidth / 320) +  'px' ;
         };
 
     if  (!doc.addEventListener)  return ;
     win.addEventListener(resizeEvt, recalc,  false );
     doc.addEventListener( 'DOMContentLoaded' , recalc,  false );
})(document, window);
这个方法就是在监听屏幕的宽度,然后根据不同的屏幕做出反应
orientationchange :检测屏幕发生反转时,就是是横屏还是竖屏时
clientWidth :就是设备的宽度
docEl.style.fontSize = 20 * (clientWidth / 320) + 'px'; :核心就是这句设置根元素的字体大小是clientWidth/320*20










  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值