想要在移动web领域有所深造的小伙伴,第一关要过的就是逻辑像素与设备像素之间的关系。

  初入移动web,一定要搞懂的几个单位(DPI、PPI、DP、PX 的详细计算方法及算法来源是什么?):

  • dip(dp): device independent pixels(设备独立像素),是安卓开发用的单位,1dp表示在屏幕点密度为160ppi时1px长度。
  • dpi:dot per inch,dpi是dot per inch,每英寸多少点,ppi是 Pixel per inch,每英寸像素数,针对显示器的设计时,dpi=ppi。
  • ppi:pixels per inch,ppi表示显示设备的点密度,dpi表示印刷品点密度。
  • px:pixel,这个就是我们常说的css像素
  • dpr:代表设备缩放比

  由设备像素到逻辑像素的变换公式为:

    1px = 1dp * dpr;

  dpr = ppi / 160;

  ppi = sqrt(w*w + h * h) / 屏幕尺寸;

  其中w、h的单位为dp,屏幕尺寸通常指的是对角线长度,单位为英寸(之所以要用对角线来计算,是因为屏幕对角线长度(屏幕尺寸)是厂商制造时就定好的精确数值。而宽和高都需要计算才能得到)。

  我们先用i以上公式来计算phone6的css像素:

  iphone6参数为:4.7英寸,分辨率:1334 * 750

  iphone6的ppi为:sqrt(1334 * 1334 + 750 * 750) / 4.7 = 325.612.....

  iphone6的dpr为:325.612 / 160 = 2.03...

  所以iphone6的css像素为:667 * 375

  然后利用手头小米4c手机计算一下:

  

  根据官网数据,441ppi得dpr为2.75625,而后得小米4c的css像素为:696 * 391。

  接下来我们要通过viewport来验证一下我们的结果是否正确。

  首先设置meta标签来控制viewport:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

  对viewport有疑问的同学请看这篇文章:移动前端开发之viewport的深入理解

  然后设置image的宽度:

  iphone6:

<img src="https://ss0.baidu.com/73F1bjeh1BF3odCf/it/u=4076061544,2828946912&fm=73" style="width:375px"/>

  小米4c:

<img src="https://ss0.baidu.com/73F1bjeh1BF3odCf/it/u=4076061544,2828946912&fm=73" style="width:390px"/>

  试验运行结果为:

  iphone6完全符合预期: 然而小米4得到的结果是

  上图可以看到小米手机出现了滚动条,也就是说根据官方数据我们得到的结果是错误的。问了一下在小米工作的哥们,得知他们的设计都是以720为标准的,但是css像素肯定不是720px,是否有可能是360呢,将图片宽度设为360px发现完美符合。

  根据360这个结果,假设小米官方中441ppi是准确的,我们反推屏幕分辨率发现根本达不到1920 * 1080.  

  那就让人纳闷了,然后我读取了一下window.devicePixelRadio,发现小米手机中chrome浏览器得到的结果是3.

alert(window.devicePixelRatio)

  根据devicePixelRadio的到的结果,发现1080p的屏幕分辨率完全符合,这样一来ppi的数据肯定是错误的。

  这尼玛可太坑了,记得当年雷军信誓旦旦的说过,小米要在10年之内超过苹果。然并卵,单单从这件事的结果来看,雷布斯更需要率领公司踏踏实实的做事情才能对得起自己当年夸下的海口。

从viewport发现小米手机参数不一致的更多相关文章

  1. Android配置----小米手机通过wifi连接ADB调试Android应用

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  2. Android 编程下短信监听在小米手机中失效的解决办法

    相信很多人写的短信监听应用在小米手机上是拦截不到短信的,这是因为小米对短信的处置权优先分给了系统.我们可以在短信的[设置]→[高级设置]→[系统短信优先]中发现短信的优先处理权默认是分给系统的,只要关 ...

  3. 小米手机与魅族的PK战结果 说明了什么

    我国电子商务面临的问题,淘宝退出百度无疑是一个遗憾.当在网上购物时.用户面临的一个非常大的问题就是怎样在众多的站点找到自己想要的物品,并以最低的价格买到.自从淘宝退出百度.建立自己的搜索引擎后,广大消 ...

  4. 小米手机跨域问题,返回resphone:undefined,status 0

    小米手机跨域问题,返回resphone:undefined,status 0我小米note2的手机登录不上,返回resphone:undefined,status 0 我手机登录不了的问题解决了,后台 ...

  5. 解决小米手机不能运行Android Studio程序的问题

    转载自:解决小米手机不能运行Android Studio程序的问题 问题描述 Android Studio升级到2.3版本之后,小米手机MIUI8不能运行Android Studio程序,报如下错误: ...

  6. 小米手机解锁bootload教程及常见问题

    小米手机解锁bl需要在官网提交申请,然后电脑解锁,具体步骤如下: 1.首先需要注册一个小米账号,并登陆. 2.到官网解锁网页提交申请:http://www.miui.com/unlock/index. ...

  7. DelphiXE8怎么使用调试模式(小米手机2)

    需求:在开发Android程序时,大家一直是使用ShowMessage.其实XE是支持下断点的. 操作:小米手机2: 1.小米手机2用USB线,连到电脑上. 2.小米手机2-设置-关于手机-" ...

  8. 小米手机调试出现DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs

    小米手机就是这样子,权限什么的总是做的比较严格,去开发者选项里面找答案,看了下很多都是以前的,在最底下发现了一个选项“启用MIUI优化”,其实一般手机的开发者选项里面是不会有这个选项的.关掉该选项,重 ...

  9. 小米手机 js 脚本取src为空的适配问题

    今天測试提上来一个问题 我android webview 中运行了一段js脚本.去替换原来的图片.可是小米手机上竟然没起作用 花了一个中午的午休看问题 贴出来帮助下遇到相同的问题的朋友吧.我百度了半天 ...

随机推荐

  1. 【leetcode】LRU Cache

    题目简述: Design and implement a data structure for Least Recently Used (LRU) cache. It should support t ...

  2. Android 登录界面与首页的设计

    全屏效果 //取消标题,取消状态栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(Wind ...

  3. 体验Visual Studio 2015 之 MVC - 视图组建

    VS2015 PERVIEW中可以创建MVC 项目. 我们可以 发现有几大亮点. 首先我们看目录结构: 当前项目包含两个主要的文件夹:Solution Items .src 很明显src文件夹下为当前 ...

  4. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  5. android---shape.xml属性

    solid:填充android:color指定填充的颜色 gradient:渐变android:startColor和android:endColor分别为起始和结束颜色, 另外渐变默认的模式为and ...

  6. webpack2新特性

    增加 import() 作为代码分割点:System.import已被弃用,在webpack3时会被完全移除: 内置了json加载器,不再需要单独配置了 当打包文件过大时会提示性能警告,可以用 per ...

  7. java 日期格式

  8. python常用模块json、os、sys

    一.序列化 json & pickle 模块 json--用于字符串和Python数据类型间进行转换 pickle---用于python特有的类型和Python的数据类型间进行转换 json: ...

  9. 面向对象课后深入学习(C++ 类的静态成员详细讲解)

    今天在刚申请了博客,一下午都在写那个随笔,所以说好的来看c++的也放在了最后,下星期就考试了,这个类的静态成员是我不是很懂的,在网上 看到一片很详细的博客考下来回去慢慢看. 在C++中,静态成员是属于 ...

  10. Thisgood

    this is good test print 'haha'