最近在了解移动端web开发的相关知识,有些概念总是模糊不清,这次花费了一些时间整体的梳理了一遍。

分辨率

分辨率可以从显示分辨率与图像分辨率两个方向来分类。显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。图像分辨率则是单位英寸中所包含的像素点数,其定义更趋近于分辨率本身的定义。——360百科

显示分辨率指显示器所能显示的像素多少。如iPhone的分辨率:640x960,640x1136等。图像分辨率指单位英寸中所包含的像素点数(PPI)。如下图中PS新建文件的截图。

PPI

PPI所属的上下文环境不同,意义也会不一样。当我们在谈论显示设备的PPI时,它指的是屏幕像素密度;和图片相关时,我们谈论的是打印时的分辨率或打印机的打印精度(在此种情况下,即是上文中提到的图像分辨率)。
在这里我们只关注屏幕像素密度。
让我们再次回到概念,每英寸的像素数量。英寸是长度单位,即它指的是长、宽、对象线每英寸里的像素数量。在1英寸的长度里,像素数量越多,PPI值越大。

PPI有相应的计算公式:PPI=√(X^2+Y^2)/ Z (X:长度像素数;Y:宽度像素数;Z:屏幕尺寸)。
如下图,是苹果6s的部分规格参数,根据公式计算可以得出:PPI=√(1334^2+750^2)/ 4.7=325.6≈326。与苹果提供的参数相符。
在下图中,屏幕分辨率,屏幕尺寸,PPI都是官方给出的数据。可以知道,这三个数据都是固定的值,它只与手机的型号有关。因此,此处的像素应该是设备像素或物理像素。

设备像素和css像素

设备像素

设备像素:定义了我们使用的设备的分辨率,一般来说可以通过screen.width/height来得到屏幕的大小。这个值是固定的,它只与设备有关。

css像素

css像素:又称设备独立像素(DIP),独立于设备的用于逻辑上衡量像素的单位。它的宽度不是一个固定的值。比如在网页上创建一个width:500px;height:500px的div;当默认缩放比为100%的时候,一个css像素对应一个设备像素。当通过浏览器的缩放功能来改变缩放比为200%的时候,一个css像素的宽度等于两个设备像素的宽度。此时div的宽高仍然是500px * 500px。但是一个css像素的大小却等于4个设备像素的大小。

高清显示屏

高清显示屏起源于retina。它是一种由苹果公司设计和委托制造的显示屏。它的特点是,具备足够高的像素密度而使人眼无法分辨其中单独像素点的液晶屏。
如下图,假设屏幕大小为1英寸,左图是普通屏,右图是retina屏,可以看出,右图的像素密度要远大于左图。在常规的缩放比(100%)下,蓝色部分是需要在网页上展示的地方。根据一个css像素对应一个物理像素,可以知道,右图的显示部分视觉上看起来将会特别小。
为了让左右图在视觉上看起来一样,我们需要做的,就是让右边的图的1个css像素等于多个物理像素的大小。即将图片进行了一个放大处理。但是这样做的后果就是图片在视觉上变模糊了。
在移动端开发中,我们常常需要为高清显示屏准备2倍大小的图片,就是为了避免图片放大而发生模糊。

设备像素比devicePixelRatio

devicePixelRatio = 物理像素 / 设备独立像素(css像素)
设备像素比可以用来区分普通显示屏和高清显示屏。devicePixelRatio值在1.5及以上的手机屏幕,是高清显示屏,为1.0为普通屏。
如,iPhone4的物理像素宽度为640px;css像素宽度为320px;可以得出devicePixelRation = 2;可以知道,iPhone4是高清显示屏。
在移动web开发中,为了让retina屏下的图片也可以清晰显示,我们需要给retina屏准备另一套大尺寸的图片,确保图片不会放大而变模糊。我们可以根据devicePixelRatio值来判断应该加载的图片尺寸。

 
.css{/* 普通显示屏(设备像素比例小于等于1.3)使用1倍的图 */
background-image: url(img_1x.png);
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5){
.css{/* 高清显示屏(设备像素比例大于等于1.5)使用2倍图 */
background-image: url(img_2x.png);
}
}

移动端web开发基础概念的更多相关文章

  1. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  2. 移动端web开发技巧(转)

    原文链接:http://liujinkai.com/2015/06/06/mobile-web-skill/ 移动端web开发技巧 这是一个最好的时代,因为我们站在潮流中:但也是一个最坏的时代,因为我 ...

  3. 移动端 Web 开发前端知识整理

    文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...

  4. 移动端web开发的一些知识点

    整理一下自己平时移动端web开发中遇到的问题,也参考一下前辈的一些总结 1.最常见的要数1像素边框了 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在dpr=2的retina屏下会显示成 ...

  5. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  6. 移动端Web开发注意点

    不用考虑浏览器兼容性 移动端开发主要对象是手持设备,其中绝大部分是IOS和Android系统,so,在开发此类页面时不必纠结IE和其他一些2B浏览器的兼容性,webkit是本次开发重点. 当然,不同版 ...

  7. 移动端Web开发如何处理横竖屏

    <!Doctype html> <html> <head> <meta charset="utf-8"> <meta id=& ...

  8. [置顶] 提高生产力:Web开发基础平台WebCommon的设计和实现

    Web开发中,存在着各种各样的重复性的工作.为了提高开发效率,不在当码农,我在思考和实践如何搭建一个Web开发的基础平台. Web开发基础平台的目标和功能 1.提供一套基础的开发环境,整合了常用的框架 ...

  9. 安卓手机移动端Web开发调试之Chrome远程调试(Remote Debugging)

    一.让安卓打debug模式的apk包 二.将电脑中的chrome升级到最新版本,在chrome浏览器地址栏中输入chrome://inspect/#devices: 在智能手机还未普及时,移动设备的调 ...

随机推荐

  1. Python之路----------内置函数

    1.abs(x)绝对值 #coding=utf-8 a = 1 b = -2 print(abs(a)) print(abs(b)) 2.all(iterable)可迭代对象里面所有内容为真返回真,空 ...

  2. .html(),.text()和.val()的差异总结:

    .html(),.text()和.val()的差异总结: 1.html(),.text(),.val()三种方法都是用来读取选定元素的内容:只不过.html()是用来读取元素的html内容(包括htm ...

  3. 【翻译】如何给tomcat配置memcached-session-manager

    原文在这 ,其实不是忠实翻译,就是按照自己理解记录一下 第一步,下载所需的jar包 下载 memcached-session-manager-x.y.z.jar, memcached-session- ...

  4. 安装hadoop集群服务器(hadoop1.2.1)

    摘要:hadoop,一个分布式系统基础架构,可以充分利用集群的威力进行高速运算和存储.本文主要介绍hadoop的安装与集群服务器的配置. 准备文件: ▪ VMware11.0.0      ▪ Cen ...

  5. jdbc 数据库连接

    连接数据库 1)通过Driver来连接(Driver:数据库厂商提供的一个接口) public void testDriver()throws Exception{ Driver driver = n ...

  6. windows下的host文件在哪里?做什么用的?

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\ ...

  7. IPC-->PIPO

    Programing python 4th page 228 """ IPC http://www.cnblogs.com/BoyXiao/archive/2011/01 ...

  8. DataRow映射实体

    public static T ConvertToModel<T>(DataRow dr) where T : new() { T t = new T(); Type modelType ...

  9. 浅析MySQL中exists与in的使用

    exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录, ...

  10. 【转】lower_case_table_names=1 让MySQL不区分大小写

    lower_case_table_names=1 让MySQL不区分大小写! 此前有款网络游戏的数据库是采用MySQL.操作系统是CentOS.部分服务器的操作系统又是Windows. 出现了一个小毛 ...