首页 > 解决方案 > 如何在 Nuxt 中使用动态 CSS 文件?

问题描述

我正在一个项目中工作,该项目有不同的用户和他们的徽标。基于 API 调用,我想使用不同的调色板加载不同的 CSS。

现在我在文件夹中有一个css文件assetsmain.js(带有我的自定义字体样式等)和另一个用于自定义调色板的文件:<color-name>-palette.css.

在我nuxt.config的我这样称呼CSS颜色:

  css: [
    '~/assets/style/app.styl',
    '~/assets/css/main.css',
    '~/assets/css/orange-palette.css'
  ],

有没有办法根据 URL 路径/API 调用绑定 CSS 文件,而不是将路径放在那里?

我不确定我是否也可以在模板上使用它,在那里绑定 CSS 文件。可能吗?

谢谢

标签: javascriptcssvue-routernuxt.js

解决方案


要动态加载 CSS 文件,请head()使用head: {}. 这样,值可以是动态的。在https://codesandbox.io/s/l4on5508zm上查看下面的代码和工作演示

<template>
  <section>
    <h1>Index</h1>
    <button @click="swap">swap</button>
    <p v-text="cur" />
  </section>
</template>

<script>
export default {
  head() {
    return {
      link: [
        {
          rel: "stylesheet",
          href: `/${this.cur}.css`
        }
      ]
    };
  },
  data() {
    return {
      cur: "light"
    };
  },
  methods: {
    swap() {
      if (this.cur === "light") {
        this.cur = "dark";
      } else {
        this.cur = "light";
      }
    }
  }
};
</script>

查看上面的代码片段,您可以通过 head() 函数引入要在页面上动态使用的 css 文件。您可以根据用户交互(例如我的按钮单击交互)在任何页面上即时更改要使用的 CSS。


推荐阅读