本文根据retinajs的官网翻译,如果有翻译错的地方,还请朋友指正。谢谢。

工作原理:

现在有4种方式:

  1.自动交换“img”标签的"src"路径。

  2.在内联样式中自动交换背景图像的网址。

  3.手动指定一个高分辨率的图像不同位置。

  4.自动创建CSS背景图像媒体查询。

通常,在你的页面上引用一个图像,看起来像这样:

<img src="/images/my_image.png" data-rjs="3" />

通过使用"data-rjs"属性,retina.js将会知道这个img标签需要引用哪张图片,任何不使用此属性的图像不会被处理。

把"data-rjs"的属性值设为3,就相当于你告知了retina.js您已创建了比传统像素密度大3倍的高分辨率图像(包括@2x和@3x的图片)。

当一个页面加载时,脚本将会检测用户的环境,看它适合展示哪种分辨率的图片。如果它检测出来的分辨率比你设置的要大,那么将会显示你设置的最大的分辨率的图片,如果比你设置的要小,该脚本将会匹配显示最合适的分辨率大小的图片,

它是通过改变你“img”标签里面的"src"的值来实现的,就像这样:

"/images/my_image@3x.png"

注意,脚本假设的是你使用苹果规定的高分辨率修饰符(@ 2X,3X”,等等)来表示你的服务器上的高分辨率图像。

如果你不使用苹果的规定,您可以使用“data-rjs”属性告诉retina.js你的高分辨率图片在哪个文件夹下面。像下面这样:

<img src="/images/my_image.png" data-rjs="/images/2x/my_image.png" />

在这种情况下,该脚本不会基于用户的环境动态提供图片路径。它只会为您传递比传统分辨率高的图片。

您也可以通过使用retina.js内嵌样式设置背景图片。 例如:

<div style="background: url(my_image.png);" data-rjs="3" />

这将被转换为:

<div style="background: url(my_image@3x.png);" data-rjs="3" />

这对任何的HTML标签都有效,除了<img>标签。如果它是一个<img>标签,retina.js将会替换“src”属性的属性值。如果是别的,脚本会替换掉内嵌背景图片。其他工作完全一样。

retina.js 同时也可以在 SCSS, Sass, Less, and Stylus使用!

我们稍后将会讲解。

如何使用它?
使用javascript(the modern way)

retina.js几乎与任何的javascript构建过程一样,你可以想像。源代码通过ES6编写,你可以通过NPM和Bow得到一个名为“retinajs”的安装包。

当你按照这种方式使用retina.js时,脚本假设你可能不希望自动运行。因此为了调用它,你需要做以下的事情:

import retina from 'retinajs';

window.on('load', retina);
JavaScript (the old-fashioned way)

这个脚本会帮助你把图片自动替换成高分辨率的图片(如果有高分辨率的图片)。它还创建一个叫做retinajs的全局函数,所以,只要你愿意,你可以重新初始化脚本。要使用它,你需要下载压缩版本,在</body>之前引用它。

  1.把retina.min.js文件放入服务器上

  2.在你的页面里面引用这个脚本

  <script type="text/javascript" src="/scripts/retina.min.js"></script>

  把它放在你页面的底部,</body>标签之前。

  3.大功告成!

SCSS, Sass, LESS, and Stylus

css预处理是在样式表中提供高分辨率的图片,每一种预处理机制,都有4个参数:

  1.path - 你的标准分辨率图像的路径。

  2.cap - 您准备的最高分辨率图片的等级。默认为2。

  3.size - background-size的属性值。默认为auto auto。

  4.extras - 任何其他背景属性的属性值。默认没有。

mixin是通过解析后,创建媒体查询来引用到不同高分辨率的图片,同时提供一个原始图片的background-size为了维持合适的尺寸。要使用它,下载你最喜欢的mixin,然后引入或者包括到你的SCSS/Less/等样式表中,并且应用你选择的元素上去。

SCSS举例:

