是否可以使用css预处理器有条件地生成css?

是否可以使用css预处理器有条件地生成css?,css,sass,less,modernizr,Css,Sass,Less,Modernizr,当我使用Modernizer时,它会在我的html标记中添加rgba或no-rgba类。我正在尝试使用LESS生成mixin。例如: .background-content{ background: #000; background: rgba(0,0,0,0.5); } header{ .background-content; } 现在,我想做的是,如果rgba存在,那么: .background-content{ background: rgba(0,0,0,0.5);

当我使用Modernizer时,它会在我的
html
标记中添加
rgba
no-rgba
类。我正在尝试使用
LESS
生成mixin。例如:

.background-content{
  background: #000;
  background: rgba(0,0,0,0.5);
}

header{
  .background-content;
}
现在,我想做的是,如果
rgba
存在,那么:

.background-content{
  background: rgba(0,0,0,0.5);
}
但是如果
不存在rgba
,那么我希望它是这样的:

.background-content{
  background: #000;
}

我的问题是,是否可以使用条件生成mixin?当我做
时,背景内容
标题中
是否可能,它会根据存在的类给出不同的背景颜色?如果
LESS
做不到,那么
SASS
能做吗?

预处理器不可能知道有关HTML的任何信息,也不可能知道浏览器如何读取HTML。但是,如果我理解正确,您可以通过Sass获得所需(以及更多):

@mixin background-content {
  background: rgba(0,0,0,0.5);
  .no-rgba & { background: #000; }
}

header {
  @include background-content;
}
您可以通过采用参数使其更加灵活:

@mixin background-content($rgba, $no-rgba: rgba($rgba,1)) {
  background: $rgba;
  .no-rgba & { background: $no-rgba; }
}

header {
  @include background-content(rgba(0,0,0,0.5));
}

条件在mixin中,而不是每次都需要硬编码。

是的,现在我可以看到我的问题有何缺陷。所以那是不可能的。我忘了CSS树和DOM树是分开的,这也是预处理的本质。在代码到达浏览器之前,逻辑已全部解析。目前正在努力将想法从Sass&Less转变为CSS(参见变量、计算和集成现代化风格支持检查)。将逻辑直接放入浏览器将改变一切,这正是您所寻找的方式。