【问题标题】:Create background image for retina and non-retina displays为视网膜和非视网膜显示器创建背景图像
【发布时间】:2014-02-03 14:00:57
【问题描述】:

情况

HTML 页面背景图像应显示在固定位置,填满整个屏幕或窗口(在非平板电脑、非智能手机设备上)。

背景图片是使用ImageShack 创建的。到目前为止没有任何问题。

我创建了一个Plunk 来展示当前的进度。

问题

在非视网膜设备(戴尔笔记本电脑)上,图像似乎可以正常渲染,填满页面的整个背景。

在我的 iPhone(视网膜)上,该图像绝对不会显示为高分辨率图像。

我目前的解决方案

本示例中使用的 JavaScript 代码如下:

function isRetina() {
  return window.devicePixelRatio > 1;
}

$(document).ready(function() {
  var url = "http://farm8.staticflickr.com/7398/11622056325_08e35bd803_o_d.jpg";
  var b = $('body'), w = $(window), width = w.innerWidth(), height = w.innerHeight();
  $('#retina').text('Is ' + (isRetina() ? '' : 'not') + ' retina.');
  $('#size').text(width + " x " + height);
  b.css('background-image'
    , 'url(http://imagizer.imageshack.us/' 
      + width 
      + 'x' 
      + height 
      + 'f0/' 
      + url 
      + ')');
  if (isRetina()) {
    b.css('background-size', (width / 2) + 'px ' + (height / 2) + 'px');
  }
});

问题

  1. 应使用哪些 CSS 设置来设置高分辨率“视网膜”背景图片?
  2. 如何在 iPhone 上创建填充整个(可见)屏幕的背景图像?

更新:我的解决方案

尽管mcmac's answer 带来了一些见解,但这并不是我想要的答案。我只是想了解如何设置背景图像的参数,以便在视网膜屏幕上显示高分辨率图像。

解决方法很简单。

a) 使用背景尺寸

当使用background-size 时,实际图像必须是屏幕大小的两倍(在每个方向上),background-size 属性必须具有屏幕大小(与我所做的相反:一半屏幕大小):

b.css('background-image', 'url(http://my.image.url.com/size' + (width * 2) + 'x' + (height * 2) + ')');
b.css('background-size', width + 'px ' + height + 'px');

b) 使用固定图像

作为R3tep suggested,我可以使用普通的固定图像代替背景图像。在这种情况下,图像的大小必须是屏幕上图像大小的两倍,并且 css 必须是 height: 100%; width: 100%。

【问题讨论】:

  • this 似乎解决了这个问题的第一部分?
  • 带有position: fixed、z-index: 0 和width: 100% 的img 标签不是解决方案吗?
  • @Liam 检测视网膜显示器在我的机器上工作。只是不清楚如何实际使用高分辨率图像以及我应该使用哪个 css。

标签: javascript jquery html css retina


【解决方案1】:

你不需要 js,你可以使用 css 媒体查询视网膜:

@media
only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and (   min--moz-device-pixel-ratio: 2),
only screen and (     -o-min-device-pixel-ratio: 2/1),
only screen and (        min-device-pixel-ratio: 2),
only screen and (                min-resolution: 192dpi),
only screen and (                min-resolution: 2dppx) { 

  /* Retina-specific stuff here */

}

iphone和ipad的媒体查询example

【讨论】:

  • 您能再解释一下吗?我的问题是,我想创建一个与当前屏幕(窗口)大小完全相同的背景图像。我需要 JavaScript 来获得正确大小的图像。现在的问题是,我不清楚我是否应该获得双倍屏幕尺寸的图像以用于视网膜显示,或者我是否应该使用这种background-size 样式。
  • 如果你想在全尺寸窗口上创建背景,你有两种方法:首先使用背景覆盖,然后使用 jquery。如果您想为视网膜显示创建更好的背景,您必须使用双倍尺寸背景。现在,如果您的网站仅适用于现代浏览器,您可以使用第一种方式,但如果您需要支持 ie 和旧浏览器,则必须添加 jquery 脚本,此链接将有助于您检查此css-tricks.com/perfect-full-page-background-image
  • 但是第一个解决方案(背景封面)总是加载一个非常大的图像,对吗?使用 jQuery(例如我上面的代码),图像已经缩放到正确的尺寸。
  • 不,首先你使用普通文件进行正常显示,然后为视网膜添加样式,在里面你为视网膜显示设置双倍大小的新背景文件,这是正确的方法。这是第一种方式的解决方案
  • 如果您为手机准备样式,首先您要做的是声明用于视网膜显示的图像。很好的例子是getbootstrap.com/css/#grid 哲学是简单的移动优先的引导外观风格。因此,当您首先为移动设备、第二台平板电脑和最后一台台式机编写 css 时,您的浏览器会检查您当前的分辨率和 dpi 并为此提供样式。这与 jquery 中的 use 函数完全相同。先写函数和指令,以后就可以使用这个函数了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多