我有一个生成 CSS 文件的 Sass 文件。我在我的 sass 文件中使用了许多变量作为背景颜色、字体大小,现在我想通过 JavaScript 控制我的所有变量。
例如,在 style.sass 我们有
$bg : #000;
$font-size: 12px;
如何从 JavaScript 更改这些值?
我有一个生成 CSS 文件的 Sass 文件。我在我的 sass 文件中使用了许多变量作为背景颜色、字体大小,现在我想通过 JavaScript 控制我的所有变量。
例如,在 style.sass 我们有
$bg : #000;
$font-size: 12px;
如何从 JavaScript 更改这些值?
你不能。SASS 是一个 CSS 预处理器,这意味着当您将其编译为 CSS 时,所有SASS 特定信息都会消失。
CSS
:root {
subTitleLeftMargin: 1.5vw;
}
.element {
margin-left: var(--subTitleLeftMargin);
}
JS或TS
document.documentElement.style.setProperty("--subTitleLeftMargin", "6vw");
我也需要这个功能,这对我有用:
使用 JS,您可以将一个类设置为 body,例如。.blue
或者.default
现在创建一组规则来扩展,你想设置:
.default .themeColor {
color: 'red';
}
.blue .themeColor {
color: 'blue';
}
现在不要color: $someColor
在你的 scss 文件中,而是像这样使用它:
.someClass {
@extend .themeColor;
}
现在,如果你的 body 有default
类,里面的颜色someClass
是红色,如果 body 有blue
类,颜色是蓝色。
我发现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';
JavaScript 在客户端(在 Web 浏览器中)运行,而 Sass 是在服务器端生成的,因此您必须找到一些方法来弥补这一差距。一种方法是设置一些 AJAX 样式的侦听以将 JavaScript 事件发送到您的服务器,然后让服务器编辑并重新编译您的 style.sass 文件。
如果您正在寻找引导程序所做的事情(即编辑字段以下载主题)。
你必须:
.replace()
搜索和替换变量我会亲自用 php 来做这件事。
使用 JSON 在 Sass 和 JavaScript 之间共享数据。
风格多变
:root {
--bg: #000;
--font-size:12px;
}
通过javascript更改变量值
root.style.setProperty('--bg', '#fff');
root.style.setProperty('--font-size', '14px');
使用 Sass 或任何其他变量来设置初始值
JavaScript 设置同名的 CSS 自定义属性以根据需要更新这些值(同名只是一种偏好)。
您不需要定义 CSS 根属性,因为 Sass 变量是备用变量,最初会被使用。这允许你在服务器端使用 Sass 或任何其他风格的处理器做任何你想做的事情,并在客户端更新值。
这是控制背景颜色的颜色选择器的示例。
scss
$selectedColor: #000;
body {
background: var(--selectedColor, $selectedColor);
}
html
<input type="color">
js
const colorInput = document.querySelector('[type=color]')
// Set the CSS custom property --selectedColor on the root element
// Now JavaScript controls this variable and everywhere you used Sass variables if you follow this pattern
const handleColorInput = e => document.documentElement.style.setProperty("--selectedColor", e.target.value)
colorInput.addEventListener('input', handleColorInput)