# Jekyll Responsive Images Jekyll Responsive Images is a [Jekyll](http://jekyllrb.com/) plugin and utility for automatically resizing images. Its intended use is for sites which want to display responsive images using something like [`srcset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Img#Specifications) or [Imager.js](https://github.com/BBC-News/Imager.js/). [![Build Status](https://travis-ci.org/wildlyinaccurate/jekyll-responsive-image.svg?branch=master)](https://travis-ci.org/wildlyinaccurate/jekyll-responsive-image) [![Coverage Status](https://coveralls.io/repos/wildlyinaccurate/jekyll-responsive-images/badge.svg?branch=master&service=github)](https://coveralls.io/github/wildlyinaccurate/jekyll-responsive-images?branch=master) [![Dependency Status](https://gemnasium.com/wildlyinaccurate/jekyll-responsive-images.svg)](https://gemnasium.com/wildlyinaccurate/jekyll-responsive-images) ## Installation You can either use the gem and update your `_config.yml`: ``` $ gem install jekyll-responsive_image ``` ```yaml # _config.yml gems: [jekyll-responsive_image] ``` Or you can simply copy [`responsive_image.rb`](lib/jekyll/responsive_image.rb) into your `_plugins` directory. ## Configuration An example configuration is below. ```yaml responsive_image: # [Required] # Path to the image template. template: _includes/responsive-image.html # [Optional, Default: 85] # Quality to use when resizing images. default_quality: 90 # [Optional, Default: []] # An array of resize configuration objects. Each object must contain at least # a `width` value. sizes: - width: 480 # [Required] How wide the resized image will be. quality: 80 # [Optional] Overrides default_quality for this size. - width: 800 - width: 1400 quality: 90 # [Optional, Default: assets/resized/%{filename}-%{width}x%{height}.%{extension}] # The template used when generating filenames for resized images. Must be a # relative path. # # Parameters available are: # %{basename} Basename of the file (assets/some-file.jpg => some-file.jpg) # %{filename} Basename without the extension (assets/some-file.jpg => some-file) # %{extension} Extension of the file (assets/some-file.jpg => jpg) # %{width} Width of the resized image # %{height} Height of the resized image # output_path_format: assets/resized/%{width}/%{basename} ``` ## Usage Replace your images with the `responsive_image` tag, specifying the path to the image in the `path` attribute. ```twig {% responsive_image path: assets/my-file.jpg %} ``` You can override the template on a per-image basis by specifying the `template` attribute. ```twig {% responsive_image path: assets/my-file.jpg template: _includes/another-template.html %} ``` Any extra attributes will be passed straight to the template as variables. ```twig {% responsive_image path: assets/image.jpg alt: "Lorem ipsum..." title: "Lorem ipsum..." %} ``` ### Liquid variables as attributes You can use Liquid variables as attributes with the `responsive_image_block` tag. This tag works in exactly the same way as the `responsive_image` tag, but is implemented as a block tag to allow for more complex logic. > **Important!** The attributes in the `responsive_image_block` tag are parsed as YAML, so whitespace and indentation are important! ```twig {% assign path = 'assets/test.png' %} {% assign alt = 'Lorem ipsum...' %} {% responsive_image_block %} path: {{ path }} alt: {{ alt }} {% if title %} title: {{ title }} {% endif %} {% endresponsive_image_block %} ``` ### Template You will need to create a template in order to use the `responsive_image` tag. Below are some sample templates to get you started. #### Responsive images with `srcset` ```twig {% capture srcset %} {% for i in resized %} /{{ i.path }} {{ i.width }}w, {% endfor %} {% endcapture %} ``` #### Responsive images with `` ```twig {% for i in resized %} {% endfor %} ``` #### Responsive images using [Imager.js](https://github.com/BBC-News/Imager.js/) > This template assumes an `output_path_format` of `assets/resized/%{width}/%{basename}` ```twig {% assign smallest = resized | sort: 'width' | first %}
``` ### Template Variables The following variables are available in the template: | Variable | Type | Description | |----------- |--------|------------------------------------------------------------------------------------------------------| | `path` | String | The path of the unmodified image. This is always the same as the `path` attribute passed to the tag. | | `resized` | Array | An array of all the resized images. Each image is an **Image Object**. | | `original` | Object | An **Image Object** containing information about the original image. | | `*` | String | Any other attributes will be passed to the template verbatim as strings. | #### Image Objects Image objects (like `original` and each object in `resized`) contain the following properties: | Variable | Type | Description | |-------------|---------|-------------------------------------------------------------------------| | `path` | String | The path to the image. | | `width` | Integer | The width of the image. | | `height` | Integer | The height of the image. | | `basename` | String | Basename of the file (`assets/some-file.jpg` => `some-file.jpg`). | | `filename` | String | Basename without the extension (`assets/some-file.jpg` => `some-file`). | | `extension` | String | Extension of the file (`assets/some-file.jpg` => `jpg`). |