前置知识:什么是rem

CSS3新增的一个相对单位rem(root em,根em).rem是相对于根节点(或者是html节点).如果根节点设置了font-size:10px;那么font-size:1.2rem;字体大小等于12px。

前置知识:什么是dpr

在浏览器控制台中输入

  1. window.devicePixelRatio

可以获取当前设备的dpr

那么什么是dpr?

dpr就是设备物理像素与逻辑像素(css像素)的比例.

那么设备物理像素是固定的,比如macbook pro 13.3寸是显示屏分辨率是2560 x 1600,这个2560就是当前设备的物理像素,而浏览器全屏幕宽只有1280,这个就是逻辑像素,dpr所表示的就是:1280的浏览器被扩展成2560像素宽度,2个物理像素对应一个逻辑像素.

再比如在开发中,一张设计好的宽度为100px,高度为50px的图片,再dpr值为2的设备中,宽度设置为100px的话,他实际会被扩展到200像素宽度,只有设为50的时候才会正常显示.

dpr有什么影响?

开头说过

  1. 再比如在开发中,一张设计好的宽度为100px,高度为50px的图片,再dpr值为2的设备中,宽度设置为100px的话,他实际会被扩展到200像素宽度,只有设为50的时候才会正常显示.

自从苹果R屏问世之后,颠覆了dpr值规定为1的思想,苹果R屏的dpr有可能为2,也有可能为3.其余的除了苹果R屏手机,dpr皆为1.再根据此思路,手淘的对应的代码如下:

当我们拿到这个scale之后,再动态的改变meta标签的值,就能有效的规避这个问题了

这里的scale会对应着dpr的不同而别分划分,dpr的scale为0.3,3的则为0.33333..

动态计算根节点font-size

这里手淘是采用了如果是平板设备,则根节点font-size属性统一采用 540*dpr/10 来计算的.除开平板设备,会根据当前设备的屏幕宽来计算

还原视觉稿

试想一下,因为rem是相对单位,只要根元素的font-size属性随着设备自适应,那么以rem为单位的属性也能做到自适应!

手淘的还原方案

这里以一份设计稿宽高为750 * 1334为例子,拿到设计稿后,可以将设计稿分为100份,每一份为单位a,那么每一份就是7.5,而1rem相当于10a,可以推算出:

    1.   1a = 7.5px

    2.   1rem = 75px

此时以基准值75为例,一张设计稿中尺寸为286 * 286的图片的转换规律为

    1.   286 / 75 = 3.813333rem

如何转换rem

如果没有使用任何预编译样式语言或者打包工具的话,目前能想到的方案就是手动计算rem.当然没有使用工具都是比较坏的情况,那么可以看下分别使用预编译样式语言和打包工具的计算:

对于使用webpack的来说,其实也是有一个postcss插件的px2rem,可以很轻松的配置相关属性,转换成相对于的rem单位.比如我们的.postcssrc 配置如下:

在完成配置后,你可以如下使用:

px2rem处理之后将会变成:

