No commit activity in last 3 years
No release in over 3 years
Compass plugin for managing and delivering sharp vector images to all devices and browsers. I'm not reinventing the wheel, this an idea of Filament Group. Take a look at Unicon http://filamentgroup.com/lab/unicon/
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 0.10.0
 Project Readme

Compass Image Delivery

Compass plugin for managing and delivering sharp vector images to all devices and browsers. I'm not reinventing the wheel, this is an idea of Filament Group. Take a look at Unicon.

The usage differs a bit from Unicon

You should create a scss partial named _images.scss in the specified stylesheet directory. And here you can write all the css rules you want @extending the placeholder selectors who have the background declarations. For example:

/* _images.scss */

.foo, .var:after {
	@extend %arrow;
}

.logo {
	@extend %logo;
}

This assumes there are two images in the specified image directory, arrow.svg and logo.svg.

The output after processing would be 3 different files like:

/* images-svg.css */

.foo, .var:after {
	background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmN42NjkiLz4KPC9zdmc+Cg==");
	background-repeat: no-repeat;
}
          
.logo {
	background-image: url("data:image/svg+xml;base64,PDjVuBliasbhUnlsnIhNjVsDNFnBH4wIiBlbm+Cg==");
	background-repeat: no-repeat;
}

/* images-png.css */

.foo, .var:after {
	background-image: url("data:image/png;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmN42NjkiLz4KPC9zdmc+Cg==");
	background-repeat: no-repeat;
}
          
.logo {
	background-image: url("data:image/png;base64,PDjVuBliasbhUnlsnIhNjVsDNFnBH4wIiBlbm+Cg==");
	background-repeat: no-repeat;
}

/* images-fallback.css */

.foo, .var:after {
	background-image: url("/css_path/arrow.png");
	background-repeat: no-repeat;
}
          
.logo {
	background-image: url("/css_path/logo.png");
	background-repeat: no-repeat;
}

Installation

Installation is simple via Ruby Gems.

gem install compass-img-delivery

Cairo and svg2png are required, I recommend install them with Homebrew.

brew install svg2png

Usage

To use img-delivery with your project, require the plugin from your Compass configuration:

require "img-delivery"

  • Call img_delivery sass function anywhere in your scss files to start using the extension.

    $images: img_delivery("/path/to/images/", "/path/to/stylesheets/file-basename", "/path/to/javascripts/file-basename");

  • Create the _file-basename.scss (see stylesheets path above) partial in /path/to/stylesheets/ and start coding your SCSS rules.

    When running compass some files should automatically be created in /path/to/stylesheets/:

     /* This files contains all the placeholder selectors 
      * mapping images in /path/to/images/svg/ and each one
      *  @import a different copy of _images.scss file. */	 	 
     /path/to/stylesheets/file-basename-svg.css.scss
     /path/to/stylesheets/file-basename-png.css.scss
     /path/to/stylesheets/file-basename-fallback.css.scss	
     
     /* copies of original _images.scss partial */	
     /path/to/stylesheets/.img-delivery/_file-basename-svg.scss  
     /path/to/stylesheets/.img-delivery/_file-basename-png.scss
     /path/to/stylesheets/.img-delivery/_file-basename-fallback.scss
    

    What file @imports what:

     /path/to/stylesheets/file-basename-svg.css.scss
     	@import /path/to/stylesheets/.img-delivery/_file-basename-svg.scss
     
     /path/to/stylesheets/file-basename-png.css.scss
     	@import /path/to/stylesheets/.img-delivery/_file-basename-png.scss
     
     /path/to/stylesheets/file-basename-fallback.css.scss
     	@import /path/to/stylesheets/.img-delivery/_file-basename-fallback.scss
    

TODO

  • Improve code. DRY.
  • More Sass functions, return data-uris, png paths ...

Credit

  • The original idea and the js code are work of Filament Group guys. See Unicon.