语法:

  @include retina('/images/my_image.png', 3, 100px 50px, center center no-repeat);

步骤:

  1.添加 retina mixin到你的样式表中。

  2.在你的样式表中,调用retina mixin,而不是使用 background-image

    SCSS:

    #logo { @include retina('my_image.png', 3, 100px 50px, center center no-repeat); }

    Sass:

    #logo

    +retina ('my_image.png', 3, 100px 50px, center center no-repeat); 

    Less:
   
#logo {
    .retina('my_image.png', 3, 100px 50px, center center no-repeat);
   }
 
   Stylus:
   #logo
    retina('my_image.png', 3, 100px 50px, center center no-repeat); 将编译成:
  #logo {
      background: url("my_image.png") center center no-repeat;
      background-size: 100px 50px;
    }     @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) {
      #item {
        background: url("my_image@2x.png") center center no-repeat;
        background-size: 100px 50px;
      }
    }     @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
      #item {
        background: url("my_image@2x.png") center center no-repeat;
        background-size: 100px 50px;
      }
    }     @media (-webkit-min-device-pixel-ratio: 3), (min-resolution: 288dpi) {
      #item {
        background: url("my_image@3x.png") center center no-repeat;
        background-size: 100px 50px;
      }
    }
 
 

retinajs 使用方法的更多相关文章

  1. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

  4. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  5. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  6. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  7. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  8. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

随机推荐

  1. poj1001 Exponentiation 大数的幂

    Description Problems involving the computation of exact values of very large magnitude and precision ...

  2. Python的高级特性5:谈谈python的动态属性

    正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性. 看下面一种常见的get/set操作 In [174]: class ...

  3. Swift中的Masonry第三方库——SnapKit

    在OC开发时我常用一个名叫Masonry的第三方Autolayout库,在转Swift后发现虽然Swift可以混编OC,但总感觉有些麻烦,在Github上发现了这个叫做SnapKit的第三方库,发现使 ...

  4. String PK StringBuilder,传说就是传说,只有动手实验,才能得出确定的答案

    本机测试结果如下: 大部分情况下,string 性能并不比StringBuilder差,只有特殊情况才出现差异,并非 如前面有些朋友测试的结果哪样,只要使用StringBuilder 就一定比Stri ...

  5. 初中级Web开发人员的福音:《JavaScript启示录》上市了

    经历过14个月的等待,本书终于上市了,完全口语化叙述,请参考右边的链接. 本书介绍 本书无关于JavaScript设计模式,也无关于JavaScript面向对象代码实现.本书的写作目的也不是鉴别Jav ...

  6. 2013级软件工程GitHub账号信息

    GitHub账号信息 序号 班级 学号 姓名 个人GitHub网址 1 信1301-1班 20122951 刘伟 https://github.com/weige8882 2 信1301-1班 201 ...

  7. 化茧成蝶,开源NetWorkSocket通讯组件

    前言 前后历时三年,期间大量参考.Net Framework和Asp.net MVC源代码,写写删删再重构,组件如今更新到V1.5.x了.从原来的丑小鸭,变成今天拥有稳定和强大的tcp协议支持基础层, ...

  8. 深入理解计算机系统(4.1)---X86的孪生兄弟,Y86指令体系结构

    引言 各位猿友们好,计算机系统系列很久没更新了,实在是抱歉之极.新的一年,为了给计算机系统系列添加一些新的元素,LZ将其更改为书的原名<深入理解计算机系统>.这本书非常厚,而且难度较高,L ...

  9. nios II--实验7——数码管IP软件部分

    软件开发 首先,在硬件工程文件夹里面新建一个software的文件夹用于放置软件部分:打开toolsàNios II 11.0 Software Build Tools for Eclipse,需要进 ...

  10. 【AHOI2014复仇】

    RT,NOIP全挂,屌丝要逆袭……原本准备在QQ空间写,结果发现打不开,然后发现了这个……