手淘lib-flexible布局适配方案的更多相关文章

  1. 手淘H5移动端适配方案flexible源码分析

    移动端适配一直是一个值得探讨的问题,在业余时间我找了一些页面,查看了一些厂商对于移动端H5页面的适配方案,看到了几个典型的例子,今天就来记录一下我看到的第一个典型的例子,也是我们公司目前普通H5项目正 ...

  2. 手淘的移动端适配方案flexible

    基于 vue-cli 配置手淘的 lib-flexible + rem,实现移动端自适应 安装 flexible npm install lib-flexible --save 引入 flexible ...

  3. 推进"五通一平":手淘技术"三大容器 五大方案"首次整体亮相 百川开放升级

    在云栖大会上,马云提出五个“新”,新零售.新制造.新金融.新技术和新能源,称将对各行各业造成巨大的影响,成为决定未来成败的关键.而五个新的实现,也必须是各行各业共同推进,整个生态共同受益的结果.继10 ...

  4. 微信小程序填坑之路(三):布局适配方案(rpx、px、vw、vh)

    因为小程序是以微信为平台运行的,可以同时运行在android与ios的设备上,所以不可避免的会遇到布局适配问题,特别是在iphone5上,因为屏幕尺寸小的缘故,也是适配问题最多的机型,下面就简单介绍几 ...

  5. 手淘的flexible.js解决手机适配问题

    如何使用flexible.js做手机适配 做移动端网页肯定需要做适配,以前都用的fixscreen.js,对比一下,觉得flexible.js更好吧,毕竟是大厂出的东西. 第一步要给页面加在viewp ...

  6. pc端的弹性布局适配方案

    方案及原理:使用rem单位,通过window.onresize来监听浏览器窗口,获取窗口宽度,并改变跟字体大小来达到弹性适配效果. function adaptor(){ //为了便于计算,这里以19 ...

  7. 手淘适配-flexible

    目标 拿一个双11的Mobile页面来做案例,比如你实现一个类似下图的一个H5页面: 目标很清晰,就是做一个这样的H5页面. 痛点 虽然H5的页面与PC的Web页面相比简单了不少,但让我们头痛的事情是 ...

  8. H5 页面 rem 布局适配方法

    rem 布局适配方案 主要方法为: 按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小: css 中,设计稿元素的宽.高.相对位置等取值,按照同等比例换算为 re ...

  9. 手淘移动适配方案flexible.js兼容bug处理

    什么是flexible.js 移动端自适应方案 https://www.jianshu.com/p/04efb4a1d2f8 什么是rem 这个单位代表根元素的 font-size 大小(例如 元素的 ...

随机推荐

  1. 王爽汇编第十章,call和ret指令

    目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写 ...

  2. python中的itertools模块简单使用

    itertools 高效循环下创建循环器的标准库 Infinite itertools,无限迭代器 itertools.count(start=0, step=10) 默认返回一个从0开始,依次+10 ...

  3. docker使用redis过程出现的问题记录

    第一次使用docker搭建成功了单机版redis,但在使用过程中,还是遇到了不少问题,故而先把这些问题记录下来,以防后面再出现会忘记. 目前,只是在docker中搭建了三个单机版的容器,打算先捣鼓一周 ...

  4. 小白都能看懂的Spring源码揭秘之IOC容器源码分析

    目录 前言 IOC 只是一个 Map 集合 IOC 三大核心接口 IOC 初始化三大步骤 定位 加载 注册 总结 前言 在 Spring 框架中,大家耳熟能详的无非就是 IOC,DI,Spring M ...

  5. php linux yaml 的安装和使用

    安装: 1 下载yaml包 wget http://pyyaml.org/download/libyaml/yaml-0.2.2.tar.gz tar -zxvf yaml-0.2.2.tar.gz ...

  6. 2016西邮Linux兴趣小组大事记

    2016年还有半个小时就结束了,前面把自己9月做的规划拿出来完善了下,觉得真的是不容易的一年,所有的事情只有自己经历过才会有不一样的感受,世上无难事,只怕有心人. 这是我九月份制定的计划: 下面是20 ...

  7. uni-城市列表滑动组件,点击字母跳转到指定位置

    本插件由博主自主开发,比uni插件市场的城市列表滑动组件性能好,且不会出现闪屏的情况. 通过计算城市列表的高度实现滚动到指定位置,使用了uni滚动到指定位置的api city-chooce为页面入口页 ...

  8. redis 内存划分

    1.数据:作为数据库,数据是最主要的部分,这部分占用的内存会被统计在used_memory中 2.进程内存:redis主进程本身运行需要占用的内存,这部分内存会被统计在used_memory_rss中 ...

  9. c++学习笔记(四)

    动态内存分配 使用new分配内存 1.指针的用处是在运行阶段分配未命名的内存以储存值. 2.在此情况下,只能通过指针来访问内存. int *ptr_int=new int;//在内存阶段为一个int值 ...

  10. 你会用ES6,那倒是用啊!

    leader的吐槽大会(在代码评审中发现很多地方还是采用ES5的写法,也不是说用ES5写法不行,会有BUG,只是造成代码量增多,可读性变差而已.) ps:ES5之后的JS语法统称ES6!!! 一.关于 ...