阻止cssMin删除svg样式

时间:2017-06-28 17:15:31

标签: css svg gruntjs grunt-contrib-cssmin

运行grunt.js任务时cssMin https://github.com/gruntjs/grunt-contrib-cssmin

正在移除Svg css属性。

例如:

.testClass {
   r: 4;
   width: 3px;
   margin-left: 18px !important;
}

转换为

.testClass {
   width: 3px;
   margin-left: 18px !important;
}

如何防止这种情况发生?

2 个答案:

答案 0 :(得分:2)

您应该可以通过在选项中将重组设置为false来阻止这种情况:

options: {
  restructuring: false
},

答案 1 :(得分:2)

grunt-contrib-cssmin在内部使用clean-css,如options中所述,任何原生(clean-css)选项"都会传递到清洁-CSS"

<击> 为方便起见,

clean-css将优化分组到levels。控制规则删除有两种选择,均可在第2级中找到:

restructureRules: false, // should disable all removals
skipProperties: []       // specify individual rules to skip

这应该这样做:

cssmin: {
  options: {
    skipProperties: ['r']
  }
}

<击>

从clean-css 4.2.0 a&#34;评论&#34;开始完全跳过片段的块方法将可用:

/* clean-css ignore:start */
.testClass {
   r: 4;
   width: 3px;
   margin-left: 18px !important;
}
/* clean-css ignore:end */

注意4.2尚未发布。

经过一些测试后,上述情况似乎都没有实际发挥作用,尽管根据文件他们应该#34;
我唯一的选择是将grunt-contrib-cssmin替换为grunt-postcss cssnano(这是我用grunt进行缩小的原因):

npm install grunt-postcss cssnano
grunt.initConfig({
  postcss: {
    processors: [
      require('cssnano')({
        // options here...
      })
    ]
  },
});

grunt.loadNpmTasks('grunt-postcss');
grunt.registerTask('postcss', ["postcss"]);

在实践中,我使用了更多postcss个插件 以下是autoprefixerpixrempostcss-flexboxcssnano的实际示例:

module.exports = function(grunt) {
    grunt.initConfig({
        postcss: {
            options: {
                processors: [
                    require('pixrem'),
                    require('autoprefixer')({browsers: ['> 0%']}),
                    require('postcss-flexboxfixer'),
                    require('cssnano')({
                      autoprefixer:false,
                      zindex: false
                    })
                ]
            },
            jack: {
                files: [{
                    expand:true,
                    flatten:true,
                    cwd: 'assets/',
                    src: ['scss/*.css', '!**/variables.css'],
                    dest:'assets/css/'
                }]
            }
        },
        watch: {
            styles: {
                files: [
                    'assets/scss/*.css'
                ],
                tasks:['postcss:jack']
            }
        }
    });
    grunt.loadNpmTasks('grunt-postcss');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.registerTask('default', ["watch:styles"]);
    grunt.registerTask('jack', ["postcss:jack"]);
};

我故意注册了一个只运行postcss插件的任务:

grunt jack

不要忘记您需要安装每个插件才能与postcss一起使用。对于上述情况,您需要:

npm install grunt-postcss cssnano pixrem autoprefixer postcss-flexboxfixer

...而且,很可能,您希望更改files以匹配您拥有的任何内容。

这一次,我测试了。 r属性使其成为缩小文件:

.testClass{r:20;width:3px;margin-left:18px!important}