是否可以使用css预处理器有条件地生成css?
当我使用Modernizer时,它会在我的是否可以使用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);
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(参见变量、计算和集成现代化风格支持检查)。将逻辑直接放入浏览器将改变一切,这正是您所寻找的方式。