postcss-svg Show on GitHub
PostCSS plug-in which to insert a inline SVG to CSS and allows you to manage it colors. Examples here.
Features:- Easy insert inline SVG to CSS
- Manage colors of your SVG image without editinig it
- Symbols sprites support
- Compression with svgo
- Support Evil Icons from box
Installation
npm install postcss-svg --save-dev
Usage
PostCSS:
//...
var postcss = require('postcss');
var postcssSVG = require('postcss-svg');
var processors = [
//... ,
postcssSVG({
paths: ['pathToSVGDir1', 'pathToSVGDir2'],
defaults: "[fill]: #000000",
//more options...
});
];
postcss(processors)
.process(css, { from: './src/app.css', to: './dist/app.css' })
.then(function (result) {
fs.writeFileSync('./dist/app.css', result.css);
});
Gulp:
var gulp = require('gulp');
var postcss = require('gulp-postcss');
gulp.task('styles', function() {
var postcssProcessors;
postcssSVG = require.reload('postcss-svg');
postcssProcessors = [
postcssSVG({ defaults: '[fill]: green' })
];
gulp.src('app/style.css')
.pipe(postcss(postcssProcessors))
.pipe(gulp.dest('.tmp'));
});
Using this input.css
:
body {
background-image: svg("ei#sc-github", "[fill]: black");
}
you will get:
body {
background-image: url("data:image/svg+xml,%3Csvg%20id%3D%22ei-sc-github-icon%22%20viewBox%3D%220%200%2050%2050%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20style%3D%22fill%3Ablack%3B%22%20height%3D%22100%25%22%20width%3D%22100%25%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M25%2010c-8.3%200-15%206.7-15%2015%200%206.6%204.3%2012.2%2010.3%2014.2.8.1%201-.3%201-.7v-2.6c-4.2.9-5.1-2-5.1-2-.7-1.7-1.7-2.2-1.7-2.2-1.4-.9.1-.9.1-.9%201.5.1%202.3%201.5%202.3%201.5%201.3%202.3%203.5%201.6%204.4%201.2.1-1%20.5-1.6%201-2-3.3-.4-6.8-1.7-6.8-7.4%200-1.6.6-3%201.5-4-.2-.4-.7-1.9.1-4%200%200%201.3-.4%204.1%201.5%201.2-.3%202.5-.5%203.8-.5%201.3%200%202.6.2%203.8.5%202.9-1.9%204.1-1.5%204.1-1.5.8%202.1.3%203.6.1%204%201%201%201.5%202.4%201.5%204%200%205.8-3.5%207-6.8%207.4.5.5%201%201.4%201%202.8v4.1c0%20.4.3.9%201%20.7%206-2%2010.2-7.6%2010.2-14.2C40%2016.7%2033.3%2010%2025%2010z%22%2F%3E%3C%2Fsvg%3E");
}
Colors API
You can replace only existing values of fill
and stroke
attributes.
To replace colors you can use simple selectors.
You can use several selectors for one SVG.
In the bottom you can see this selectors in ascending order.
For better understanding of selectors check examples.
Selectors:
- [color]
- All
fill
andstroke
attributes - [fill]|[stroke]
- All
fill
orstroke
attributes - tagName[fill]|tagName[stroke]
fill
orstroke
tag attributes with name tagName- .className[fill]|.className[stroke]
fill
orstroke
tag attributes with class className- colorGroupN
- All colors in SVG are grouped in color groups. N - group index, starts from 0 (from the top of SVG document)
- #identifier[fill]|#identifier[stroke]
fill
orstroke
tag attributes with id identifier- colorN
- All colors in SVG have index. N - index, starts from 0 (from the top of SVG document)
Examples
Sourceloupe.svg
:
<svg viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg">
<path id="handle" d="M12 12L8 8" stroke="#000000" stroke-linecap="round" stroke-width="2"/>
<circle id="rim" class="glass" cx="5" cy="5" fill="none" r="4" stroke-width="2" stroke="#000000"/>
</svg>
.simple-inline:before {
background-image: svg("loupe");
}
.color:before {
background-image: svg("loupe", "[color]: red");
}
.fill-stroke:before {
background-image: svg("loupe", "[fill]: rgba(105, 200, 250, .2); [stroke]: brown");
}
.tag-name:before {
background-image: svg("loupe", "circle[fill]: rgba(105, 200, 250, .2); circle[stroke]: gray; path[stroke]: brown;");
}
.class-name:before {
background-image: svg("loupe", ".glass[fill]: rgba(105, 200, 250, .2);");
}
.color-group:before {
background-image: svg("loupe", "colorGroup0: red; colorGroup1: blue;");
}
.identifier:before {
background-image: svg("loupe", "#rim[fill]: rgba(105, 200, 250, .2); #rim[stroke]: gray; #handle[stroke]: brown;");
}
.color-index:before {
background-image: svg("loupe", "color0: rgba(105, 200, 250, .2); color1: gray; color2: brown;");
}
Contributing
Pull requests are welcome.
To run development envirement:
git clone git@github.com:Pavliko/postcss-svg.git
cd postcss-svg
npm install
gulp watch