【发布时间】:2020-09-02 20:21:25
【问题描述】:
我有一个已构建的 Vuejs 单页应用程序,我想添加用户可切换的动态主题。用户在某处或某处有按钮的地方,他们可以单击“浅色”或“深色”主题选项,整个应用程序会立即更新。我还想让我的所有“主题”scss 文件都是本地的。
这个答案here 是我迄今为止找到的最接近的答案,但主题不是本地的。
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 点,但我会从明天开始关注您的问题和可能的答案! -
@FedericoMoretti 谢谢,我很想看到这个问题的答案。让我知道我的帖子中是否有任何歧义需要我澄清。
标签: javascript html css vue.js webpack