【发布时间】:2018-10-26 08:18:47
【问题描述】:
也许我的设计失败了,但我的 SASS 是这样定义的:
$Akzent: #6d998e; // green
// ........
a {
color: $Akzent;
}
.section .foo {
background-color: $Akzent;
}
// ... many more definitions that go back on $Akzent
现在我有一个网页需要 $Akzent 有另一种颜色。在另一个 body 类之下时,我无法覆盖 $Akzent 的颜色值。
我尝试过这样的事情:
$Akzent: #6d998e; // default akzent (green)
body.page-aktzent-2 {
$Akzent: #ff9900; // override akzent with orange
}
a {
color: $Akzent:
}
// ........ more sass code
但这行不通。
我不想将以前使用 $Akzent 的所有定义重新定义为现在使用另一个 var。
如何在不重写所有内容的情况下解决我的问题?
混合似乎也没有给我带来任何解决方案。
试过这个:Set a variable in Sass depending on the selector 但这不适合我当前的 sass 代码。
【问题讨论】:
-
请记住,您的 SASS 代码不知道当前页面,因此它必须编译为定义
a和其他定义的颜色的 CSS 文件,由所有可能的身体类别。用于创建此类 CSS 代码的 SASS 机制是混合、循环以及链接问题的答案中描述的其他内容。您尝试的操作不会导致所有其他定义的额外包装,而是覆盖给定范围内的变量。 -
如果您不想修改现有代码,您可以尝试使用
body.page-akzent-2包装器创建一个新的 SCSS 文件,像您在尝试中所做的那样设置颜色,然后导入文件在这个包装器中使用a等的定义(希望这在 SASS 中能以某种方式工作,至少在 LESS 中是这样)。 -
您将无法按照您尝试的方式实现它。由于变量作用域,您不能在其作用域之外更改变量值,因此,无论如何,
$Akzent将始终具有a中的默认颜色。请记住,scss是一个 css 处理器,因此值不会改变运行时:您需要在 css 中定义您的规则。要完成您的示例,您需要定义一个基本的a,加上一个body.page-akzent-2 a。