Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JS在较少的css中重写全局变量_Javascript_Jquery_Css_Less - Fatal编程技术网

Javascript 使用JS在较少的css中重写全局变量

Javascript 使用JS在较少的css中重写全局变量,javascript,jquery,css,less,Javascript,Jquery,Css,Less,我用更少的css创建了一个全局变量,并给它赋值。我在CSS的多个类中使用了该值。我想通过javascript动态重写这个全局变量 @color:#f938ab; 身体{ 字体系列:“Raleway”,无衬线; 颜色:@颜色; } 我可以使用JavaScript代码或类似下面的代码重写上述变量吗 var color = //color from database; document.documentElement.style.setProperty('@color', color); 或者CS

我用更少的css创建了一个全局变量,并给它赋值。我在CSS的多个类中使用了该值。我想通过javascript动态重写这个全局变量

@color:#f938ab;
身体{
字体系列:“Raleway”,无衬线;
颜色:@颜色;
}
我可以使用JavaScript代码或类似下面的代码重写上述变量吗

var color = //color from database;
document.documentElement.style.setProperty('@color', color);

或者CSS中还有其他方法吗?

您需要重新考虑您的方法

也许您可以将一个类应用于主容器(
body
?),并根据该类更改css以应用特定的颜色?您可能会动态更新此颜色的值

此外,根据编译较少文件的位置,您可能有更多的选项。如果您在每个请求上都在服务器端编译它(糟糕的方法),并且您也在服务器端读取DB,那么您可以通过更改文件来更改此变量的值

如果您在客户端生成CSS(糟糕的方法),您可能会做类似的事情

这两种解决方案都非常糟糕且“有漏洞”,会严重影响性能

修改变量 启用对较少变量的运行时修改。使用新值调用时,将重新编译较少的文件,而无需重新加载。简单的基本用法:

这假设您在客户端使用较少,否则您将需要为每种颜色创建一个css类,并使用javascript进行切换。
但最后一种解决方案只有在您有一个特定的可能颜色列表时才可行,因为十六进制句柄16 777 216不同。

最好的方法是在主体上添加动态类,并根据主体上添加的类更改@color的值,然后将LESS编译为css

@color: #f938ab;

body.class1{
@color: color1;
}

body {
  font-family: 'Raleway', sans-serif;
  color: @color;
}

并使用javascript在body上添加类。

您不能在JS中修改CSS预处理器变量。您试图做的是不可能的。我使用了:root css,但IE浏览器不支持它。任何其他更改@color value dynamically的方法您只能通过设置样式来覆盖cssjs@AllanRaquin我被纠正了,但要做到这一点,您需要在客户端上运行更少的代码,这几乎破坏了使用CSS预编译器的所有好处
@color: #f938ab;

body.class1{
@color: color1;
}

body {
  font-family: 'Raleway', sans-serif;
  color: @color;
}