高清屏的背景图片适配

当我们把一个图标做成CSS中的背景图,在视网膜屏上预览时会发现图标是模糊的,所以我们会同时准备一个2倍大小的图标给高清屏,那么问题来了,怎么实现在普通屏下是普通背景图,而在高清屏下是用的高清图呢?


主要有四种实现方式:

1. media query + pixel-ratio 实现

2. img标签引用的不同大小图片,通过retina.js根据设备自动替换图片地址

3. image-set 实现(不兼容微信浏览器)

4. svg 实现


线上效果查看:

PC端: http://danielding.github.io/samples/retina_adapt_image_solution.html

手机端二维码:





================================================================================================================


高清屏的背景图片适配就是要做到响应式背景图片, 自适应各种视网膜(Retina)屏幕的背景图片, 可以通过Media Queries和image-set实现:

Media Queries:


  1. .hd{
  2.    background-image:url(105-160.png);/* 普通屏幕 */
  3. }
  4. /* ------------- Retina ------------- */
  5. @media only screen and (-o-min-device-pixel-ratio: 2/1), /* Opera */
  6.        only screen and (min--moz-device-pixel-ratio: 2), /* Firefox 16 之前 */
  7.        only screen and (-webkit-min-device-pixel-ratio: 2), /* Webkit */
  8.        only screen and (min-resolution: 240dpi), /* 标准 */
  9.        only screen and (min-resolution: 2dppx) /* 标准 */
  10. {
  11.     .hd{
  12.     background-image:url(210-320.png);
  13.     background-size105px 155px;
  14.     }
  15. }


使用“Media Queries”的问题是,CSS 代码的可维护性不高,有一些 hack 的味道。在高分辨率显示器下他没有选择的权利。同时还有另一种解决方案;

CSS[image-set]:


  1. .hd{
  2.     background-imageurl(no-image-set.png);
  3.     /* Retina */
  4.     background-image: -webkit-image-set(url(low-res.png) 1x, url(high-res.png) 2x);
  5.     background-image: -moz-image-set(url(low-res.png) 1x, url(high-res.png) 2x);
  6.     background-image: -o-image-set(url(low-res.png) 1x, url(high-res.png) 2x);
  7.     background-image: -ms-image-set(url(low-res.png) 1x, url(high-res.png) 2x);
  8. }

image-set的好处是,在支持image-set的浏览器会在高分辨下匹配需要的图像,而没有其他额外的功能。为浏览器提供不同的图像选择,这浏览器在不同的分辨下选择正确的图像。不需要告诉浏览器使用什么图像,而是直接提供了图像让浏览器选择。

image-set能让各种不同分辨下的图像都显示在CSS中的同一个地方。而使用media queries显示不同图像时,你可能会隔开很多行代码,难于寻找到对应的图像。



你可能感兴趣的:(页面架构,响应式)