Генерация svg спрайтов при помощи Gulp
В данной статье мне хотелось бы рассказать вам, об автоматизации создания css спрайтов при помощи сборщика Gulp. Речь пойдет не о привычных нам png\jpg картинках, а о векторных svg. Я думаю о преимуществе вектора над растром рассказывать не стоит.
И так что нам для этого понадобиться.
- Установленный на локальной машине пакетный менеджер NPM (Node js).
- Сборщик Gulp.
- Расширение для гулпа — gulp-svg-sprites (https://www.npmjs.com/package/gulp-svg-sprites)
Поехали:
Переходим в рабочую директорию нашего проекта и запускаем консоль. При условии что npm у нас уже установлен.
Создаем package.json — командой npm init. Все параметры можно оставить по умолчанию.
Примерно так он будет выглядеть:
{ "name": "gulp.local", "version": "1.0.0", "description": "", "main": "index.js", "dependencies": {}, "devDependencies": { "gulp": "^3.9.1", "gulp-svg-sprites": "^4.0.2" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
Устанавливаем локальный Gulp и сохраняем его в dev зависимости:
npm install --save-dev gulp
Устанавливаем расширение для работы с svg спрайтами:
npm install --save-dev gulp-svg-sprites
Создаем конфигурационный файл гулпа (gulpfile.js) и заполняем его.
Сверху подключаем гулп и расширение.
const gulp = require('gulp'); const svgSprite = require("gulp-svg-sprites");
Далее пишем задачку для генерации.
gulp.task('svg', function () { return gulp.src('svg/*.svg') .pipe(svgSprite({ selector: "i-sp-%f", svg: { sprite: "svg.svg" }, svgPath: "%f", cssFile: "svg_sprite.css", common: "ic" } )) .pipe(gulp.dest("media")); });
Расшифровка:
- return gulp.src(‘svg/*.svg’) — тут путь для svg картинок
- selector: «i-sp-%f», — этот параметр отвечает за префикс классов при генерации стилей (.i-sp-название-файла)
- svg: { sprite: «svg.svg» }, — название спрайта
- svgPath: «%f», — путь к файлу спрайтов
- cssFile: «svg_sprite.css», — генерируемый css файл
- common: «ic» — по умолчанию родительский класс всех иконок будет icon, так вот параметр common меняет его на произвольный.
- .pipe(gulp.dest(«media»)); — папка для сохранения всех исходных файлов
Весь файл целиком:
'use_strict'; const gulp = require('gulp'); const svgSprite = require("gulp-svg-sprites"); gulp.task('svg', function () { return gulp.src('svg/*.svg') .pipe(svgSprite({ selector: "i-sp-%f", svg: { sprite: "svg.svg" }, svgPath: "%f", cssFile: "svg_sprite.css", common: "ic" } )) .pipe(gulp.dest("media")); });
Если все сделали правильно, пишем в консоле gulp svg и наблюдаем за генерацией наших файлов. На выходе получаем наш спрайт который вмещает в себя все наши иконки. И css файл стилей с готовыми классами и размерами.
Также по умолчанию создается html превью файл со всеми иконками и подсказками как ими пользоваться.