Spriteful
Spriteful is a command line sprite generator tool, meant to be used regardless of your programming language, application stack or Web framework.
Usage
Lets say that you have your images in images/icons/ and you want to generate a sprite for them.
spriteful images/icons
# create icons.png
# create icons.cssBoom! Spriteful will generate a icons.png in your working directory and the respective CSS
for your sprite in the icons.css file.
If you want a bit more of control on where we should place the combined image and the CSS, you
can use the s (for stylesheets) and d ( for destination) flags and Spriteful will place
your icons.png and icons.css in the desired directories.
spriteful images/icons -s stylesheets -d images
# create images/icons.png
# create stylesheets/icons.cssThe CSS
By default, Spriteful will generate a set of CSS classes based on the images of your sprite. In the
case of having a new.png image in our icons sprite, you can use it putting together the icons
and new class.
<a href='/new' class='icons new'>New thing</a>SCSS support
Spriteful can generate SCSS code with the -f flag. This way the generated code will use
Placeholder Selectors
instead of generating a class for each image in your sprite.
spriteful images/icons -f scss
# create icons.png
# copy icons.scss// in your SCSS code...
.button {
@extend %icons-sprite-new;
}You can also choose to generate the code using Mixin Directives.
spriteful images/icons -f scss --mixin
# create icons.png
# copy icons.scss// in your SCSS code...
.button {
@include icons-sprite-new;
}When using SCSS, the generated stylesheet will have a variable with a list of all images inside the generated sprite, so you can hack own your own on top of that.
@each $image in $icons-sprite-names {
.my-class-for-#{$image} {
@extend %icons-sprite-#{$image};
}
}Multiple sprites
You can deal with multiple sprites in a single run. If images/icons has a set of images for one
sprite and images/flags another set you can generate both icons.png and flags.png with a single
execution.
spriteful images/icons images/flags -s stylesheets -d images
# create images/icons.png
# create stylesheets/icons.css
# create images/flags.png
# create stylesheets/flags.cssSpriteful and Rails
If you are working on a Ruby on Rails application Spriteful can provide some extra goodies for
you. If you run the spriteful command with the --rails flag, all sprites under app/assets/sprites
will be generated with respective stylesheets at app/assets/sprites, using the proper image_url
helper for the format of your choice.
So, given that you have the icons and flags directories with your images under app/assets/sprites,
you might get a similar output when generating these two sprites.
spriteful --rails
# create app/assets/sprites/flags.png
# create app/assets/sprites/flags.css.erb
# create app/assets/sprites/icons.png
# create app/assets/sprites/icons.css.erbNaming conventions
Stylesheets and combined images will always follow the name of their source directories -
images under icons will generate the icons.png and icons.css files. This convention
enforces previsibility over generated files and helps when regenating existing sprites whenever
you need to add a new source to an existing sprite.
Custom templates
If you need further customization of the sprite CSS, you can use a custom ERB template to be used instead of the builtin templates.
spriteful image/icons --template custom_template.erbIn this case, the custom_template.erb file will be evaluated in the context of a
Spriteful::Template instance. Please check this class documentation and source
to see all the available attributes and helpers.
You can copy one of the builtin templates to your working directory with the template
subcommand.
spriteful template
# create spriteful.cssSVG Support
Spriteful has a basic support for dealing with SVG images (and not only PNGs). SVG images
will be combined along the rest of your images and will be embedded directly on the final
Stylesheet in the data URI format. Using the svg root class (based on Modernizr), the
data URI will be used for browsers that support SVG images and the composed PNG will work
as a fallback for legacy browsers.
We recommend that you install librsvg to improve ImageMagick support for SVG images.
.images.update-icon {
background-position: 0px -10px;
}
.svg .images.update-icon {
background-image: url('data:image/svg+xml;utf8, SVG XML goes here :)');
background-position: 0 0;
}Future versions of Spriteful could have support for generating composed images as SVG files (and not only PNG), so feel free to send a contribution improving the feature.
Image Optimization
Spriteful supports PNG optimization through the image_optim
gem. You should have one of the following utilities present on your system: pngcrush, pngout,
optipng, advpng or pngquant. If none can be found, the optimization will be skipped.
If you are using SVG images, the embedded SVG as data URI will be optimized with the svg_optimizer gem.
Available options
-
--stylesheets(-s) - Directory to save the generated stylesheet(s), instead of copying them to the clipboard. -
--destination(-d) - Directory to save the generated image(s). -
--name(-n) - Name of generated sprite. -
--rails(-r) - Forces rails specific settings, see Spriteful and Rails for more info. -
--format(-f) - Format to generate the sprite(s) stylesheet(s). Either "css" or "scss". -
--template(-t) - The path for a custom Stylesheet template. -
--mixin- Choose to use the Mixin Directives instead of Placeholder Selector. -
--horizontal- Changes the sprite orientation to horizontal, since all sprites are combined vertically by default. -
--save- Saves the provided arguments for later use. -
--spacing- Add some spacing between the images in the sprite. -
--no-optimize- Skip optimizing SVG images.
You can add a .spritefulrc file with default options to your home directory or the current one that they will
be picked up whenever you run the spriteful command.
Examples
This repository contains an examples folder with some very simple sprites and the output generated
by Spriteful. Feel free to take a look or try it on your own by cloning this repository and running
spriteful on it.