devicePixelRatio
devicePixelRatio
window.devicePixelRatio是设备上物理像素和逻辑像素的比例。
公式表示就是:window.devicePixelRatio = 物理像素 / 逻辑像素
解释

这张图中第一行的「像素」(Points) 就是所谓的「逻辑像素」。
在 iPhone 4 前的时代,逻辑像素和物理像素是一一对应的——即,设计中的一个点对应屏幕硬件上的一个像素点。
iPhone 4 之后,Retina 屏幕出现。在 Retina 屏幕上,使用 4 个硬件上的像素点 (2 x 2) 来表示一个逻辑像素点。
举个例子:
在开发环境中,使用 12 pt 的字体,在非 Retina 屏幕上字面高度为 12 个物理像素点;而同样是 12 pt 的字体,在 Retina (@2x) 屏幕上的字面高度,是 24 个像素点。同样,使用代码来生成的一个 20 pt x 30 pt 尺寸的举行,在非 Retina 屏幕中尺寸为 20 x 30 个物理像素;而在 Retina (@2x) 屏幕上,其尺寸为 40 x 60 个物理像素。在 Retina 屏幕上进行设计,文字尺寸、空间大小等等都应该遵照逻辑像素进行。比如,为 iPhone 4/4s (逻辑像素 320 pt x 480 pt,物理像素 620 px x 960)设计,则界面中各个元素的尺度应当以 320 x 480 为准;在 Retina 屏幕上的「2x」,可以理解为元素的精细度翻了一倍。换言之,多出来的那些像素并不是用来显示更多内容的,而是用来提高这些内容的精细程度的。这样,同样界面在 iPhone 4/4s 和旧设备上的差别,就仅在于画面的精细程度,而非内容的多寡。使用设计软件制作界面元素时尺寸的翻倍,也是为了提高精细度;在开发环境中,仍是按照 @1x 的逻辑来设计界面;如果误用 @2x 的尺度,则会导致文字、控件等过小。
iPhone 6 Plus 的逻辑像素为 414 pt x 736 pt, 而其使用了新一代的 Retina 屏幕 (@3x),换言之,如果按照上述的显示方式,物理像素理应为 1242 px x 2208 px。 从图中 iPhone 6 Plus 的「渲染像素」亦可以看到这一个值。
使用场景
假设你的jsapi中的ui,img布局是基于@1x的逻辑来设计的,那么在后续@2x、@3x的设备展示时就会出现偏小的情况。
解决方案为根据不同的设备加载相应尺寸的设备。即在@2x的设备中尺寸翻倍。
如果没有设计适配逻辑,又想使用默认的@1x的效果,则可以使用:
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
指明网页宽度采用设备宽度,缩放比例为1。则浏览器会按照你设定的px去显示,而不会缩小至1/2/、1/3。
网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;
devicePixelRatio的更多相关文章
- 设备像素比devicePixelRatio简单介绍
本文所说devicePixelRatio其实指的是window.devicePixelRatio, 被所有WebKit浏览器以及Opera所支持,随着显示器的发展,这个属性也慢慢登上了前端技术的舞台. ...
- 深入理解移动web开发之PPI,Pixel,DevicePixelRatio(转)
如果你是一个开始接触移动Web开发的前端工程师,那么你或许也遇到了和我曾经遇到的过问题:有太多新的概念需要掌握,太多相似的概念需要区分.没关系,我将用两篇文章的篇幅来解决这些问题.上篇文章关于解释和区 ...
- 常见手机的设备分辨率、viewport和devicePixelRatio
常见手机的设备分辨率和viewport分辨率,及其1rem的大小(以vmin为单位) 常见的devicePixelRatio是1, 1.325, 1.5, 2, 2.4, 3. (具体见下面的表格, ...
- web移动端,需要清楚设备像素比devicePixelRatio的应用
我们这里所说的devicePixelRatio其实指的是window.devicePixelRatio, 被所有WebKit浏览器以及Opera所支持. 概念 devicePixelRatio ,它是 ...
- devicePixelRatio手机图片模糊的原因
一.移动设备图片模糊问题 手机上图片模糊问题原因就是一个像素在电脑上和手机上代表的实际像素的不同. 我们在样式表中使用的px(独立像素)单位其实并不一定代表着实际的一个像素(物理像素),这还要看硬件的 ...
- 转:devicePixelRatio和webkitBackingStorePixelRatio
转:关于canvas在retina屏下绘制文字或图像模糊的解决方案 一.问题描述 最近在鼓捣canvas的时候,发现绘制在canvas上的文字(或图片)在retina屏幕上会出现显示模糊的问题,感觉很 ...
- 移动前端开发之viewport,devicePixelRatio的深入理解
移动前端开发之viewport的深入理解 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的met ...
- Lumia 1520 IE mobile window.devicePixelRatio
Lumia 1520 IE11 mobile -> window.devicePixelRatio = 2.217964285714286 Lumia 1520 UAP 环境 -> win ...
- window.devicePixelRatio ,px,rem
window属性:devicePixelRatio 设备像素比 https://www.w3cschool.cn/fetch_api/fetch_api-atvq2nma.html devicePix ...
随机推荐
- Kong for Enterprise | Kong - Open-Source API and Microservice Management Layer
Kong for Enterprise | Kong - Open-Source API and Microservice Management Layer undefined
- IOS性能调优系列:使用Instruments动态分析内存泄漏
硬广:<IOS性能调优系列>第二篇,持续更新,欢迎关注. 第一篇介绍了Analyze对App做静态分析,可以发现应用中的内存泄漏问题,对于有些内存泄漏情况通过静态分析无法解决的,可以通过动 ...
- 45个必备的实用jQuery代码段[转载]
1. 如何创建嵌套的过滤器: //允许你减少集合中的匹配元素的过滤器, //只剩下那些与给定的选择器匹配的部分.在这种情况下, //查询删除了任何没(:not)有(:has) //包含class为“s ...
- eclipse的svn插件安装方式
eclipse的插件安装一般有3种方式: 1)通过eclipse的Help/ Install New Software...中, 点击Add, 添加一个在线更新地址,如:http://subclips ...
- spring mvc DispatcherServlet详解之拾忆工具类utils
DispatcherServlet的静态初始化 /** * Name of the class path resource (relative to the DispatcherServlet cla ...
- spring aop 如何切面到mvc 的controller--转载
原文:http://yjian84.iteye.com/blog/1920787 网上搜罗半天,不知道什么原因,看了源码,好像他们说的controller 是不受代理的,也对哈,不知道怎么办,于是在h ...
- ios中从相册:相机中获取图片信息
ios中从相册/相机中获取图片信息 从相册中获取图片的信息 UIImagePickerController *imgPickView = [[UIImagePickerController alloc ...
- Java基础知识强化06:使用BigDecimal计算阶乘1+1/2!+1/3!+……
package himi.hebao04; import java.math.BigDecimal; public class TestDemo07 { public static void main ...
- Objective-C:属性(@property)
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- thread跟Runnable实现多线程
//两种实现方式的区别和联系: //在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处: //避免点继承的局限,一个类可以继承 ...