Svelte 全局样式未按预期工作

Joh*_*nah 2 svelte

所以我有一个看起来像这样的 Svelte 组件:

<div id="app">
  <h1>Page Title</h1>
  <p>Some text</p>
  <div><p>Some more text</p></div>
</div>


<style>
  div :global(p) {
    color: red;
  }
</style>
Run Code Online (Sandbox Code Playgroud)

我的期望是 p 标签应该是红色的,但事实并非如此。我正在使用 webpack 构建应用程序,Svelte 的相关配置是:

{
  test: /\.html$/,
  exclude: /node_modules/,
  use: 'svelte-loader'
}
Run Code Online (Sandbox Code Playgroud)

生成的样式是:

    div.svelte-f5mkpg :global(p),
   .svelte-f5mkpg div :global(p){color:red}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Svelte 1.59.0 和 svelte-loader 2.5.1。知道这里有什么问题吗?我也在默认的 Sapper 应用程序中看到了这种行为。全局 CSS 实际上在一个global.css文件中,:global样式似乎没有。

Ric*_*ris 5

为了使用:global(...)修饰符,您需要明确防止 CSS 级联:

{
  test: /\.html$/,
  exclude: /node_modules/,
  use: {
    loader: 'svelte-loader',
    options: {
      cascade: false
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在第 2 版(希望即将推出)中,级联将始终被阻止,但在此之前有必要将其置于一个选项之后,以防止发生重大变化。

:global(...)如果options.cascade !== false- 我打开了一个问题,编译器可能会发出警告。