【发布时间】:2019-08-03 23:18:07
【问题描述】:
我有一个 Vue 应用程序,由几个标准的 .vue 文件组成,如下所示:
<template>
<h1>My App</h1>
</template>
<script>
export default {
name: 'app',
data () {
return {
cssTheme: 'default-theme'
};
}
}
</script>
<style lang="less">
@import "assets/constants";
html, body {
color: @color-ui-text;
}
</style>
在我的assets/constants.less 文件中,我定义了许多供less 使用的css 变量(颜色、字体等)。
我想为我的应用程序提供一系列可以动态更改的图形“主题”。
鉴于我可以从界面读取/设置/更改的变量cssTheme(并将其设置为“green-theme”、“vintage-theme”、“default-theme”等字符串),我该如何导入并将适当的 less 文件动态应用到.vue 文件的<style> 部分?例如,用户选择“绿色主题”,我想将默认导入文件 @import "assets/constants"; 切换为 @import "assets/constants-green";,例如,@color-ui-text; 设置为深绿色而不是标准黑色。
【问题讨论】:
-
我不知道您的要求是否可行,因为 less 在您构建时被捆绑并转译为 css,因此您在运行时无法控制它。实现相同结果的一种简单方法是根据设置的主题在应用程序/组件的根元素上设置不同的类,并针对这些选择器编写特定于主题的规则。