Retina 디스플레이, 고해상도 배경 이미지


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;}
}

.box새로운 고해상도 배경 이미지와 일치하도록 div 의 크기 를 400x400 픽셀 로 두 배로 늘려야합니까?


images/box-bg@2x.png의 크기는 얼마입니까? 절대적으로 명확하게 질문에 넣어주세요.
TMS

답변:


184

새로운 고해상도 배경 이미지와 일치하도록 .box div의 크기를 400 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) { 

}

-출처

NB. 이것은 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는 어떻습니까?
Randy 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 2013.11.02

2
@LiamNewmarch Android가 축약 형을 이해하지 못하는 것 같기 때문에 나 자신을 추천하지 않습니다
Turnip

@ 3rror404 아 좋아, 충분히 공평 해. 감사!
Liam Newmarch 2014 년

16

다음 은 많은 비 iOS 기기 (fe : Google Nexus 7 2012 ) 와 같이 인치당 ~ 160 도트를 초과 하는 High (er) DPI ( MDPI ) 기기 도 포함 하는 솔루션입니다 .

.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 에서 위의 소스로 참조 된 것과 같이 지금까지 대부분의 솔루션에서 나를 괴롭히는 한 가지는 이것이 완전히 고려되지 않았다는 것입니다. 원본 소스는 더 이미 갔다.

예 넥서스 (7) (2012)은 화면이다 이상한와는 tvdpi 화면 device-pixel-ratio1.325 . 일반 해상도로 이미지를로드하면 보간을 통해 업 스케일링되므로 흐릿합니다. 이 규칙을 미디어 쿼리에 적용하여 최고의 고객 피드백에 성공한 장치를 포함했습니다.


1
각 차원의 2x 이미지는 정확히 4x 픽셀 (예 : 이론적으로 4x 크기로 예상 할 수 있음)을 갖는 반면 1.325 * 1.325는 픽셀에서 1.755625 증가 만 지원합니다. 1.325dppi를 사용하면 이미지의 품질이 저하 될 것이라고 생각하지만 HiDPI를 사용하면 클라이언트는 페이지로드를 더 오래 기다려야하며 이미지 크기를 조정하는 데 더 높은 전력 소비가 발생합니다 (넥서스 7 테이블은 상당히 무작위 재부팅으로 알려져 있음), 더 많은 대역폭을 사용합니다. 따라서 + 고객 @2x에게만 제공되는 것을 고수하는 것이 좋습니다 2dppx.
cnst

3

망막 및 비 망막 화면에 동일한 이미지를 사용할 계획이라면 여기에 해결책이 있습니다. 이미지가 200x200있고 맨 윗줄에 두 개의 아이콘이 있고 아랫 줄에 두 개의 아이콘 이 있다고 가정합니다 . 그래서 그것은 4 개의 사분면입니다.

.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 믹스 인 솔루션 .

/****************************
 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에 대한 자세한 내용은 여기를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.