Svelte:有没有办法在 svelte 组件的范围内创建全局 css 变量?

fra*_*ein 6 css css-variables svelte

我已经设置了我在 index.js 中导入的 global.css 文件

--root {
  --main-color: red;
}
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
Run Code Online (Sandbox Code Playgroud)

索引.js

import "./global.css";
import App from "./App.svelte";

const app = new App({
  target: document.body
});

Run Code Online (Sandbox Code Playgroud)

我的 webpack 设置

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /\.(html|svelte)$/,
        exclude: /node_modules/,
        use: {
          loader: "svelte-loader",
          options: {
            emitCss: true,
            hotReload: true
          }
        }
      },
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: { loader: "style-loader", options: { sourceMap: true } },
          use: [
            { loader: "css-loader", options: { sourceMap: true } },
            {
              loader: "postcss-loader",
              options: {
                sourceMap: true,
                ident: "postcss",
                plugins: loader => [
                  require("postcss-import")({}),
                  require("postcss-preset-env")(),
                  require("cssnano")()
                ]
              }
            }
          ]
        })
      }
    ]
  },
  plugins: [new HtmlWebpackPlugin(), new ExtractTextPlugin("styles.css")]
};


Run Code Online (Sandbox Code Playgroud)

非常适合为整个应用程序设置全局 css。但我试图在我的苗条组件中使用 --main-color 。有没有办法将它们注入到所有组件的 css 中?

由于我首先导入 global.css,它应该可以工作,因为它首先发出一个带有 --root{} 的文件,然后是其余的组件样式。

小智 18

在主要组件中打印下面的代码

:global(:root){
   --header-color: purple
}
Run Code Online (Sandbox Code Playgroud)

进入你的其他文件只需使用它:

h1{
      color: var(--header-color);
     }
Run Code Online (Sandbox Code Playgroud)

  • 哪个文件是“主要组件”?应用程序.svelte? (2认同)

fra*_*ein 9

我忙于这个,尝试不同的 webpack 设置等,看到输出 css 应该可以工作,我只是找不到为什么它不起作用。我在最后一次尝试之前写了这篇文章,这又浪费了一个小时。我终于找到了错误。

而不是使用:root{}我打错了它--root{}。无论如何,我已经发布了它,以防有人遇到同样的错误。