You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.3 KiB

4 years ago
  1. # [postcss][postcss]-svgo
  2. > Optimise inline SVG with PostCSS.
  3. ## Install
  4. With [npm](https://npmjs.org/package/postcss-svgo) do:
  5. ```
  6. npm install postcss-svgo --save
  7. ```
  8. ## Example
  9. ### Input
  10. ```css
  11. h1 {
  12. background: url('data:image/svg+xml;charset=utf-8,<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"><circle cx="50" cy="50" r="40" fill="yellow" /></svg>');
  13. }
  14. h2 {
  15. background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIGZpbGw9InllbGxvdyIgLz48IS0tdGVzdCBjb21tZW50LS0+PC9zdmc+');
  16. }
  17. ```
  18. ### Output
  19. ```css
  20. h1 {
  21. background: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="40" fill="%23ff0"/></svg>');
  22. }
  23. h2 {
  24. background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQwIiBmaWxsPSIjZmYwIi8+PC9zdmc+');
  25. }
  26. ```
  27. ## API
  28. ### `svgo([options])`
  29. Note that postcss-svgo is an *asynchronous* processor. It cannot be used
  30. like this:
  31. ```js
  32. var result = postcss([ svgo() ]).process(css).css;
  33. console.log(result);
  34. ```
  35. Instead make sure your PostCSS runner uses the asynchronous API:
  36. ```js
  37. postcss([ svgo() ]).process(css).then(function (result) {
  38. console.log(result.css);
  39. });
  40. ```
  41. #### options
  42. ##### encode
  43. Type: `boolean`
  44. Default: `undefined`
  45. If `true`, it will encode URL-unsafe characters such as `<`, `>` and `&`;
  46. `false` will decode these characters, and `undefined` will neither encode nor
  47. decode the original input. Note that regardless of this setting, `#` will
  48. always be URL-encoded.
  49. ##### plugins
  50. Optionally, you can customise the output by specifying the `plugins` option. You
  51. will need to provide the config in comma separated objects, like the example
  52. below. Note that you can either disable the plugin by setting it to `false`,
  53. or pass different options to change the default behaviour.
  54. ```js
  55. var postcss = require('postcss');
  56. var svgo = require('postcss-svgo');
  57. var opts = {
  58. plugins: [{
  59. removeDoctype: false
  60. }, {
  61. removeComments: false
  62. }, {
  63. cleanupNumericValues: {
  64. floatPrecision: 2
  65. }
  66. }, {
  67. convertColors: {
  68. names2hex: false,
  69. rgb2hex: false
  70. }
  71. }]
  72. };
  73. postcss([ svgo(opts) ]).process(css).then(function (result) {
  74. console.log(result.css)
  75. });
  76. ```
  77. You can view the [full list of plugins here][plugins].
  78. ## Usage
  79. See the [PostCSS documentation](https://github.com/postcss/postcss#usage) for
  80. examples for your environment.
  81. ## Contributors
  82. See [CONTRIBUTORS.md](https://github.com/cssnano/cssnano/blob/master/CONTRIBUTORS.md).
  83. ## License
  84. MIT © [Ben Briggs](http://beneb.info)
  85. [postcss]: https://github.com/postcss/postcss
  86. [plugins]: https://github.com/svg/svgo/tree/master/plugins