4

我无法让全局 css 变量按照 ionic stencil docs中的描述工作。

我在 'src/global/' 中创建了一个 'variables.css' 文件,然后将“globalStyle: 'src/global/variables.css'” 放入“stencil.config.ts” 文件中。

然后我在 variables.css 中创建了一组 css 变量,并尝试在我的组件的 css 文件中使用它们;但是,使用默认值,因为它无法加载全局变量。

// stencil.config.ts
import { Config } from '@stencil/core';

export const config: Config = {
    namespace: 'mycomponent',
    outputTargets:[
        {
            type: 'dist'
        },
        {
            type: 'www',
            serviceWorker: null
        }
    ],
    globalStyle: 'src/global/variables.css'
}


// src/global/variables.css
:root {
    --qa-primary-color: #2169e7;
    --qa-secondary-color: #fcd92b;
    --qa-dark-color: #0000;
    --qa-light-color: #ffff;
    --qa-font-family: Arial, Helvetica, sans-serif;
    --qa-font-size: 12px;
}


// src/components/my-component.css
.main {
    background: var(--qa-dark-color, yellow);
}
.first {
    color: var(--qa-primary-color, pink);
}
.last {
    color: var(--qa-secondary-color, green);
}

随意看看测试回购

4

4 回答 4

5

我通过添加<link rel="stylesheet" href="/build/{YOUR_NAMESPACE}.css">来解决这个问题src/index.html

于 2019-06-07T17:08:26.270 回答
5

如果您使用的是 SASS,那么您可以将其添加到您的 stencil.config.ts 文件中

...   
plugins: [
    sass({
      injectGlobalPaths: ["src/global/variables.scss"]
    })
  ]
...
于 2020-02-04T00:09:21.617 回答
2

我使用复制配置自己实现了该功能,将我的 global/variables.css 从 src/ 目录复制到 www/ 和 dist/。此外,为了测试,我在 index.html 文件中为 global/variables.css 添加了样式表链接标记。如果您遵循此过程,则无需设置 globalStyle 配置。

虽然这并没有解决文档中描述的过程似乎不正确的事实,但它确实提供了预期的效果。

// stencil.config.ts
import { Config } from '@stencil/core';

export const config: Config = {
  namespace: 'mycomponent',
  outputTargets:[
    {
      type: 'dist'
    },
    {
      type: 'www',
      serviceWorker: null
    }
  ],
  copy: [
    { src: 'global' }
  ]
}

// html.index
<!DOCTYPE html>
<html dir="ltr" lang="en">
    <head>
        ...
        <link rel="stylesheet" type="text/css" href="global/variables.css">
    </head>
    <body>
        ...
    </body>
</html>
于 2018-08-15T19:33:59.560 回答
0

这个问题是由于阴影 DOM 在使用 @component 装饰器时我们有一个属性 shadow 使它为假。这应该在嵌套组件中遵循。参考 https://stenciljs.com/docs/styling#shadow-dom

@Component({
  tag: 'to-do-card-list',
  styleUrl: 'to-do-card-list.css',
  shadow: false,
})

参考图片

于 2020-08-04T06:42:53.923 回答