通过Ember颜色选择器更新SCSS变量
Update SCSS variable through an Ember color picker
我想允许管理员通过影响通用sass变量更改的颜色选择器来更改我的一个网站的外观。
我知道有一些方法可以通过jQuery等来影响live-css,但我想实际修改scss变量。以下是示例:http://emberjs.jsbin.com/xafajucifu/edit?html,css,js,输出
正如您所看到的,使用颜色选择器只会更改<body>
属性,但我希望使用一种方法来更改$main-color
变量,使整个<html>
背景发生变化。
我不确定最好的方法是否包括SAVE按钮,也不确定如何让它发挥作用,我肯定对想法或其他解释持开放态度。
如果你更喜欢我在这里使用的实际代码(而不是jsbin示例),它如下:
模板/设置.hbs
<table>
<tr>
<th>Property</th>
<th>Color</th>
</tr>
<tr>
<td>$main-heading-color</td>
<td>
<div id="color-pick">
{{col-pick value=mainHeadingColor}}
</div>
</td>
</tr>
</table>
控制器/设置.js
import Ember from 'ember';
export default Ember.Controller.extend({
mainHeadingColor: '0d723c'
});
样式/定义/变量.scs
// project specific colors
$main-heading-color: #0d723c;
成员插件:https://www.npmjs.com/package/ember-colpick
SCSS文件经过预处理,这意味着在项目构建时对它们进行处理,以生成浏览器将解释的本地CSS文件,因此,由CSS中不存在的SCSS文件(如变量)添加的上下文在构建后将丢失。
换句话说,当用户正在查看您的网页/web应用程序时,您试图修改的内容已不存在。
你能做的是:
- 创建一个具有要更改的属性(例如
background-color
)的类(例如,moddable-background-color
) - 在希望能够在运行时更改的应用程序元素中使用此类
- 使用jQuery更改类中的属性值(例如
$('moddable-background-color').css('background-color', 'selected color');
我想可以对后端执行某种请求,更改SCSS变量值并强制重建所有CSS文件,但我不建议使用这种路径,这是一种既困难又昂贵的方法来实现目标,与专用类方法相比没有真正的好处。
随着我越来越多地研究这个主题,我找到了模仿它的方法。这里有几个很好的例子:
-
通过使用cssobj修改LESS变量,本质上使用预编译的变量作为javascript对象:
Git Repo
演示站点
-
创建颜色,不是通过预编译的变量,而是使用
currentColor
。博客条目(包括CodePen)
实际答案仍然是"不,你不能动态更改SASS变量",但我希望未来的搜索者能够找到像我一样的解决方案。
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 通过Ember颜色选择器更新SCSS变量
- 如何更改_variable.scss中变量的值
- 瞄准JS中的SCSS变量