0

我对 scss 上的 @extend 有一个奇怪的问题。当我扩展一些具有重复属性的 %placeholder 时,gulp-clean-css 会合并它们,我不希望这种情况发生。

这是一个例子: foo.scss

%one {
    font-size: 16px;
    width: 95%;
}

%two {
    font-size: 1rem;
    width: calc(100% - 10px);
}


.foo {
    @extend %one;
    @extend %two;
}


.foo2 {
    font-size: 16px;
    font-size: 1rem;
}

foo.min.css

.foo{font-size:1rem;width:calc(100% - 10px);}
.foo2{font-size:16px;font-size:1rem}

为什么会这样?

如果有帮助,这是我的 gulp 任务:

gulp.task('scss', function(){
    console.log('start task scss');
    gulp.src(folderStyles)
        .pipe(sass.sync().on('error', sass.logError))
        .pipe(rename({ suffix: '.min' }))
        .pipe(cleanCSS({compatibility: 'ie9', noAdvanced: true}))
        .pipe(gulp.dest(folderStyles));
    logEnv();
});

有没有其他更好的插件可以使用?我不希望它删除重复的属性。如果你问我为什么,那是因为旧浏览器支持而不是可能不支持remor calc,或其他“新奇属性”;)

谢谢 :)

4

1 回答 1

1

我玩过这个,我认为你的设置对于“noAdvanced”是不正确的:

代替:

.pipe(cleanCSS({compatibility: 'ie9', noAdvanced: true}))

采用:

.pipe(cleanCSS({compatibility: 'ie9', advanced: false}))

根据文档:

高级- 设置为 false 以禁用高级优化 - 选择器和属性合并、缩减等。

https://github.com/jakubpawlowicz/clean-css#how-to-use-clean-css-api

这不会给你留下 1 个带有两个字体大小声明的 .foo 选择器,只是不会合并这两个,所以你最终会得到:

.foo {
    font-size:16px;
    width:95%
}
.foo {
    font-size:1rem;
    width:calc(100% - 10px)
}
.foo2{
    font-size:16px;
    font-size:1rem
}

这回答了你的问题,但是有点违背了使用 clean-css 之类的目的。我很好奇为什么当第一个将被覆盖时,你为什么要在你的 CSS 中保留两个字体大小声明。

于 2016-09-15T13:01:33.093 回答