Css 在条件内设置SASS变量?
我可以在SASS中的if/else条件中设置变量吗?例如,假设您希望一页有两种颜色方案。考虑到在身体上设置一个类来处理颜色差异,您可以做以下操作(为英语编写,不尝试任何正确的语法):Css 在条件内设置SASS变量?,css,sass,Css,Sass,我可以在SASS中的if/else条件中设置变量吗?例如,假设您希望一页有两种颜色方案。考虑到在身体上设置一个类来处理颜色差异,您可以做以下操作(为英语编写,不尝试任何正确的语法): 我可以这样做吗?是的,这是可能的: $parent: true $foo: red @if $parent == true $foo: blue p color: $foo 但是,值得注意的是,您将无法使用条件来检查SASS中父元素(或任何其他元素)的属性(请参阅来自SASS lead的帖子),因
我可以这样做吗?是的,这是可能的:
$parent: true
$foo: red
@if $parent == true
$foo: blue
p
color: $foo
但是,值得注意的是,您将无法使用条件来检查SASS中父元素(或任何其他元素)的属性(请参阅来自SASS lead的帖子),因此psuedo代码中的父类必须存储在SASS
$变量中
这是您在SASS中的操作方式:
.some-element
$main-color: black
color: $main-color
.red > &
$main-color: red
color: $main-color
结果CSS:
.some-element {
color: black;
}
.red > .some-element {
color: red;
}
但看起来你在尝试应用一个糟糕的解决方案。请描述您试图实现的目标,而不是如何实现未知任务的解决方案。看
UPD
我想我想要达到的目标很清楚。。。但为了进一步解释,我想要一页有两种颜色方案。一个是默认值&仅当类“.red”出现在body标记上时才有一个。您所展示的内容看起来像是我必须为每个类设置变量,然后为.red类复制变量。基本上,我希望有一个变量(在本例中是$main color),设置为默认值,然后在.red类中重置。有道理吗 在SASS中,无法根据当前代码是否包装在类中来设置变量。您只能手动声明变量 您还应该了解,SASS所做的只是生成CSS,仅此而已。让我们从你想要的CSS开始。我想是这样的:
header {
background-color: black; }
#main {
background-color: black; }
body.red header {
background-color: red; }
body.red #main {
background-color: red; }
header
+main-color
#main
+main-color
+theme-styles
body.red
+theme-styles(red)
您应该首先提供这样的代码,我不得不盲目猜测,这是一种耻辱
此代码可以如下显示(具有相同的功能):
现在我们可以看到一种模式
此代码可以通过SASS使用mixin轻松创建:
=main-color()
background-color: black
body.red &
background-color: red
然后像这样应用它:
header {
background-color: black; }
#main {
background-color: black; }
body.red header {
background-color: red; }
body.red #main {
background-color: red; }
header
+main-color
#main
+main-color
+theme-styles
body.red
+theme-styles(red)
另一个选项是创建包含所有样式的mixin。这可能是一个最佳的解决方案,因为它包含最少的重复
=theme-styles($main-color: black)
header
background-color: $main-color
#main
background-color: $main-color
然后像这样应用它:
header {
background-color: black; }
#main {
background-color: black; }
body.red header {
background-color: red; }
body.red #main {
background-color: red; }
header
+main-color
#main
+main-color
+theme-styles
body.red
+theme-styles(red)
事实上,您可以生成多个主题:
+theme-styles
@each $color in red blue green
body.#{$color}
+theme-styles($color)
演示:您可以使用该函数。像这样:
@函数集颜色($class){
@如果($class==红色){
@返回#f00;
}@else{
@返回#000;
}
}
$main color=设置颜色($parent class)代码>Sass变量范围
Sass支持两种类型的变量:局部变量和全局变量
默认情况下,在任何选择器之外定义的所有变量都被视为全局变量。这意味着可以从样式表中的任何位置访问它们。例如,这里有一个全局变量:
$bg-color: green;
另一方面,局部变量是在选择器中声明的变量。稍后,我们将研究如何自定义该行为。但是现在,让我们来看第一个例子
这里我们定义一个mixin,然后定义其中的btn bg color变量。这是一个局部变量,因此仅对该mixin中的代码可见:
@mixin button-style {
$btn-bg-color: lightblue;
color: $btn-bg-color;
}
结论
您可以使用此代码来更改变量中的if指令
$left: left;
$right: right;
@if $dir == rtl {
$left: right;
$right: left;
}
.pull-left{
float:#{$left};
}
你可以阅读这篇文章你误用了!默认
标志。此标志表示“仅当变量没有值时才为其设置值”。还请注意,海报要求的是“如果父类为红色”,而不是“如果另一个变量的颜色为红色”。:PI认为我想要达到的目标非常明确。。。但为了进一步解释,我想要一页有两种颜色方案。一个是默认值&仅当类“.red”出现在body标记上时才有一个。您所展示的内容看起来像是我必须为每个类设置变量,然后为.red类复制变量。基本上,我希望有一个变量(在本例中是$main color),设置为默认值,然后在.red类中重置。有道理?