Skip to content

Latest commit

 

History

History
134 lines (87 loc) · 3.6 KB

README.md

File metadata and controls

134 lines (87 loc) · 3.6 KB

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.