Last active
April 29, 2016 07:56
-
-
Save hdwills/82d76d5c1b715b861143d19961c40558 to your computer and use it in GitHub Desktop.
grunt-spritesmith notes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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