淘宝、网易移动端 px 转换 rem 原理,Vue-cli 实现 px 转换 rem

简介:
在过去的一段时间里面一直在使用 Vue配合 lib-flexiblepx2rem-loader配合做移动端的网页适配。秉着求知的思想,今天决定对他的原理进行分析。目前网上比较主流使用的就是淘宝方案和网易的解决方案,所以今天我就从这两方面入手深度了解这两个方案。 本着互联网分享的精神我会将我所理解的内容分享给大家。Remember me. my name is '铅笔画不出的黑白'

   我在网上找到了一些资料大家也可以去阅读下 从网易与淘宝的font-size思考前端设计稿与工作流移动web资源整理。但是在读到单位换算时我有点蒙圈,下面我就讲我自己的理解说给大家听听,也欢迎大家留言探讨不同的解决方案。

网易转换rem分析

   首先网易的设计稿是基于iPhone5设计的也就是宽度640px。(先不考虑dpr的问题下面会说)然后设置1rem等于100px( HTML font-size为100px),相当于6.4rem = 100%宽度 = 设备的宽度。

   由于是基于6.4rem开发。iPhone5 的物理像素是320px(dpr是2.0),如果此时还想让6.4rem等于设备宽度只能调整1rem对应font-size的比例, 320 / 6.4 = 50 让1rem=50px就可以实现。如果想让 iPhone6 适配只需要 1rem = (375 / 6.4) = 58.59375px 就可以实现iPhone6的适配,这个方法可以适配市面上绝大多数的移动端设备。

   只需要加下面这句话可以实现我上述效果。


document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4 + 'px';

淘宝转换rem分析

   这次咱们还是拿iPhone5(640px)的设计稿举例,淘宝的思想是无论当前页面多宽,让10rem = 页面宽度 = 100%,所以1rem = 64px 然后通过dpr设置缩放整个页面,以达到高保真的效果。

  iPhone5的宽度是640px,页面最终完成效果也是640px,iPhone的dpr是2,所以设置 <meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no"> 就可以了适配iPhone5了。当然这些东西lib-flexible都帮我们做好了。我只不过说一下,让好奇的小伙伴知道原理。

Vue-cli配合lib-flexible 实现移动端自适应布局


cnpm intall lib-flexible  // 安装lib-flexible
import 'lib-flexible'     // 在 src\main.js 中引入 lib-flexible

 完成上面代码就相当于实现了rem动态计算了,如果此时在iPhone5上有一个元素是宽150px,高是200px,想计算rem宽是 150/64 = 2.34375rem,高是200/64 = 3.125rem。

   至于dpr的缩放问题,那个就不用关心了。lib-flexible已经帮你做好了。你只需要关心dpr转换rem即可。

使用 px2rem-loader 自动将px转换rem


cnpm intall px2rem-loader  // 安装px2rem-loader

在 build\utils.js 修改成下面的代码。

  // 在 cssLoaders 方法内添加下列代码 
  const px2remLoader = {
    loader: 'px2rem-loader',
    options: {
      remUnit: 64 //设计稿宽度/10
    }
  // 将 cssLoaders 方法内的generateLoaders的方法内的 loaders 变量添加 px2remLoader 
  const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader, lessLoader ] : [cssLoader, px2remLoader, lessLoader ]


后语:写这篇文章已经计划很久了,可是一直没有时间写。写完后发现最近网上很流行vm配合rem布局方案,并且淘宝也升级了布局方案,改成了定位方式的写法。我近期深究下vm的解决方案。到时候分享一篇文章给大家。

原文发布时间为:2018年06月22日
原文作者:铅笔画不出的黑白
本文来源: 掘金      如需转载请联系原作者
相关文章
|
7月前
|
编解码 前端开发
前端知识笔记(十九)———px,em,rem,vw,vh之间的区别
前端知识笔记(十九)———px,em,rem,vw,vh之间的区别
149 0
umi 中如何使用 px2rem 插件做rem适配
在umi的src下面创建两个文件app.ts和document.ejs
333 0
|
小程序 JavaScript
微信小程序:px与rpx之间转化
微信小程序:px与rpx之间转化
微信小程序:px与rpx之间转化
|
2月前
|
编解码 前端开发 JavaScript
前端:Rem 及其转换原理
Rem是一种用于前端开发的相对字体大小单位,它基于根元素的字体尺寸来定义文本大小,有助于实现响应式布局和可维护性。Rem的转换原理是通过相对于HTML根元素的字体大小来设置子元素的字体大小,从而实现统一的比例调整,提高页面的适应性和灵活性。此方法简化了跨浏览器和设备的布局调整,增强了用户体验。
|
1月前
|
移动开发 JavaScript 前端开发
"Vue开发者必看:一篇文章教你如何实现px自动转换vw或rem,轻松应对H5页面响应式设计挑战!"
【10月更文挑战第23天】在Vue项目中实现px到vw或rem的自动转换,可以使用PostCSS插件。首先安装`postcss-loader`,然后添加`postcss-px-to-viewport`和`postcss-pxtorem`插件,并在`postcss.config.js`中配置。配置完成后,直接在Vue组件中使用px单位编写样式,PostCSS会自动转换为vw或rem。这样可以简化开发流程,提高代码的可维护性和页面的响应式设计能力。
120 0
|
3月前
|
JavaScript 前端开发
Vue项目使用px2rem
Vue项目使用px2rem
|
4月前
|
JavaScript
|
5月前
|
前端开发
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
698 0
|
6月前
|
移动开发 JavaScript 前端开发
rem的适配方案,css文件和js文件的引入方式,特色小边框的制作,DS-Digital.ttf数字展示屏的使用方法:,自适应图片 background-size,jQuery爆bug,a和盒子居中,
rem的适配方案,css文件和js文件的引入方式,特色小边框的制作,DS-Digital.ttf数字展示屏的使用方法:,自适应图片 background-size,jQuery爆bug,a和盒子居中,
|
编解码 数据可视化 前端开发
响应式数据大屏开发rem、%、vh/vm
响应式数据大屏开发rem、%、vh/vm
288 1