grunt-spritesmith notes
/* | |
SCSS variables are information about icon's compiled state, stored under its original file name | |
.icon-home { | |
width: $icon-home-width; | |
} | |
The large array-like variables contain all information about a single icon | |
$icon-home: x y offset_x offset_y width height total_width total_height image_path; | |
At the bottom of this section, we provide information about the spritesheet itself | |
$spritesheet: width height image $spritesheet-sprites; | |
*/ | |
i[class*="-ipad-"] { | |
background-image: url(../images/sprites.png); | |
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { | |
background-image: url(../images/sprites-2x.png); | |
} | |
} | |
$icons-ipad-rightnav-diagnose-name: 'icons-ipad-rightnav-diagnose'; | |
$icons-ipad-rightnav-diagnose-x: 0px; | |
$icons-ipad-rightnav-diagnose-y: 0px; | |
$icons-ipad-rightnav-diagnose-offset-x: 0px; | |
$icons-ipad-rightnav-diagnose-offset-y: 0px; | |
$icons-ipad-rightnav-diagnose-width: 24px; | |
$icons-ipad-rightnav-diagnose-height: 24px; | |
$icons-ipad-rightnav-diagnose-total-width: 48px; | |
$icons-ipad-rightnav-diagnose-total-height: 48px; | |
$icons-ipad-rightnav-diagnose: (0px, 0px, 0px, 0px, 24px, 24px, 48px, 48px, 'icons-ipad-rightnav-diagnose', ); | |
$icons-ipad-rightnav-fav-name: 'icons-ipad-rightnav-fav'; | |
$icons-ipad-rightnav-fav-x: 24px; | |
$icons-ipad-rightnav-fav-y: 0px; | |
$icons-ipad-rightnav-fav-offset-x: -24px; | |
$icons-ipad-rightnav-fav-offset-y: 0px; | |
$icons-ipad-rightnav-fav-width: 24px; | |
$icons-ipad-rightnav-fav-height: 24px; | |
$icons-ipad-rightnav-fav-total-width: 48px; | |
$icons-ipad-rightnav-fav-total-height: 48px; | |
$icons-ipad-rightnav-fav: (24px, 0px, -24px, 0px, 24px, 24px, 48px, 48px, 'icons-ipad-rightnav-fav', ); | |
$icons-ipad-rightnav-line-name: 'icons-ipad-rightnav-line'; | |
$icons-ipad-rightnav-line-x: 0px; | |
$icons-ipad-rightnav-line-y: 24px; | |
$icons-ipad-rightnav-line-offset-x: 0px; | |
$icons-ipad-rightnav-line-offset-y: -24px; | |
$icons-ipad-rightnav-line-width: 24px; | |
$icons-ipad-rightnav-line-height: 24px; | |
$icons-ipad-rightnav-line-total-width: 48px; | |
$icons-ipad-rightnav-line-total-height: 48px; | |
$icons-ipad-rightnav-line: (0px, 24px, 0px, -24px, 24px, 24px, 48px, 48px, 'icons-ipad-rightnav-line', ); | |
$icons-ipad-rightnav-diagnose-2x-name: 'icons-ipad-rightnav-diagnose@2x'; | |
$icons-ipad-rightnav-diagnose-2x-x: 0px; | |
$icons-ipad-rightnav-diagnose-2x-y: 0px; | |
$icons-ipad-rightnav-diagnose-2x-offset-x: 0px; | |
$icons-ipad-rightnav-diagnose-2x-offset-y: 0px; | |
$icons-ipad-rightnav-diagnose-2x-width: 48px; | |
$icons-ipad-rightnav-diagnose-2x-height: 48px; | |
$icons-ipad-rightnav-diagnose-2x-total-width: 96px; | |
$icons-ipad-rightnav-diagnose-2x-total-height: 96px; | |
$icons-ipad-rightnav-diagnose-2x: (0px, 0px, 0px, 0px, 48px, 48px, 96px, 96px, 'icons-ipad-rightnav-diagnose@2x', ); | |
$icons-ipad-rightnav-fav-2x-name: 'icons-ipad-rightnav-fav@2x'; | |
$icons-ipad-rightnav-fav-2x-x: 48px; | |
$icons-ipad-rightnav-fav-2x-y: 0px; | |
$icons-ipad-rightnav-fav-2x-offset-x: -48px; | |
$icons-ipad-rightnav-fav-2x-offset-y: 0px; | |
$icons-ipad-rightnav-fav-2x-width: 48px; | |
$icons-ipad-rightnav-fav-2x-height: 48px; | |
$icons-ipad-rightnav-fav-2x-total-width: 96px; | |
$icons-ipad-rightnav-fav-2x-total-height: 96px; | |
$icons-ipad-rightnav-fav-2x: (48px, 0px, -48px, 0px, 48px, 48px, 96px, 96px, 'icons-ipad-rightnav-fav@2x', ); | |
$icons-ipad-rightnav-line-2x-name: 'icons-ipad-rightnav-line@2x'; | |
$icons-ipad-rightnav-line-2x-x: 0px; | |
$icons-ipad-rightnav-line-2x-y: 48px; | |
$icons-ipad-rightnav-line-2x-offset-x: 0px; | |
$icons-ipad-rightnav-line-2x-offset-y: -48px; | |
$icons-ipad-rightnav-line-2x-width: 48px; | |
$icons-ipad-rightnav-line-2x-height: 48px; | |
$icons-ipad-rightnav-line-2x-total-width: 96px; | |
$icons-ipad-rightnav-line-2x-total-height: 96px; | |
$icons-ipad-rightnav-line-2x: (0px, 48px, 0px, -48px, 48px, 48px, 96px, 96px, 'icons-ipad-rightnav-line@2x', ); | |
$spritesheet-width: 48px; | |
$spritesheet-height: 48px; | |
$spritesheet-sprites: ($icons-ipad-rightnav-diagnose, $icons-ipad-rightnav-fav, $icons-ipad-rightnav-line, ); | |
$spritesheet: (48px, 48px, $spritesheet-sprites, ); | |
$retina-spritesheet-width: 96px; | |
$retina-spritesheet-height: 96px; | |
$retina-spritesheet-sprites: ($icons-ipad-rightnav-diagnose-2x, $icons-ipad-rightnav-fav-2x, $icons-ipad-rightnav-line-2x, ); | |
$retina-spritesheet: (96px, 96px, $retina-spritesheet-sprites, ); | |
/* | |
These "retina group" variables are mappings for the naming and pairing of normal and retina sprites. | |
The list formatted variables are intended for mixins like `retina-sprite` and `retina-sprites`. | |
*/ | |
$icons-ipad-rightnav-diagnose-group-name: 'icons-ipad-rightnav-diagnose'; | |
$icons-ipad-rightnav-diagnose-group: ('icons-ipad-rightnav-diagnose', $icons-ipad-rightnav-diagnose, $icons-ipad-rightnav-diagnose-2x, ); | |
$icons-ipad-rightnav-fav-group-name: 'icons-ipad-rightnav-fav'; | |
$icons-ipad-rightnav-fav-group: ('icons-ipad-rightnav-fav', $icons-ipad-rightnav-fav, $icons-ipad-rightnav-fav-2x, ); | |
$icons-ipad-rightnav-line-group-name: 'icons-ipad-rightnav-line'; | |
$icons-ipad-rightnav-line-group: ('icons-ipad-rightnav-line', $icons-ipad-rightnav-line, $icons-ipad-rightnav-line-2x, ); | |
$retina-groups: ($icons-ipad-rightnav-diagnose-group, $icons-ipad-rightnav-fav-group, $icons-ipad-rightnav-line-group, ); | |
/* | |
The provided mixins are intended to be used with the array-like variables | |
.icon-home { | |
@include sprite-width($icon-home); | |
} | |
.icon-email { | |
@include sprite($icon-email); | |
} | |
Example usage in HTML: | |
`display: block` sprite: | |
<div class="icon-home"></div> | |
To change `display` (e.g. `display: inline-block;`), we suggest using a common CSS class: | |
// CSS | |
.icon { | |
display: inline-block; | |
} | |
// HTML | |
<i class="icon icon-home"></i> | |
*/ | |
@mixin sprite-width($sprite) { | |
width: nth($sprite, 5); | |
} | |
@mixin sprite-height($sprite) { | |
height: nth($sprite, 6); | |
} | |
@mixin sprite-position($sprite) { | |
$sprite-offset-x: nth($sprite, 3); | |
$sprite-offset-y: nth($sprite, 4); | |
background-position: $sprite-offset-x $sprite-offset-y; | |
} | |
@mixin sprite-image($sprite) { | |
$sprite-image: nth($sprite, 9); | |
background-image: url(#{$sprite-image}); | |
} | |
@mixin sprite($sprite) { | |
@include sprite-position($sprite); | |
@include sprite-width($sprite); | |
@include sprite-height($sprite); | |
} | |
/* | |
The `retina-sprite` mixin sets up rules and a media query for a sprite/retina sprite. | |
It should be used with a "retina group" variable. | |
The media query is from CSS Tricks: https://css-tricks.com/snippets/css/retina-display-media-query/ | |
$icon-home-group: ('icon-home', $icon-home, $icon-home-2x, ); | |
.icon-home { | |
@include retina-sprite($icon-home-group); | |
} | |
*/ | |
@mixin sprite-background-size($sprite) { | |
$sprite-total-width: nth($sprite, 7); | |
$sprite-total-height: nth($sprite, 8); | |
background-size: $sprite-total-width $sprite-total-height; | |
} | |
@mixin retina-sprite($retina-group) { | |
$normal-sprite: nth($retina-group, 2); | |
$retina-sprite: nth($retina-group, 3); | |
@include sprite($normal-sprite); | |
@media (-webkit-min-device-pixel-ratio: 2), | |
(min-resolution: 192dpi) { | |
@include sprite-background-size($normal-sprite); | |
} | |
} | |
/* | |
The `sprites` mixin generates identical output to the CSS template | |
but can be overridden inside of SCSS | |
@include sprites($spritesheet-sprites); | |
*/ | |
@mixin sprites($sprites) { | |
@each $sprite in $sprites { | |
$sprite-name: nth($sprite, 10); | |
.#{$sprite-name} { | |
@include sprite($sprite); | |
} | |
} | |
} | |
/* | |
The `retina-sprites` mixin generates a CSS rule and media query for retina groups | |
This yields the same output as CSS retina template but can be overridden in SCSS | |
@include retina-sprites($retina-groups); | |
*/ | |
@mixin retina-sprites($retina-groups) { | |
@each $retina-group in $retina-groups { | |
$sprite-name: nth($retina-group, 1); | |
.#{$sprite-name} { | |
@include retina-sprite($retina-group); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment