收藏一下高清屏和普通屏下背景图设置方案

引用自@莫声谷

以iphone 6 为例,物理分辨率为 1334*750,4.7英寸,根据这些数据可以得出:

ppi =
= 326

也就是说 dpr = 2, 1px = 2dp
那么,假设我们要在 300px *300px 的容器里,显示一张 300px*300px 的图片,此时1个位图信息对应4个dp,位图信息不可分割,所以不足的地方会用相似的颜色表示,这也就是普通图片在 Retian 屏幕下模糊的原因。
经过上面的分析,很显然,我们需要让 4个位图信息对应4个dp,也就是我们需要一个二倍图,600*600的图
解决一:设置media query 跟具dpr的不同,设置不同尺寸的 图片
可以用less或者sass写一个 mixin,这里我用的sass

//_mixin.scss
@mixin bg-img($name,$w,$h,$dpr,$suffix:png){
  @media screen and (-webkit-device-pixel-ratio: $dpr){
      background:url(http://img.163.com/#{$name}_#{$w*$dpr}_#{$h*$dpr}.#{$suffix});
  }
}
//main.scss
.box{
  @include bg-img("bg",300, 300, 2);
}
//=>输出
@media screen and (-webkit-device-pixel-ratio: 2) {
  .box {  background: url(http://img.163.com/bg_600_600.png); }
}

解决二: 设置viewport 的 initial-scal=0.5
这样相当于,1px = 1dp,此时图片就不需要二倍图了,按照设计图该给多大给多大,但是相对应的,div和字体的大小都会缩放,解决方案可以使用 rem布局,网上相关的内容很多,这里不再赘述。

吐槽###

简书竟然不支持MathJax
$$ppi=\frac{\sqrt{1334\times1334+750\times750}}{4.7}=326$$

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么模拟器下iP6的分辨率为375*667而设计图一般给750*1334? PPI:每英寸内有多少物理像素点(设...
    LoveBugs_King阅读 6,738评论 0 0
  • 问题的由来 手机屏幕的分辨率差异很大。 iphone4:320×480 iphone6:375×667 H5 网页...
    尚山夏香阅读 7,146评论 0 1
  • 一、meta标签的效果 移动端页面一般会在head头部添加如下meta标签。 该meta标签是否添加对页面渲染的影...
    nimw阅读 9,003评论 0 5
  • 今天被问到关于像素的问题,怒补了一下。 retina的原意是视网膜,retina屏就是通过技术把更多的像素点压缩到...
    奥特曼_阅读 5,635评论 0 3
  • 美国西点军校有句经典的校训"没有藉口(No excuse)!",乍听之下好像是分严格严厉,似乎要不择手段的完成目标...
    马可约伯阅读 2,555评论 0 0