我有一个用Vuejs构建的单页应用程序,我想添加用户可切换的动态主题功能。用户可以在某个地方点击一个“亮色”或“暗色”主题选项,整个应用程序会立即更新。我还希望所有我的“theme”scss文件都是本地的。
这个答案在这里 是目前为止我找到的最接近的答案,但主题不是本地的。
如果我能想出如何使用本地主题文件使这个答案有效,那就太好了,但是将链接路径替换为本地路径并不能起作用。
这个答案在这里 是目前为止我找到的最接近的答案,但主题不是本地的。
const themes = {
flatly: "https://bootswatch.com/4/flatly/bootstrap.min.css",
materia: "https://bootswatch.com/4/materia/bootstrap.min.css",
solar: "https://bootswatch.com/4/solar/bootstrap.min.css"
};
如果我能想出如何使用本地主题文件使这个答案有效,那就太好了,但是将链接路径替换为本地路径并不能起作用。
const themes = {
dark: "dark-theme.scss",
light: "light-theme.scss"
};
我怀疑这不起作用是因为Webpack或其他编译问题,导致scss文件未被包含。
我发现,如果我在index.html中添加以下内容,可以使我的主题文件出现在客户端源代码中:
<link rel="stylesheet" type="text/css" href="<%= BASE_URL %>dark-theme.scss">
但是我不知道如何在应用程序中引用它。也许像 http://localhost:8080/dark-theme.scss
这样的链接?但是我认为这在生产环境中不起作用(在本地也不行)。
我还看过:
我还尝试过在我的 main.ts
文件中做类似于 import "@/path/to/theme.scss";
的事情,它确实可以工作,但是我不知道如何利用它来使主题可切换。它只添加了一个如下所示的元素到我的头部,其中没有id或class,因此我无法有效地查询它以切换它。使用 require
也会产生类似的结果。
<style type="text/css" >
...
</style>
main.ts
中提到的那样导入两个主题,然后使用JavaScript方法来提供媒体查询无法提供的功能:也就是在不支持它们的浏览器上。现在已经是凌晨3点,但我会在明天关注您的问题和可能的答案! - Federico Moretti