Git Product home page Git Product logo

imgix.js's Introduction

imgix logo

imgix.js Build Status Slack Status

This documentation is for imgix.js version 3.0.0 and up. Those using imgix.js 2.x.x can find documentation in that version's readme and API reference.

Note: If you're looking for a Javascript library just to generate imgix URLs, check out imgix-core-js.

imgix.js allows developers to easily generate responsive images using the srcset and sizes attributes, or the picture element. This lets you write a single image URL that is parsed and used to make images look great at any screen size, by using imgix to process and resize your images on the fly.

Responsive images in the browser, simplified. Pure JavaScript with zero dependencies. About 2 KB minified and gzipped.

Overview / Resources

Before you get started with imgix.js, it's highly recommended that you read Eric Portis' seminal article on srcset and sizes. This article explains the history of responsive images in responsive design, why they're necessary, and how all these technologies work together to save bandwidth and provide a better experience for users. The primary goal of imgix.js is to make these tools easier for developers to implement, so having an understanding of how they work will significantly improve your imgix.js experience.

Below are some other articles that help explain responsive imagery, and how it can work alongside imgix:

Installation

There are several ways to install imgix.js. The appropriate method depends on your project.

  1. npm: npm install --save imgix.js
  2. Bower: bower install --save imgix.js
  3. Manual: Download the latest release of imgix.js, and use dist/imgix.js or dist/imgix.min.js.

After you've included imgix.js on your page, it will automatically run once, after the DOMContentLoaded event fires. This will detect and process all img and source tags on the page that are set up to use imgix.js as described in the Usage section of this README.

imgix.js has a few global options:

  • host: Your imgix hostname (defaults to null). This enables the use of ix-path and ix-params to define images, instead of having to manually type URLs out in imgix-src. This has several advantages:
    1. ix-params automatically URL/Base64-encodes your specified parameters, as appropriate.
    2. ix-params is a JSON string, which is easier to read than a URL and can be generated by other tools if necessary.
    3. Not having to re-type https://my-source.imgix.net helps keep your code DRY.
  • useHttps: A boolean (defaults to true), specifying whether to generate http or https-prefixed URLs.

These options can be defined in two ways. The first is to set them manually on the global imgix.config object:

<script src="imgix.js"></script>
<script>
  // Specify your imgix host. For these docs, we'll use `assets.imgix.net`.
  imgix.config.host = 'assets.imgix.net';
  // Optionally disable HTTPS image URL generation (defaults to `true`).
  imgix.config.useHttps = false;
</script>

The other option for setting global configuration options is to specify them with meta tags in your document's head. If present, these values will be detected just before the initial DOMContentLoaded call to imgix.init():

<head>
  <meta property="ix:host" content="assets.imgix.net">
  <meta property="ix:useHttps" content="true">
</head>

Usage

Now that everything's installed and set up, you can start adding responsive images to the page. There are a few ways to do this.

ix-src

The simplest way to use imgix.js is to create an img tag with the ix-src attribute:

<img
  ix-src="https://assets.imgix.net/unsplash/hotairballoon.jpg?w=300&amp;h=500&amp;fit=crop&amp;crop=right"
  alt="A hot air balloon on a sunny day"
>

This will generate HTML something like the following:

<img
  ix-src="https://assets.imgix.net/unsplash/hotairballoon.jpg?w=300&amp;h=500&amp;fit=crop&amp;crop=right"
  alt="A hot air balloon on a sunny day"
  sizes="100vw"
  srcset="
    https://assets.imgix.net/unsplash/hotairballoon.jpg?w=100&amp;h=167&amp;fit=crop&amp;crop=right 100w,
    https://assets.imgix.net/unsplash/hotairballoon.jpg?w=200&amp;h=333&amp;fit=crop&amp;crop=right 200w,

    https://assets.imgix.net/unsplash/hotairballoon.jpg?w=2560&amp;h=4267&amp;fit=crop&amp;crop=right 2560w
  "
  src="https://assets.imgix.net/unsplash/hotairballoon.jpg?w=300&amp;h=500&amp;fit=crop&amp;crop=right"
  ix-initialized="ix-initialized"
>

Since imgix can generate as many derivative resolutions as needed, imgix.js calculates them programmatically, using the dimensions you specify (note that the w and h params scale appropriately to maintain the correct aspect ratio). All of this information has been placed into the srcset and sizes attributes. Because of this, imgix.js no longer needs to watch or change the img tag, as all responsiveness will be handled automatically by the browser as the page is resized.

