postcss-base64, a PostCSS plugin, replaces urls or values inside url()
functions with their base64 encoded strings.
GitHub | NPM | @jelmerdemaat
Install
Install it from NPM:
npm install postcss-base64
Use
Load this plugin as a PostCSS module and give either or both of these options:
extensions
An array of extensions of files that have to be encoded, including the leading dot.
Example: ['.svg']
pattern
A valid regex pattern to match against the string inside url()
definitions to encode. Can not match file urls (use extensions
for this).
Example: /<svg.*<\/svg>/i
NodeJS
Using PostCSS in NodeJS, the approach would be as follows:
var opts = {
extensions: ['.png', '.svg'],
pattern: /<svg.*<\/svg>/i
};
output = postcss().use(base64(opts)).process(src).css;
Gulp
Using a build system like Gulp the approach would be as follows:
var gulp = require('gulp'),
postcss = require('gulp-postcss'),
base64 = require('postcss-base64');
gulp.task('css', function () {
gulp.src('test.css')
.pipe(postcss([
base64({
files: ['.svg']
})
]))
.pipe(gulp.dest('output/'));
});
More info
Only strings inside url(...)
functions are replaced.
Partially replacing strings with the pattern
option is possible. If the input CSS is:
.selector {
background-image: url('data:image/svg+xml;base64,<svg>...</svg>');
}
And your options are:
var opts = {
pattern: /<svg.*<\/svg>/i
}
The output will be:
.selector {
background-image: url('data:image/svg+xml;base64,PHN2ZyB4...');
}