如何在 Nuxt 中使用动态 CSS 文件?

Posted

技术标签:

【中文标题】如何在 Nuxt 中使用动态 CSS 文件?【英文标题】:How to use dynamic CSS files with Nuxt? 【发布时间】:2019-07-09 03:57:49 【问题描述】:

我正在从事一个项目,该项目有不同的用户和他们的徽标。 根据 API 调用,我想使用不同的调色板加载不同的 CSS。

现在我在assets 文件夹内有一个css 文件夹,其中包含main.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 文件。有可能吗?

谢谢

【问题讨论】:

【参考方案1】:

要动态加载 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>

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

【讨论】:

【参考方案2】:

您可以在页面组件中使用“head”。 https://codesandbox.io/s/xr55o4yqmq

<script>
export default 
  head: 
    link: [
      
        rel: "stylesheet",
        href: "/about.css"
      
    ]
  
;
</script>

【讨论】:

酷,我可以将我所有的 css 文件放在页面中,但是如何根据客户端 API 调用/URL 调用正确的文件? =/

以上是关于如何在 Nuxt 中使用动态 CSS 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nuxt(vue) 中使用原始 html 文件?

如何使用 Apollo 在 Nuxt 生成的动态页面中正确填充页眉?

如何使用环境变量在 Nuxt 中动态导入 SCSS 样式表

如何使用 Nuxt 正确导入 CSS 模块?

如何在 nuxt.js (vue.js) 中配置动态 og 标签?

如何从 nuxt.js 的 assets 文件夹中导入 css 文件