SCSS/SASS的条件变量
问题描述:
我想看看是否有一种方法来条件化我的scss变量。这个场景是当所有字体被加载时,一个后备字体加载器在我的身体上抛出一个类 - 所以我可以转换出字体。SCSS/SASS的条件变量
这样的想法是我有我的_variables.scss文件中设置了,里面有我的所有网站的字体看起来像这样 -
$primary-font-family: 'Font1', sans-serif;
$primary-font-normal: 400;
$primary-font-bold: 700;
$secondary-font-family: 'Font2', serif;
$secondary-font-normal: normal;
$secondary-font-bold: normal;
这一直是我工作的伟大,但我期待一个简单的方法来将它们交换出来,而不需要在CSS中添加类监听器,以便使用这些字体的每个实例。所以,我想知道是否有可能是条件化这些变量的方式 -
// if .fonts-loaded class is on body, use loaded font
$primary-font-family: 'Font1', sans-serif;
// else use system default font
$primary-font-family: 'defaultSystemFont', sans-serif;
不确定的,如果这样的事情是可能的,没有人知道的方式来实现这一目标。谢谢阅读!
答
Sass永远不会知道是否像JS一样加载页面上的东西。
一旦编译,萨斯成为静态CSS和不根据页面上所做的更改必然交流(超出知道它应该根据预先定义的伪类样式的事情一定的方式。)
此外,我们越是告诉页面“思考得越多” - 在加载时间方面受益越少。
由于CSS是“层叠”,你总是可以设置默认的字体堆栈,如:
.stuff {color: #333; font-family: Arial, Helvetica, sans-serif; font-size: 1em;}
......然后,在CSS(可能范围内的部分是在全球布局后,进口低,作为主题的一部分):
.stuff {font-family: "SuperSpecialFont";}
然后,它将载入,因为它读取,设置默认基础,然后逐步增强它。 Sass永远不会意识到一个页面的加载状态,然而,它会根据什么可用和什么时候提供样式 - 这可以让你有一个回退,直到它应该呈现的所有内容都到位。
===
根据您的意见,似乎没有要在这种情况下,有条件的理由。
基本的CSS会处理它.thisClass .thatClass
或.thisClass > .thatClass
- 取决于你想成为多么严格。因此,例如,在萨斯:
.thatClass {
color: #333;
font-family: Arial, Helvetica, sans-serif;
font-size: 1em;
}
.thisClass {
.thatClass {
font-family: 'SuperSpecialFont';
}
}
如果它嵌套的内部.thisClass
,那么它会应用这些性质。如果不是,它将保持原来的定义。
我不问sass知道是否加载了一些东西 - 更多的是如果有一个父类包装类(或不是)来改变var的值。就像父类的.fonts-loaded ... else一样。对不起,如果不清楚。我知道你可以做,如果其他人与布尔,我不知道你如何可能检查课程评估布尔。 – ajmajmajma
以上扩展了我的答案。 –
我试图避免这种情况,因为它有大约80个独立的scss文件,而且我将不得不将这个包装逻辑**应用到所有地方**我正在使用字体变量。因此,在变量层面改变它会降低到更低的水平,并避免所有的个体变化。 – ajmajmajma