想要在移动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. Linux C编程学习之开发工具2---GDB调试器

    简介 GDB是一个功能强大的交互式程序调试工具,主要工作在字符界面下. GDB不仅可以用来调试C/C++ 语言编写的程序,还可以用来调试 Pascal.Objective-C,以及Fortran等语言 ...

  2. ethhdr、ether_header、iphdr、tcphdr、udphdr 结构介绍

    转自:http://blog.csdn.net/petershina/article/details/8573853 ************************eth的结构*********** ...

  3. TCP连接的建立和终止

    TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...

  4. c语言快速入门1

    如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 目录 1.1.1    计算机与程序 现代计算机可以自动完成计算任务 程序就是按 ...

  5. jQuery实战

    1.获取标签在文档中的位置 var left = $('.selected').offset().left; var top = $('.selected').offset().top; 2.获取选中 ...

  6. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  7. xsl: normalize-space(string str) 函数

    本文出自http://technet.microsoft.com/zh-cn/magazine/ms256063%28VS.90%29.aspx 通过去掉前导和尾随空白并使用单个空格替换一系列空白字符 ...

  8. Asp.Net WebApi开发注意

    1.Api的版本控制 2.Api的异常处理 设置全局异常处理 3.Api的权限控制 4.Api的请求处理 get:查询 post:创建 put:修改 delete:删除 5.Api的文档说明

  9. python+Eclipse+pydev环境搭建

    python+Eclipse+pydev环境搭建   本文重点介绍使用Eclipse+pydev插件来写Python代码,  以及在Mac上配置Eclipse+Pydev 和Windows配置Ecli ...

  10. 数据库访问性能优化 Oracle

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...