ix-path and ix-params

Here's how the previous example would be written out using ix-path and ix-params instead of ix-src. Regardless of which method you choose, the end result in-browser will be the same.

Please note: ix-params must be a valid JSON string. This means that keys and string values must be surrounded by double quotes, e.g., "fit": "crop".

<img
  ix-path="unsplash/hotairballoon.jpg"
  ix-params='{
    "w": 300,
    "h": 500,
    "fit": "crop",
    "crop": "right"
  }'
  alt="A hot air balloon on a sunny day"
>

picture tags

If you need art-directed images, imgix.js plays nicely with the picture tag. This allows you to specify more advanced responsive images, by changing things such as the crop and aspect ratio for different screens. To get started, just construct a picture tag with a source attribute for each art-directed image, and a fallback img tag. If you're new to using the picture tag, you might want to check out our tutorial to learn how it works.

The source tags can be used with ix-src or ix-path and ix-params, just like img tags. The following example will generate HTML that displays Bert and Ernie on small screens, just Bert on medium-sized screens, and just Ernie on large screens.

<picture>
  <source
    media="(min-width: 880px)"
    sizes="430px"
    ix-path="imgixjs-demo-page/bertandernie.jpg"
    ix-params='{
      "w": 300,
      "h": 300,
      "fit": "crop",
      "crop": "left"
    }'
  >
  <source
    media="(min-width: 640px)"
    sizes="calc(100vw - 20px - 50%)"
    ix-path="imgixjs-demo-page/bertandernie.jpg"
    ix-params='{
      "w": 300,
      "h": 300,
      "fit": "crop",
      "crop": "right"
    }'
  >
  <source
    sizes="calc(100vw - 20px)"
    ix-path="imgixjs-demo-page/bertandernie.jpg"
    ix-params='{
      "w": 300,
      "h": 100,
      "fit": "crop"
    }'
  >
  <img ix-path="imgixjs-demo-page/bertandernie.jpg">
</picture>

Advanced Usage

Manually Re-running imgix.js

If you need to process img or source tags added after the initial page load (for example, on an infinite scrolling website or single-page application), you can simply call imgix.init(). By default, this is idempotent: img and source tags that have already been processed by imgix.js will not be re-initialized. If you would like to re-initialize all imgix.js-formatted img and source tags, simply pass the force: true option: imgix.init({force: true}).

Lazy Loading With lazysizes

If you'd like to lazy load images, we recommend using lazysizes. In order to use imgix.js with lazysizes, you can simply tell it to generate lazysizes-compatible attributes instead of the standard src, srcset, and sizes:

imgix.init({
  srcAttribute: 'data-src',
  srcsetAttribute: 'data-srcset',
  sizesAttribute: 'data-sizes'
})

Overriding ix-host

If you need to display images from multiple imgix Sources, the host option can be overridden on any img or source tag by specifying an ix-host attribute in the tag:

<img
  ix-host="a-different-source.imgix.net"
  ix-path="unsplash/hotairballoon.jpg"
  ix-params='{
    "w": 300,
    "h": 500,
    "fit": "crop",
    "crop": "right"
  }'
  alt="A hot air balloon on a sunny day"
>

What is the ixlib param?

For security and diagnostic purposes, we default to signing all requests with the language and version of library used to generate the URL. This can be disabled by setting imgix.includeLibraryParam = false;, or via a meta tag:

<head>
  <meta property="ix:includeLibraryParam" content="false">
</head>

Browser Support

  • By default, browsers that don't support srcset, sizes, or picture will gracefully fall back to the default img src when appropriate. If you want to provide a fully-responsive experience for these browsers, imgix.js works great alongside Picturefill!
  • If you are using Base64 variant params and need IE <= 9 support, we recommend using a polyfill for atob/btoa, such as Base64.js.

Meta

imgix.js was made by imgix. It's licensed under the BSD 2-Clause license (see the license file for more info). Any contribution is absolutely welcome, but please review the contribution guidelines before getting started.

imgix.js's People

Contributors

jacktasia avatar paulstraw avatar jayeb avatar joshfrench avatar kellysutton avatar rakuista avatar psfrankie avatar zacman85 avatar alessbell avatar ivanseidel avatar jordanthomas avatar matiasnombarasco avatar

Stargazers

Roman avatar

Watchers

Mustapha Turki avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.