Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save AdamBrodzinski/3309435 to your computer and use it in GitHub Desktop.
Save AdamBrodzinski/3309435 to your computer and use it in GitHub Desktop.
Using Compass to generate normal and retina sprite maps
@import "compass/utilities/sprites"; // Include compass sprite helpers
@import "compass/css3/background-size"; // Include helper to calc background size
@mixin sprite($name, $hover: false, $active: false) {
@include retina-sprite($name, $sprites, $sprites2x, $hover, $active);
}
// The general purpose retina sprite mixin.
//
// @include retina-sprite(name, $spritemap1, $spritemap2)
// @include retina-sprite(name, $spritemap1, $spritemap2[, $dimensions: true, $pad: 0])
//
// If `dimensions` is true, then width/height will also be set.
//
// if `pad` is non-zero, then that's how much padding the element will have (requires
// $spacing on the sprite maps). Great for iPhone interfaces to make hit areas bigger.
//
@mixin retina-sprite($name, $sprites, $sprites2x, $hover, $active, $dimensions: true, $pad: 0) {
@if $dimensions == true {
@include sprite-dimensions($sprites, $name);
}
background-image: sprite-url($sprites);
background-position: sprite-position($sprites, $name, -$pad, -$pad);
background-repeat: no-repeat;
@if $hover == true {
$name_hover: $name + _hover;
&:hover {
background-position: sprite-position($sprites, $name_hover, -$pad, -$pad);
}
}
@if $active == true {
$name_active: $name + _active;
&:active {
background-position: sprite-position($sprites, $name_active, -$pad, -$pad);
}
}
@if $pad > 0 {
padding: $pad;
}
@media (-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-device-pixel-ratio: 1.5) {
& {
$pos: sprite-position($sprites2x, $name, -$pad * 2, -$pad * 2);
background-image: sprite-url($sprites2x);
background-position: nth($pos, 1) nth($pos, 2) / 2;
@include background-size(ceil(image-width(sprite-path($sprites2x)) / 2), auto);
// sprite-path() returns the path of the generated sprite sheet, which
// image-width() calculates the width of. the ceil() is in place in case
// you have sprites that have an odd-number of pixels in width
@if $hover == true {
$name_hover: $name + _hover; // create myButton_hover and assign it
&:hover{
$pos: sprite-position($sprites2x, $name_hover, -$pad * 2, -$pad * 2);
background-position: nth($pos, 1) nth($pos, 2) / 2;
}
}
@if $active == true {
$name_active: $name + _active; // create myButton_active and assign it
&:active{
$pos: sprite-position($sprites2x, $name_active, -$pad * 2, -$pad * 2);
background-position: nth($pos, 1) nth($pos, 2) / 2;
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment