最近在了解移动端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之路----------迭代器

    直接用作于for循环的数据类型有以下几种: 1.集合类的数据类型:list tuple dict set str等 2.生成器generator,包括生成器和带有yiled 的generator fu ...

  2. 基于Java Netty框架构建高性能的部标808协议的GPS服务器

    使用Java语言开发一个高质量和高性能的jt808 协议的GPS通信服务器,并不是一件简单容易的事情,开发出来一段程序和能够承受数十万台车载接入是两码事,除去开发部标808协议的固有复杂性和几个月长周 ...

  3. HBase的Write Ahead Log (WAL) —— 整体架构、线程模型

    解决的问题 HBase的Write Ahead Log (WAL)提供了一种高并发.持久化的日志保存与回放机制.每一个业务数据的写入操作(PUT / DELETE)执行前,都会记账在WAL中. 如果出 ...

  4. Leetcode: Encode String with Shortest Length && G面经

    Given a non-empty string, encode the string such that its encoded length is the shortest. The encodi ...

  5. HTML的<object>标签 (转)

    object标签用于定义一个嵌入的对象,包括:图像.音频.Java applets.ActiveX.PDF以及Flash.该标签允许您规定插入HTML文档中的对象的数据和参数,以及可用来显示和操作数据 ...

  6. paper 127:机器学习中的范数规则化之(二)核范数与规则项参数选择

    机器学习中的范数规则化之(二)核范数与规则项参数选择 zouxy09@qq.com http://blog.csdn.net/zouxy09 上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮 ...

  7. 纳尼,java可以在接口中实现非抽象方法了?

    纳尼,接口中可以定义实例方法了?! 纳尼,接口中还可以定义静态方法了?! 没错,在Java8中新增了很多新的特性,其中就包括可以在接口中添加方法和变量. 首先我们来看下代码 public interf ...

  8. Myeclipse中添加XFire插件支持

    自Myeclipse7.5后貌似默认不启用XFire插件的集成  本人今天使用Myeclipse10.6是发现没有XFire 自己捣鼓捣鼓 已经成功添加XFire 添加步骤 1.打开Myeclipse ...

  9. div水平居中和垂直居中

    水平居中和垂直居中 水平居中包含两种情况:        块级元素的水平居中:margin:0px auto;        文字内容的水平居中:text-align: center;        ...

  10. C++ new和delete具体操作符是怎样的

    在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数.如下所示: int *p = (int*) malloc( sizeof(int) * 10 ); //分配10个i ...