SASS从一个sass文件输出到多个css文件

Tom*_*mus 7 css architecture sass web-frontend web

我想从一个sass文件输出多个css文件.我有一个文件:schemes.scss,代码如下:

$schemes: (
  'light': (
    'body-background': white,
    'headline-color' : #111,
    'subheadline-color': #222
  ),
  'dark': (
    'body-background': black,
    'headline-color' : #ddd,
    'subheadline-color' : #eee
  ),
  'moderate': (
    'body-background': gray,
    'headline-color' : black,
    'subheadline-color' : #333
  )
);

@each $scheme in $schemes{
  //do something to export to separate file
  @include scheme-base-mixin($scheme);
}
Run Code Online (Sandbox Code Playgroud)

所以结果是3个单独的css文件:

scheme-light.css:

body{
    background-color: white;
}

h1{
    color: #111;
}

.subheadline{
    color: #222;
}
Run Code Online (Sandbox Code Playgroud)

scheme-dark.css:

body{
    background-color: black
}

h1{
    color: #ddd;
}

.subheadline{
    color: #eee;
}
Run Code Online (Sandbox Code Playgroud)

scheme-moderate.css:

body{
    background-color: gray
}
h1{
    color: black;
}
.subheadline{
    color: #333;
}
Run Code Online (Sandbox Code Playgroud)

纯SASS有可能吗?..或与吞咽(真的不喜欢).

在我的案例中,提取sass的常见部分并创建3个不同的sass文件不是解决方案.我有9个方案乘以数十个复杂的组件.通过类包装器附加方案也不是解决方案.

Mar*_*kus 2

在将资产编译为 css 之前运行一个纯 ruby​​(或您喜欢的任何其他语言)的简单预处理器怎么样?

# gen_schemes_scss.rb    
schemes_scss = File.read('schemes.scss')

%i(light dark moderate).each do |scheme|
  scss = "$scheme: #{scheme};\n" # save current scheme inside scss variable
  scss += schemes_scss # append the rest

  File.write("scheme-#{scheme}.scss", scss) # write to new .scss file
end
Run Code Online (Sandbox Code Playgroud)

schemes.scss

$schemes: (
  'light': (
    'body-background': white,
    'headline-color' : #111,
    'subheadline-color': #222
  ),
  'dark': (
    'body-background': black,
    'headline-color' : #ddd,
    'subheadline-color' : #eee
  ),
  'moderate': (
    'body-background': gray,
    'headline-color' : black,
    'subheadline-color' : #333
  )
);

@include scheme-base-mixin($scheme);
Run Code Online (Sandbox Code Playgroud)

这个想法是通过这个预处理器生成不同的scss文件。您将拥有可编译的 等文件scheme-light.scssscheme-dark.scss

我认为纯 sass 解决方案是不可能的 atm。