当前位置: 首页 > news >正文

移动端高清方案

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

问题

我们遇到了什么问题?

在不同大小和高清的屏幕下:

  • 如何保证 界面布局 一致性:不错乱,不变形
  • 如何保证 字体大小 一致性:大屏显示更大,小屏显示更小或更多
  • 如何保证 1px边框 一致性:不同的高清屏也在正常显示1px的高度大小
  • 如何保证 图片清晰度 一致性:不同大小和高清屏下都能看到清晰的图片
  • 。。。

 

几个概念

讨论这个问题之前,要先明白像素的概念。

设备像素(device pixel):
设备像素设是物理概念,指的是设备中使用的物理像素。
比如iPhone 5的分辨率640 x 1136px。

CSS像素(css pixel):
CSS像素是Web编程的概念,指的是CSS样式代码中使用的逻辑像素。
在CSS规范中,长度单位可以分为两类,绝对(absolute)单位以及相对(relative)单位。px是一个相对单位,相对的是设备像素(device pixel)。

比如iPhone 5使用的是Retina视网膜屏幕,使用2px x 2px的 device pixel 代表 1px x 1px 的 css pixel,所以设备像素数为640 x 1136px,而CSS逻辑像素数为320 x 568px。
retina-pixel.png

     可以我们普通写代码的时候用的是css 像素,但是不同ppi(像素密度)的手机对于css 1px 的”解释“ 是不同的。 比如 iphone6  会用四个像素渲染一个css 像素。如果我们不加区别的写css 像素在不用手机运行的话,会怎么样?   比如我有一个640 的普通手机  和 iphone6 ,  那么他们渲染同一个1px宽的元素,iphone6 使用的是 2/640  设备宽度。    普通手机使用的是1/640 设备宽度  .  也就说iphone 6 看起来更宽了。怎么解决? 请往下看。

实施方案

   关于高清的显示方案,并不是一个唯一的正确的方案。 高清方案有好多,淘宝的高清方案就和支付宝的不同,更不用说别的方案了。  本文主要讨论目前比较流行的rem 方案。

ant-mobile 采用的是淘宝方案, 1rem = 100px 。   dingui 采用支付宝的方案, 1rem = 75px 

 

由于项目使用antm 的原因,因此介绍下淘宝的高清方案。 高清方案主要点在于,在不同清晰度的手机上都可以更好的展示,不至于在高分辨率手机上会比较小等不一致问题。

 

主要步骤:

1. 设置 viewport, 动态给html 添加fontSize用于后续rem 

2. 写代码还是px, 因此需要px 到 rem 的主动转化工具。不同分辨率手机上显示的rem相同,

但是由于html  font-size  不同,因此 rem 对应的css像素不同,但是代表的物理像素相同(这也是我在题头介绍的,高清方案解决的问题)。 我是用的插件是postcss-pxtorem-plugin

webpack中这样配置:

  // npm install postcss-pxtorem@^3.3.1 --save-dev
  const pxtorem = require('postcss-pxtorem');
  webpackConfig.postcss.push(pxtorem({
    rootValue: 100, // 750页面 1rem = 100px
    propWhiteList: [],
  }));

3.  高清图片处理

可以看下 手机淘宝前端的图片相关工作流程梳理案:https://link.juejin.im/?target=https%3A%2F%2Fgithub.com%2Famfe%2Farticle%2Fissues%2F8

 

参考

https://github.com/ant-design/ant-design-mobile/wiki/antd-mobile-0.8-%E4%BB%A5%E4%B8%8A%E7%89%88%E6%9C%AC%E3%80%8C%E9%AB%98%E6%B8%85%E3%80%8D%E6%96%B9%E6%A1%88%E8%AE%BE%E7%BD%AE

 

http://www.jianshu.com/p/af6dad66e49a

转载于:https://my.oschina.net/wanjubang/blog/1517623

相关文章:

  • JavaScript标准库之 - Math
  • TOML简介 (转) TOML的由来
  • Linux下统计代码行数
  • Storm并发度详解(转载)
  • ES2017 中的 Async 和 Await
  • WIN32_LEAN_AND_MEAN 含义以及用法
  • 进程池与列表循环多参传递
  • maven常见问题解决方法
  • Linux中文件MD5校验
  • IAAS,SAAS,PAAS, CaaS的区别
  • 对比 javascript url编码
  • Android -- Adapter
  • 基于webpack的几种静态资源的引入方案
  • redis集群搭建
  • 智能盒子大比拼:Fire TV vs. Apple TV vs. Roku 3 vs. Chromecast
  • ----------
  • 【Leetcode】101. 对称二叉树
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Druid 在有赞的实践
  • eclipse的离线汉化
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java|序列化异常StreamCorruptedException的解决方法
  • learning koa2.x
  • leetcode-27. Remove Element
  • log4j2输出到kafka
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • VuePress 静态网站生成
  • Webpack入门之遇到的那些坑,系列示例Demo
  • yii2中session跨域名的问题
  • 阿里云前端周刊 - 第 26 期
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于springcloud Gateway中的限流
  • 前端
  • 前端自动化解决方案
  • 智能合约Solidity教程-事件和日志(一)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 2017年360最后一道编程题
  • AI算硅基生命吗,为什么?
  • raise 与 raise ... from 的区别
  • UI设计初学者应该如何入门?
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​第20课 在Android Native开发中加入新的C++类
  • #include到底该写在哪
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (floyd+补集) poj 3275
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (全注解开发)学习Spring-MVC的第三天
  • (转)jQuery 基础
  • (转)甲方乙方——赵民谈找工作
  • (转载)Linux网络编程入门
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**