Skip to content

Instantly share code, notes, and snippets.

@jasonkmccoy
Created March 12, 2015 23:58
Show Gist options
  • Save jasonkmccoy/ecc7e636d154e16d469e to your computer and use it in GitHub Desktop.
Save jasonkmccoy/ecc7e636d154e16d469e to your computer and use it in GitHub Desktop.
SVG background images with PNG and retina fallback http://zerosixthree.se/8-sass-mixins-you-must-have-in-your-toolbox/
$image-path: '../img' !default;
$fallback-extension: 'png' !default;
$retina-suffix: '@2x';
@mixin background-image($name, $size:false){
background-image: url(#{$image-path}/#{$name}.svg);
@if($size){
background-size: $size;
}
.no-svg &{
background-image: url(#{$image-path}/#{$name}.#{$fallback-extension});
@media only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) {
background-image: url(#{$image-path}/#{$name}#{$retina-suffix}.#{$fallback-extension});
}
}
}
body {
@include background-image('pattern');
}
@jasonkmccoy
Copy link
Author

This mixin depends on Modernizr and creates a bit more work for you when creating images for your site, but it’s really worth it in the end.
You need one .svg file, that will serve as the default background image. You’ll also need a regular .png that serves as a fallback for non-svg-supporting browsers. And last you need a twice as large .png as a second fallback to retina screens.
All in all you need this:

pattern.svg
pattern.png
[email protected]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment