目前,IE9+,Firefox、Chrome、Safari、Opera 的主流版本都支持了rem。即使浏览器不支持rem,就多写一个绝对单位的声明即可,浏览器会忽略用rem设定的字体大小。
(1)首先浏览器的默认字体大小是16px
(2)100%=16px => 6.25%=1px => 62.5%=10px,因为rem是相对于根元素,因此在css的html中全局声明font-size=62.5%,此时的1rem就等于10px,这样一来rem和px之间的换算就比较简单,使用起来更方便
(3)使用JS根据浏览器宽度(或浏览器可视区域宽度(clienWidth))动态设置html的大小
通过JS动态设置根元素的font-size,这样的好处是所有设备分辨率都能兼容适配,淘宝首页目前就是用的JS计算。如果不用JS也是可以做适配的,一般我们在做web app都会先统计自己网站有哪些主流的屏幕设备,然后去针对这些设备去做media query设置也可以实现适配,如:
(4)使用媒体查询设置根元素大小——rem和px在响应式中的应用对比,如:
(5)Rem自适应JS,现在也有封装好的JS供我们直接使用
(6)屏幕适配还有一种简单粗暴的做法,即设置viewport进行缩放
天猫web app的首页就采用过这种方式,以320宽度为基准,进行缩放,最大缩放为320*1.3 = 416,基本缩放到416都就可以兼容iphone6 plus的屏幕了,这个方法简单粗暴,又高效。
开发过小程序的人都知道,小程序的单位是rpx,这是为什么?有什么作用呢,其实它源于rem布局,先来了解下rem的优势与工作原理。rem布局在没正式使用到项目中,只知道他是根据html根元素的font-size来变化的
若:html{ font-size:20px}
则1rem = 20px
然后呢,有什么作用,定完html的font-size后,元素使用rem和使用px有什么区别,不都一样么?
其实rem他的主要运用场所在移动端,移动端的设计稿一般都是iphone6为基础设计的,设计稿的宽为750px;
手机的物理尺寸是375px;所以在用css的时候,设计尺寸需要除以2;
要用rem完成移动端的适配,需要固定浏览器的显示宽度不变。
也就是说,我在设计稿上量到宽367px的大小,那么css里可以直接写width:3.67rem。
此时,(以375px宽手机为例)第二步js设置的html字体大小为:375px除以7.5得50px;
7.5rem乘以50px得到的是375px刚好是屏幕的满宽。
也就是说,不论手机屏幕宽度多少,7.5rem永远能占屏幕的满宽。这样,在宽屏手机里,元素能够等比例放大一些,实现各类机型的适配,也方便了前端编码。
而做过小程序的人都知道,小程序不论任何机型,屏幕满宽都是750rpx,其实也就是从7.5rem延伸而来,至于根目录字体大小的配置,微信开发者工具已经将这些都配置好了,你尽情用就可以了。
如果有帮助,请点赞支持哦。
应该是设置rem的函数加载顺序问题,应该先加载这个函数和css再去加载dom,这样就没有自适应跳动的问题,如果在加载dom之后调用该函数的话(在body之后加载函数),这样进入页面,fontSize会先以默认值显示,当读取了设置函数后才进行自适应。