通过 类 和 gulp 将多个文件 css 合并为一个文件
Merge multiple files css into a one file by classes with gulp
合并 CSS 个文件
大家好,我正在做一个 React 项目,我使用 sass 来处理样式,我有几个 scss 文件,我使用 gulp
对它们进行分组,我使用 gulp-sass
生成 css 和 gulp-merge-css
来加入它们,但它们连接在一起,而不是合并。
这是一个例子
在文件中
.fooClass {
background-color: black;
}
在另一个文件中
.fooClass {
color: white;
}
这些文件应该去
.fooClass {
background-color: black;
color: white;
}
但是并没有发生,只是内容合并没有合并,结果是
.fooClass {
background-color: black;
}
.fooClass {
color: white;
}
有什么办法可以达到我的目的吗?
我的gulp-任务是:
const gulp = require('gulp');
const browserSync = require('browser-sync');
const sass = require('gulp-sass');
const postcss = require('gulp-postcss');
const autoprefixer = require('autoprefixer');
const mergeCSS = require('gulp-merge-css')
const cleanCSS = require('gulp-clean-css');
const conf = require('../conf/gulp.conf');
gulp.task('styles', styles);
function styles() {
return gulp.src(conf.path.src('**/*.scss'))
.pipe(sass.sync({outputStyle: 'compressed'})).on('error', conf.errorHandler('Sass'))
.pipe(postcss([autoprefixer()])).on('error', conf.errorHandler('Autoprefixer'))
.pipe(mergeCSS({ name: 'style.css' }))
.pipe(cleanCSS({compatibility: 'ie8', multiplePseudoMerging: true}))
.pipe(gulp.dest(conf.path.tmp()))
.pipe(browserSync.stream());
}
我不认为存在实现此目的的插件,但是 无论如何我不推荐组合 ,因为组合 CSS 规则可以改变规则。
例子
想象一下您有两个元素和两个 类 的场景。 HTML代码是:
<div class="foo">Hello</div>
<div class="foo bar">World</div>
并且串联的 CSS 看起来像这样:
.foo {
background: #000;
}
.bar {
color: #999;
}
.foo {
color: #FFF;
}
结果将是 div
的背景颜色为 #000
,文本颜色为 #FFF
,因为 .foo
的文本颜色定义在 .bar
.
之后
如果合并规则,CSS 会变成这样:
.foo {
background: #000;
color: #FFF;
}
.bar {
color: #999;
}
这改变了意思,因为两个 div
的背景颜色仍为 #000
,但第二个 div
的文本颜色现在为 #999
,因为 .bar
现在优先于 .foo
。
合并 CSS 个文件
大家好,我正在做一个 React 项目,我使用 sass 来处理样式,我有几个 scss 文件,我使用 gulp
对它们进行分组,我使用 gulp-sass
生成 css 和 gulp-merge-css
来加入它们,但它们连接在一起,而不是合并。
这是一个例子
在文件中
.fooClass {
background-color: black;
}
在另一个文件中
.fooClass {
color: white;
}
这些文件应该去
.fooClass {
background-color: black;
color: white;
}
但是并没有发生,只是内容合并没有合并,结果是
.fooClass {
background-color: black;
}
.fooClass {
color: white;
}
有什么办法可以达到我的目的吗?
我的gulp-任务是:
const gulp = require('gulp');
const browserSync = require('browser-sync');
const sass = require('gulp-sass');
const postcss = require('gulp-postcss');
const autoprefixer = require('autoprefixer');
const mergeCSS = require('gulp-merge-css')
const cleanCSS = require('gulp-clean-css');
const conf = require('../conf/gulp.conf');
gulp.task('styles', styles);
function styles() {
return gulp.src(conf.path.src('**/*.scss'))
.pipe(sass.sync({outputStyle: 'compressed'})).on('error', conf.errorHandler('Sass'))
.pipe(postcss([autoprefixer()])).on('error', conf.errorHandler('Autoprefixer'))
.pipe(mergeCSS({ name: 'style.css' }))
.pipe(cleanCSS({compatibility: 'ie8', multiplePseudoMerging: true}))
.pipe(gulp.dest(conf.path.tmp()))
.pipe(browserSync.stream());
}
我不认为存在实现此目的的插件,但是 无论如何我不推荐组合 ,因为组合 CSS 规则可以改变规则。
例子
想象一下您有两个元素和两个 类 的场景。 HTML代码是:
<div class="foo">Hello</div>
<div class="foo bar">World</div>
并且串联的 CSS 看起来像这样:
.foo {
background: #000;
}
.bar {
color: #999;
}
.foo {
color: #FFF;
}
结果将是 div
的背景颜色为 #000
,文本颜色为 #FFF
,因为 .foo
的文本颜色定义在 .bar
.
如果合并规则,CSS 会变成这样:
.foo {
background: #000;
color: #FFF;
}
.bar {
color: #999;
}
这改变了意思,因为两个 div
的背景颜色仍为 #000
,但第二个 div
的文本颜色现在为 #999
,因为 .bar
现在优先于 .foo
。