如何使用 javascript 控制 Sass 变量

IT技术 javascript sass
2021-02-23 05:03:08

我有一个生成 CSS 文件的 Sass 文件。我在我的 sass 文件中使用了许多变量作为背景颜色、字体大小,现在我想通过 JavaScript 控制我的所有变量。

例如,在 style.sass 中我们有

$bg : #000;
$font-size: 12px;

如何从 JavaScript 更改这些值?

6个回答

你不能。SASS 是一个 CSS 预处理器,这意味着当您将其编译为 CSS 时所有SASS 特定信息都会消失。

谢谢 GJK。但我想在 css 生成之前更改我的变量。就像一些在 bootstrap themeroller 中所做的一样,就像我想为我的网页设置主题一样。
2021-05-12 05:03:08
好吧,我可以告诉你,肯定没有预先制作的 Javascript 库来操作 SASS 文件。你将不得不使用普通的旧文件 IO 在服务器端(如果你想使用 Javascript 通过 Node.js)来做。
2021-05-14 05:03:08

CSS

:root {
  subTitleLeftMargin: 1.5vw;
}

.element {
  margin-left: var(--subTitleLeftMargin);
}

JS 或 TS

document.documentElement.style.setProperty("--subTitleLeftMargin", "6vw");
这改变了一个变量值,但在任何地方都没有影响@Krull
2021-04-29 05:03:08
document.documentElement.style 不会在服务器端工作吧?
2021-05-08 05:03:08
我不这么认为。
2021-05-14 05:03:08

我也需要这个功能,这对我有用:

使用 JS,您可以将一个类设置为 body,例如。.blue或者.default 现在创建一组规则来扩展,你想设置:

.default .themeColor {
  color: 'red';
}
.blue .themeColor {
  color: 'blue';
}

现在,不要color: $someColor在您的 scss 文件中使用它,而是像这样使用它:

.someClass {
   @extend .themeColor;
 }

现在,如果你的 body 有defaultclass,里面的颜色someClass会是红色,如果 body 有blueclass,颜色会是蓝色。

不适用于 shadow dom 或 shadow dom 仿真(如 angular 中的组件样式封装)
2021-05-03 05:03:08

我发现sass-extract-loader对于与 Create-React-App 一起使用特别有用。

你可以像这样使用它:

_variables.scss

$theme-colors: (
  "primary": #00695F,
  "info": #00A59B
);

组件.tsx

 const style = require('sass-extract-loader!./_variables.scss');
 const brandInfo = style.global['$theme-colors'].value.primary.value.hex; // '#00695F';

如果您想做引导程序所做的事情(即编辑字段以下载主题)。

你必须:

  1. 手头有要编辑的文件
  2. 将这些变量存储为字符串,并用于.replace()搜索和替换变量
  3. 输出此字符串并将其编译为文件或将其压缩以供下载。

我个人会用 php 来做这件事。