What is clean-css?
Clean-css is a fast and efficient Node.js library for minifying CSS files.
According to tests it is one of the best available.
Usage
What are the requirements?
Node.js 0.8.0+ (tested on CentOS, Ubuntu, OS X 10.6+, and Windows 7+)
How to install clean-css?
npm install clean-css
How to upgrade clean-css from 1.x to 2.x?
Command-line interface (CLI)
npm update clean-css
or point package.json
to version 2.x. That's it!
Node.js module
Update clean-css
as for CLI above.
Then change your JavaScript code from:
var minimized = CleanCSS;
into
var minimized = options;
And you are done.
How to use clean-css CLI?
Clean-css accepts the following command line arguments (please make sure
you use <source-file>
as the very last argument to avoid potential issues):
cleancss [options] <source-file>
-h, --help Output usage information
-v, --version Output the version number
-b, --keep-line-breaks Keep line breaks
--s0 Remove all special comments, i.e. /*! comment */
--s1 Remove all special comments but the first one
-r, --root [root-path] A root path to which resolve absolute @import rules
and rebase relative URLs
-o, --output [output-file] Use [output-file] as output instead of STDOUT
-s, --skip-import Disable @import processing
--skip-rebase Disable URLs rebasing
--skip-advanced Disable advanced optimizations - selector & property merging,
reduction, etc.
--selectors-merge-mode [ie8|*] DEPRECATED: Use --compatibility switch
-c, --compatibility [ie7|ie8] Force compatibility mode
-d, --debug Shows debug information (minification time & compression efficiency)
Examples:
To minify a public.css file into public-min.css do:
cleancss -o public-min.css public.css
To minify the same public.css into the standard output skip the -o
parameter:
cleancss public.css
More likely you would like to concatenate a couple of files. If you are on a Unix-like system:
cat one.css two.css three.css | cleancss -o merged-and-minified.css
On Windows:
type one.css two.css three.css | cleancss -o merged-and-minified.css
Or even gzip the result at once:
cat one.css two.css three.css | cleancss | gzip -9 -c > merged-minified-and-gzipped.css.gz
How to use clean-css programmatically?
var CleanCSS = ;var source = 'a{font-weight:bold;}';var minimized = ;
CleanCSS constructor accepts a hash as a parameter, i.e.,
new CleanCSS(options).minify(source)
with the following options available:
keepSpecialComments
-*
for keeping all (default),1
for keeping first one only,0
for removing allkeepBreaks
- whether to keep line breaks (default is false)benchmark
- turns on benchmarking mode measuring time spent on cleaning up (runnpm run bench
to see example)root
- path to resolve absolute@import
rules and rebase relative URLsrelativeTo
- path with which to resolve relative@import
rules and URLsprocessImport
- whether to process@import
rulesnoRebase
- whether to skip URLs rebasingnoAdvanced
- set to true to disable advanced optimizations - selector & property merging, reduction, etc.selectorsMergeMode
-ie8
for IE8 compatibility mode,*
for merging all (default)debug
- set to true to get minification statistics understats
property (seetest/custom-test.js
for examples)
Grunt?
How to use clean-css withSee grunt-contrib-cssmin plugin.
What are the clean-css' dev commands?
First clone the source, then run:
npm run bench
for clean-css benchmarks (see test/bench.js for details)npm run check
to check JS sources with JSHintnpm test
for the test suite
How to contribute to clean-css?
- Fork it.
- Add test(s) veryfying the problem.
- Fix the problem.
- Make sure all tests still pass (
npm test
). - Make sure your code doesn't break style rules (
npm run check
). - Send a PR.
If you wonder where to add tests, go for:
test/unit-test.js
if it's a simple scenariotest/data/...
if it's a complex scenario (just add two files, input and expected output)test/binary-test.js
if it's related tobin/cleancss
binarytest/module-test.js
if it's related to importingclean-css
as a moduletest/protocol-imports-test.js
if it fixes anything related to protocol@import
s
Tips & Tricks
How to preserve a comment block?
Use the /*!
notation instead of the standard one /*
:
/*! Important comments included in minified output.*/
How to rebase relative image URLs
Clean-css will handle it automatically for you (since version 1.1) in the following cases:
- When using the CLI:
- Use an output path via
-o
/--output
to rebase URLs as relative to the output file. - Use a root path via
-r
/--root
to rebase URLs as absolute from the given root path. - If you specify both then
-r
/--root
takes precendence.
- Use an output path via
- When using clean-css as a library:
- Use a combination of
relativeTo
andtarget
options for relative rebase (same as 1 in CLI). - Use a combination of
relativeTo
androot
options for absolute rebase (same as 2 in CLI). root
takes precendence overtarget
as in CLI.
- Use a combination of
Acknowledgments
- Vincent Voyer (@vvo) for a patch with better empty element regex and for inspiring us to do many performance improvements in 0.4 release.
- Isaac (@facelessuser) for pointing out a flaw in clean-css' stateless mode.
- Jan Michael Alonzo (@jmalonzo) for a patch
removing node.js' old
sys
package. - @XhmikosR for suggesting new features (option to remove special comments and strip out URLs quotation) and pointing out numerous improvements (JSHint, media queries).
- Anthony Barre (@abarre) for improvements to
@import
processing, namely introducing the--skip-import
/processImport
options. - Simon Altschuler (@altschuler) for fixing
@import
processing inside comments.
License
Clean-css is released under the MIT License.