如何使用Javascript更改Less CSS变量

时间:2015-07-22 09:26:17

标签: javascript css less

我有类似THIS的进度条,我想更改颜色。 例如,当值小于50%时,我希望它从绿色变为黄色。

我是Less的新手。我read有更新Less CSS的方法。 所以,如果我有一个@circle-color变量,我想稍后在我的javascript中更改;我应该修改var然后更新Less。

less.modifyVars({
    '@circle-color': '#FF4747'
});
less.refresh();

到目前为止,我已经尝试了这一点here。 有一个简单的方法吗?我错过了什么基本的东西? 这是我觉得之前可能已经回答过的问题之一,但无论如何我们都要尝试。

2 个答案:

答案 0 :(得分:1)

我不知道这究竟是你要找的,但你可以像这样使用你的变量:

.selector {
  color: @variable;

  &.50percentclass {
    color: @variable + #012345; /* any hex-value and subtraction is also possible */
  }

  &.100percentclass {
    color: @variable + #whatever;
  }
}

或者你可以简单地改变颜色值,如下所示:

.selector {
  color: @variable;

  &.50percentclass {
    color: yellow;
  }

  &:100percentclass {
    color: green;
  }
}

我认为这样做的问题是,只要进度条满足某个阈值,就必须依赖Javascript来添加这些类。

以下是关于CSS仅限进度条的精彩文章:https://css-tricks.com/css3-progress-bars/

答案 1 :(得分:0)

可以通过在样式中使用更少插件功能来实现这一目标,而不是使用更少的变量(另请参见简短的两步版本而没有更少的插件)。您所需要做的就是编写一个简短的插件(就像写getter和setter一样容易)以重新/存储变量。存储插件的示例也在较少的文档中-> http://lesscss.org/features/#plugin-atrules-feature-plugin-scope仅查找“ store”。我将介绍所有需要使用较少的插件功能更改颜色的步骤:

1。创建更少的插件: 在less文件旁边创建mylessplugin.js。它将仅在安装函数中包含get和set函数:

module.exports = function() {
    let COLORPLUGIN = {
        install: (less, pluginManager, functions) => {
            let storedColor = '#FFFFFF';

            functions.add('setcolorfn', (themeColor) => {
                storedColor = themeColor ? themeColor : '#FFFFFF';
            });

            functions.add('getcolorfn', () => {
                return storedColor;
            });
        }
    };
    return COLORPLUGIN;
};

2。将您的插件导入较少的文件。使用@plugin较少,您会将.js文件识别为较少的插件。用更少的文件做什么?也许看起来很复杂,但是很容易。我们可以将我们自己的属性设置为body元素,该元素将存储我们稍后要使用javascript设置的颜色。我已将其命名为--data-active-color并为其分配了值'#FFFFFF'。下一行将从我们的less插件中调用set函数,以使用var()@setActiveColorFn在插件中存储值:setcolorfn(〜“ var(-data-active-color)”)。因此,我们的插件现在知道颜色设置为“ #FFFFFF”。这就是身体元素。然后,我们将创建简单的mixin,它将使用我们less插件中的get函数设置属性颜色。请参阅.active-color。或者,您可以使用mixin来设置括号中传递的属性。在我们的less文件中,最后要做的就是使用我们的mixin扩展类.con-active-color。如果将此类放置到要修改的元素(.container {.con-active-color;})上,它将使用您存储的颜色自动更改:

@plugin "plugin/path/mylessplugin";

.con-active-color {
  &:extend(.active-color);
}

body {
  --data-active-color: '#FFFFFF';
  @setActiveColorFn: setcolorfn(~"var(--data-active-color)");
}

.active-color-background {
  background-color: getcolorfn();
}

.active-color {
  color: getcolorfn();
}

.active-param (@param) {
  @{param}: getcolorfn();
}

3。用js更改颜色。最后一步也很简单。例如,使用元素输入type ='color'onchange ='changeColor()'创建颜色选择器,然后在changeColor函数中根据需要修改body元素的--data-active-color属性。此属性的所有更改都会将我们的less文件存储在less插件中,该插件会自动返回使用mixin的类中的存储值。因此您可以轻松存储颜色f.e.在localStorage中并将其设置为body元素。就是这样:

document.body.style.setProperty("--data-active-color", myNewColor);

或者您也可以使用较少的插件跳过,并直接使用body参数。因此,您所需要做的就是:

1。创建更少的文件,您可以在其中为我们的存储参数设置默认值,并创建mixin:

@my-color: '#FFFFFF';

body {
    --data-color: @my-color;
}

.color-mixin (@property) {
    @{property}: ~"var(--data-color)";
}

2。用js更改颜色。(与先前版本中的第3步相同)。例如,使用元素输入type ='color'onchange ='changeColor()'创建颜色选择器,然后在changeColor函数中根据需要修改body元素的--data-color属性。然后只需在要修改的元素中使用mixin(例如.color-mixin(background-color);)。就是这样:

document.body.style.setProperty("--data-color", myNewColor);