Icons With SVG Sprites: Difference between revisions
No edit summary |
|||
| Line 5: | Line 5: | ||
== Creating the icons == | == Creating the icons == | ||
[[file:Illustrator-svg-artboards.png|right|frame|Artboard titles are used for the exported svg filenames and for the object ids in the final svg file.]] | |||
Save all the icons in a single Illustrator document. | Save all the icons in a single Illustrator document. | ||
| Line 15: | Line 15: | ||
== Exporting the SVG == | == Exporting the SVG == | ||
[[File:Illustrator-svg-export.png|right|frame|SVG export options in Illustrator]] | |||
* '''File''' > '''Export...''' | * '''File''' > '''Export...''' | ||
** Select a location that is inside the web project, but separated from the production files, e.g. `/images/icons/src/`. | ** Select a location that is inside the web project, but separated from the production files, e.g. `/images/icons/src/`. | ||
| Line 31: | Line 31: | ||
** '''Minify:''' checked | ** '''Minify:''' checked | ||
** '''Responsive:''' checked | ** '''Responsive:''' checked | ||
== Combining SVG files == | |||
=== Using `gulp` === | |||
Use the [https://github.com/w0rm/gulp-svgstore `gulp-svgstore` package]. Documentation on how to create a task can be found in the readme file. | |||
Install with `npm install gulp-svgstore gulp-svgmin --save-dev` | |||
<syntaxhighlight lang="javascript"> | |||
var gulp = require('gulp'); | |||
var svgstore = require('gulp-svgstore'); | |||
var svgmin = require('gulp-svgmin'); | |||
var path = require('path'); | |||
gulp.task('svgstore', function () { | |||
return gulp | |||
.src('.images/icons/src/*.svg') | |||
.pipe(svgmin(function (file) { | |||
var prefix = path.basename(file.relative, path.extname(file.relative)); | |||
return { | |||
plugins: [{ | |||
cleanupIDs: { | |||
prefix: prefix + '-', | |||
minify: true | |||
} | |||
}] | |||
} | |||
})) | |||
.pipe(svgstore()) | |||
.pipe(gulp.dest('./images/icons/')); | |||
}); | |||
</syntaxhighlight> | |||
Run `gulp svgstore` to create the production SVG file with all the icons merged into it. | |||
== Inlining SVG into HTML == | |||
Revision as of 02:47, 9 April 2016
Overview
The goal is to create a single .svg file containing all the icons that will be used on a website.
Creating the icons

Save all the icons in a single Illustrator document.
Each icon is in its own layer, and each icon is placed on its own artboard.
Ultimately the illustrator file name becomes a prefix for the icon object ids in the production svg file. So it's a good idea to keep the filename short, and to avoid spaces in the file name.
The artboard names are used in the exported SVG file names, which are in turn used as the object ids of the icons within the final production SVG. It's a good idea to avoid spaces in the artboard titles, and to keep them as short as possible.
Exporting the SVG

- File > Export...
- Select a location that is inside the web project, but separated from the production files, e.g.
/images/icons/src/. - Format: SVG (svg)
- Use Artboards: checked
- With the Use Artboards option checked, separate
.svgfiles are created for each artboard in the Illustrator file. - The icon file names are the following format:
[IllustratorFileName]_[ArtboardName].svg - Using
gulp-svgstoreto combine the SVG files, these file names are used as the object ids within the final SVG file. So spaces in artboard names are not a good idea.
- Select a location that is inside the web project, but separated from the production files, e.g.
- SVG Options dialog
- Styling: Internal CSS
- Font: SVG
- Images: Preserve (presumably there are no embedded images)
- Object IDs:' Layer Names
(This setting is important. These are the object ids that will be used to reference the individual icons in HTML.) - Decimal: 4
- Minify: checked
- Responsive: checked
Combining SVG files
Using gulp
Use the gulp-svgstore package. Documentation on how to create a task can be found in the readme file.
Install with npm install gulp-svgstore gulp-svgmin --save-dev
var gulp = require('gulp');
var svgstore = require('gulp-svgstore');
var svgmin = require('gulp-svgmin');
var path = require('path');
gulp.task('svgstore', function () {
return gulp
.src('.images/icons/src/*.svg')
.pipe(svgmin(function (file) {
var prefix = path.basename(file.relative, path.extname(file.relative));
return {
plugins: [{
cleanupIDs: {
prefix: prefix + '-',
minify: true
}
}]
}
}))
.pipe(svgstore())
.pipe(gulp.dest('./images/icons/'));
});
Run gulp svgstore to create the production SVG file with all the icons merged into it.