如何以跨浏览器兼容的方式检测访问网页的设备的像素密度,以便可以为任何设备提供标准或高分辨率图像而不强制使用双倍图像?
是否有任何自动化此过程的JavaScript库?
如何以跨浏览器兼容的方式检测访问网页的设备的像素密度,以便可以为任何设备提供标准或高分辨率图像而不强制使用双倍图像?
是否有任何自动化此过程的JavaScript库?
iPhone 4s、iPhone 5、iPad3、iPad4、Macbook 15英寸、Macbook 13英寸均使用Retina显示屏。
Android也支持高分辨率显示,Windows 8(Lumia 920)也支持,就像@JamWaffles提到的那样。
增加高分辨率支持有利于用户体验,但对开发者的负担和移动带宽会产生影响。有些人不建议这样做。(Peter-Paul Koch,请参见底部的“进一步阅读”)
有两种方法可以实现此功能。一种是Javascript,另一种是CSS。所有当前的解决方案都是针对Retina的,但很容易扩展到Android高分辨率。
CSS解决方案涉及媒体查询和-webkit-min-device-pixel-ratio
或-webkit-device-pixel-ratio
<img>
标签更难使用。Javascript解决方案涉及window.devicePixelRatio
属性。
对于普通图像,比如一个图标
.sample-icon {
background-image: url("../images/sample-icon.png");
background-size: 36px 36px;
}
对于Retina屏幕,请添加以下内容
@media only screen and (-webkit-min-device-pixel-ratio: 2), /* Webkit */
(min-resolution: 192dpi) /* Everyone else */ {
.sample-icon {
background-image: url("../images/sample-icon-highres.png");
background-size: 18px 18px;
}
如果你不想记忆数字,你可以使用min-resolution: 2dppx
来替换min-resolution: 192dpi
。
请注意以下差异:
资源: + http://www.w3.org/blog/CSS/2012/06/14/unprefix-webkit-device-pixel-ratio/ + http://view.jquerymobile.com/master/demos/widgets/buttons/#CustomIcons
使用window.devicePixelRatio
属性检测分辨率。
if (window.devicePixelRatio >= 2) {
alert("This is a Retina screen");
//Do something to manipulate image url attribute
//for example add `@2x-` before all image urls
}
浏览器支持
Safari、Android WebKit、Chrome 22+和Android上的Chrome、Opera Mobile、BlackBerry WebKit、QQ、Palm WebKit, 参考资料:http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html
Android设备使用1.5作为高分辨率而不是Retina的2。 http://developer.android.com/guide/webapps/targeting.html --#Targeting Device Density with CSS,#Targeting Device Density with JavaScript
http://www.quirksmode.org/blog/archives/2012/07/more_about_devi.html “我不喜欢提供特殊的retina图片,因为它会使网站变得过重-特别是在移动连接上。尽管如此,人们仍将这样做。”——Peter-Paul Koch。
更新2013-04-18 更新jQuery移动链接
var retina = window.devicePixelRatio > 1;
这应该使视网膜返回true,您可以使用if函数来提供正确的图像。
来源:http://briancray.com/posts/detect-retina-displays-with-javascript
-InfiniDaZa
你需要了解网络能力、响应式图片和资源加载。
到目前为止,JavaScript 的解决方案还不够完美,因为它们通常需要在图像交换之前下载两个资源(图像)。
除非你选择使用全面的解决方案,比如这个:http://adaptive-images.com,否则最好使用背景 CSS 媒体查询。
这里有详细的说明:https://vimeo.com/38947881