想要在移动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. PHP 二维数组根据某个字段排序

    二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort  对数组的值按 ...

  2. [BI项目记]-新任务创建

    上一篇介绍了如何处理一个Bug工作,此篇主要介绍如何借助TFS对于一个新需求创建一个新的工作项. 这里假定,有一个新的需求,需要创建五个报表. 然后开发的工作流程如下: 这个流程总结起来大致如下: 首 ...

  3. [MS SQL Server]SQL Server如何开启远程访问

    在日常工作中,经常需要连接到远程的MS SQL Server数据库中.当然也经常会出现下面的连接错误. 解决方法: 1. 设置数据库允许远程连接,数据库实例名-->右键--->属性---C ...

  4. 【leetcode】Palindrome Number

    题目简述: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could n ...

  5. oracle普通表转分区表(在线重定义方式)

    1.1.TAB_TAOBAO_BILL 1.1.1检查下这张表是否可以在线重定义,无报错表示可以,报错会给出错误信息: exec dbms_redefinition.can_redef_table(' ...

  6. HDU 5742 Chess SG函数博弈

    Chess Problem Description   Alice and Bob are playing a special chess game on an n × 20 chessboard. ...

  7. linux下tar安装mysql

    >>>>>>>>>>>>>>>>>>>> 到官网下载 mysql-5.6.12- ...

  8. html学习第三天—— 第13,14章

    颜色值缩写 关于颜色的css样式也是可以缩写的,当你设置的颜色是16进制的色彩值时,如果每两位的值相同,可以缩写一半. 例子1: p{color:#000000;} 可以缩写为: p{color: # ...

  9. Good Bye 2016 - B

    题目链接:http://codeforces.com/contest/750/problem/B 题意:地球的子午线长度为40000,两极点的距离为20000.现在你从北极出发,按照题目输入方式来走. ...

  10. 织梦cms更新新建的栏目提示:DedeTag Engine Create File False:C:/phpStudy/WWW/

    这个问题怎么解决呢?只是更换了一下栏目名称.增加了新的栏目,结果就不行了. 问题原因: 新建的栏目没有"列表命名规则",导致cms解析的时候,出现解析错误. 解决办法 在下图填入: ...