视网膜显示器,高分辨率背景图像


102

这听起来像是一个愚蠢的问题。

如果我将此CSS代码段用于常规显示(box-bg.png200px x 200px);

.box{
    background:url('images/box-bg.png') no-repeat top left;
    width:200px;
    height:200px
}

如果我使用像这样的媒体查询来定位视网膜显示器(@ 2x图像为高分辨率版本);

@media (-webkit-min-device-pixel-ratio: 2), 
(min-resolution: 192dpi) { 

    .box{background:url('images/box-bg@2x.png') no-repeat top left;}
}

我是否需要将.boxdiv 的大小加倍到400px x 400px,以匹配新的高分辨率背景图像?


images/box-bg@2x.png的尺寸是多少?请明确指出这个问题。
TMS

Answers:


184

我是否需要将.box div的大小加倍至400px x 400px,以匹配新的高分辨率背景图像

不,但是您需要设置background-size属性以匹配原始尺寸:

@media (-webkit-min-device-pixel-ratio: 2), 
(min-resolution: 192dpi) { 

    .box{
        background:url('images/box-bg@2x.png') no-repeat top left;
        background-size: 200px 200px;
    }
}

编辑

要添加更多此答案,这是我倾向于使用的视网膜检测查询:

@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) { 

}

- 资源

注意 这min--moz-device-pixel-ratio:不是错字。在某些版本的Firefox中,这是一个有据可查的错误,应该这样编写才能支持较旧的版本(Firefox 16之前的版本)。 - 资源


就像@LiamNewmarch在下面的评论中提到的那样,您可以像这样background-size在速记background声明中包括:

.box{
    background:url('images/box-bg@2x.png') no-repeat top left / 200px 200px;
}

但是,我个人不建议使用简写形式,因为iOS <= 6或Android不支持该形式,因此在大多数情况下都不可靠。


您会为设置整页背景的背景大小提供任何提示吗?我知道x分量的宽度,但是y呢?
兰迪·L

3
@theOther在这种情况下,您可能想使用background-size: cover;。这将保持纵横比,同时用图像“覆盖”整个背景。
萝卜

4
如果愿意,您可以将background-size属性集成到,background例如:background: url('images/box-bg@2x.png') no-repeat top left / 200px 200px。请注意,不支持的浏览器background-size将忽略此规则。
Liam Newmarch

2
@LiamNewmarch我不会建议自己由于Android似乎并不了解简写形式
萝卜

@ 3rror404啊,好的,很公平。谢谢!
Liam Newmarch

16

这是一个解决方案,其中还包括每英寸〜160 点以上的 High(er)DPI(MDPI)设备,例如相当多的非iOS设备(例如:Google Nexus 7 2012):

.box {
    background: url( 'img/box-bg.png' ) no-repeat top left;
    width: 200px;
    height: 200px;
}
@media only screen and ( -webkit-min-device-pixel-ratio: 1.3 ),
       only screen and (    min--moz-device-pixel-ratio: 1.3 ),
       only screen and (      -o-min-device-pixel-ratio: 2.6/2 ), /* returns 1.3, see Dev.Opera */
       only screen and (         min-device-pixel-ratio: 1.3 ),
       only screen and ( min-resolution: 124.8dpi ),
       only screen and ( min-resolution: 1.3dppx ) {

       .box {
           background: url( 'img/box-bg@2x.png' ) no-repeat top left / 200px 200px;
       }

}

在收到来自评论的反馈后,@ 3rror404包含在他的编辑中,因此Webkit / iPhone之外还有一个广阔的世界。到目前为止,让大多数解决方案困扰我的一件事(就像上面在CSS-Tricks上作为参考源提到的那样)是,没有充分考虑到这一点。
原始的源就已经更进一步。

例如,Nexus 7(2012)屏幕是怪异device-pixel-ratio1.325TVDPI屏幕。以正常分辨率加载图像时,它们会通过插值放大,因此会变得模糊。对我而言,在媒体查询中应用此规则以将那些设备包括在内,从而获得了最佳的客户反馈。


1
每个尺寸2x的图像正好具有4x像素(例如,理论上可以预期为4x大小),而1.325 * 1.325仅支持1.755625的像素增加。我认为使用1.325dppi两种方式都会丢失图像的质量,但是如果您使用HiDPI,则客户端将只需要等待更长的时间来加载页面,调整图像大小时将具有更高的功耗(而Nexus 7表格相当以随机重启而闻名),并消耗更多带宽。因此,我建议坚持@2x只为2dppx+客户提供服务。
cnst

3

如果您打算对视网膜和非视网膜屏幕使用相同的图像,那么这里就是解决方案。假设您有一张图片,200x200并且在顶行有两个图标,在底行有两个图标。因此,这是四个象限。

.sprite-of-icons {
  background: url("../images/icons-in-four-quad-of-200by200.png") no-repeat;
  background-size: 100px 100px /* Scale it down to 50% rather using 200x200 */
}

.sp-logo-1 { background-position: 0 0; }

/* Reduce positioning of the icons down to 50% rather using -50px */
.sp-logo-2 { background-position: -25px 0 }
.sp-logo-3 { background-position: 0 -25px }
.sp-logo-3 { background-position: -25px -25px }

将精灵图标缩放和定位到实际值的50%,可以获得预期的结果。


Ryan Benhase的另一个方便的SCSS mixin解决方案。

/****************************
 HIGH PPI DISPLAY BACKGROUNDS
*****************************/

@mixin background-2x($path, $ext: "png", $w: auto, $h: auto, $pos: left top, $repeat: no-repeat) {

  $at1x_path: "#{$path}.#{$ext}";
  $at2x_path: "#{$path}@2x.#{$ext}";

  background-image: url("#{$at1x_path}");
  background-size: $w $h;
  background-position: $pos;
  background-repeat: $repeat;

  @media all and (-webkit-min-device-pixel-ratio : 1.5),
  all and (-o-min-device-pixel-ratio: 3/2),
  all and (min--moz-device-pixel-ratio: 1.5),
  all and (min-device-pixel-ratio: 1.5) {
    background-image: url("#{$at2x_path}"); 
  }
}

div.background {
  @include background-2x( 'path/to/image', 'jpg', 100px, 100px, center center, repeat-x );
}

有关上述mixin的更多信息,请点击这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.