移动端适配rem与em

前言

在移动端页面开发过程中避免不了对页面做适配,适配方案说多还是挺多的,接下来主要讨论一下rem和em。

兼容性

ios:6.1系统以上都支持

android:2.1系统以上都支持

大部分主流浏览器都支持,可以安心的使用~

一、rem

rem是基于页面根元素html字体大小来设置,例如给html元素设置font-size: 30px; p元素的font-size: 0.5rem;

可以使用geComputedStyle获取对应元素的font-size值 ;

由上可验证rem是基于html来设置的。

同时rem不仅使用与设置font-size,padding、margin、width、height等值也可以使用。

 二、em 

rem是基于页面父级元素字体大小来设置,还是同一个例子;

 

使用em,p元素的font-size为20px; 同样em可以使用到padding、margin、width、height上,但是需要注意的是如果当前元素设置的有font-size值,则padding、margin、width、height会根据自己的font-size来计算。可以理解成em是从父级继承,如果自己又就不会去父级那里取。

下面来谈谈rem与em的基准值设置~

三、rem em数值计算与基准值设置

数值:rem = 目标px值 / 根元素px值;   em = 目标px值 / 父元素(自己有font-size则是自己的font-size值)px值;

问题来了,基准值设置成多少合适?

一般拿到的设计稿是375px(2倍稿)*2的,也就是iphone6的大小。那么对于iphone6来说,基准值可以设置为37.5px。即设备宽度/10。这里做了一个除以10的计算,是因为不希望font-size值太大。这样使用rem时值也不会太大了。

如果是iphone5,基准值就是32px。

问题又来了,如何根据设备尺寸来设置基准值?

有两个方法,通过css media query 和js添加基准值:

@media (min-device-width : 375px) and (max-device-width : 667px) and (-webkit-min-device-pixel-ratio : 2){
      html{font-size: 37.5px;}
}

用media query难以覆盖到所有设备 


         /* iphone 6 */
         @media (min-device-width: 375px) and (max-device-width: 413px) {
            html {
                font-size: 37.5px;
            }
        }

        /* iphone 6 p*/
        @media (min-device-width: 414px) and (min-device-width: 767px){
            html {
                font-size: 41.4px;
            }
        }

        /* ipad*/
        @media (min-device-width: 768px) and (min-device-width: 1025px) {
            html {
                font-size: 76.8px;
            }
        }

而通过js来设置,可以实现覆盖所有设备:

js来设置:

document.getElementsByTagName('html')[0].style.fontSize = window.innerWidth / 10 + 'px';

 

总结

rem适配相对来说比较简单,因为只是相对于根元素来设置,同时有一个优点就是可以根据用户浏览器字号设置进行很好的调整;

em就比较繁琐,如果嵌套的层级比较多计算就比较复杂;

rem也不是使用于所有的场景,比如当用作图片或者一些不能缩放的展示时,必须要使用固定的px值,因为缩放可能会导致图片压缩变形等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值