所以我认为标题已经足够解释了:我想要动态主题我的整个应用程序。也许这意味着在我按下特定按钮时更改所有 div 的颜色,或者在特定用户登录时更改整个 web 应用程序的颜色。
只是为了给大家一些了解,我将说我已经构建了一个 Vue.js 应用程序,使用了许多库,包括一个名为 Element-ui 的库,它已经内置了一个主题选项。但问题在于它是用 scss 编写的,而我想在导航期间更改所有变量颜色。我的项目看起来像这样:
<template>
... some HTML and components...
</template>
<script>
... some javascript ...
</script>
<style scoped>
... some style that is scoped to the current component only ...
</style>
我有许多类似于这个的文件,所以对于它们所有人都制作一个“全局函数”对我来说似乎不切实际。此外,我只在main.js
中导入了主要的scss文件一次。
有什么办法可以为我的Web应用程序创建动态主题?使用Sass是个好主意吗?也许是JavaScript?
编辑
我觉得我没有解释清楚,所以我想添加一个简单的例子。 如果您访问Element页面,则可以看到右上角有一个颜色选择器,当颜色更改时,它也更改整个网站的强调颜色,例如按钮颜色,链接颜色等。
希望这能帮助更好地理解
编辑
现在,我已经选择了一个非常糟糕且我认为优化不良的解决方案。想法是当用户更改主题时,我只需创建一个新的CSS文件并将其附加到当前文档。
let sheet = document.createElement('style')
sheet.innerHTML = `*[class*="--primary"]{
background-color: ${colors[0]};
}
...`;
document.body.appendChild(sheet);
我真的认为这是一个非常糟糕的解决方案,但现在我想不到其他能够动态工作的东西。我真的希望这个过程是完美的:用户选择一种颜色,整个应用程序就会改变到那个特定的颜色,没有预先构建的 theme.css
。
最终编辑
我最终找到了一个解决方案,请参考答案!