如何将 svelte :global() 与 sass/scss 一起使用?

Posted

技术标签:

【中文标题】如何将 svelte :global() 与 sass/scss 一起使用?【英文标题】:How to use svelte :global() with sass/scss? 【发布时间】:2021-12-19 19:16:57 【问题描述】:

我有一个带有动态类的 Svelte 组件,根据大多数 GitHub 问题和 *** 的回答,确保未从编译中不必要地删除未使用的选择器的最佳选择是对 CSS 元素使用 :global() 函数.

不幸的是,它似乎不起作用,并且语法给我嵌套类的错误。以下是我的组件:

<script lang="ts">
  export let color: "orange" | "blue" | "green" | "purple" = "blue";
  export let text: string = "";
  export let showDot: boolean = false;
  export let active: boolean = false;
</script>

<button class=color === "orange" + active ? " active" : "">
  <span>text</span>

  #if showDot
    <span class="dot">•</span>
  /if
</button>

<style lang="scss">
  button 
    width: 80px;
    color: #00000099;
    opacity: 80%;

    &.orange 
      .dot 
        color: #ff9100;
      

      &.active 
        background-color: #ff9100;
        color: #fff;
      
    

    &.blue 
      .dot 
        color: #69bcff;
      

      &.active 
        background-color: #69bcff;
        color: #fff;
      
    

    &.purple 
      .dot 
        color: #5c6bc0;
      

      &.active 
        background-color: #5c6bc0;
        color: #fff;
      
    

    &.green 
      .dot 
        color: #66bb6a;
      

      &.active 
        background-color: #66bb6a;
        color: #fff;
      
    
  
</style>

目前这段代码给了我错误(或警告):

Unused CSS selector "button.orange .dot" svelte(css-unused-selector)
Unused CSS selector "button.orange.active" svelte(css-unused-selector)
Unused CSS selector "button.blue .dot" svelte(css-unused-selector)
Unused CSS selector "button.blue.active" svelte(css-unused-selector)
Unused CSS selector "button.purple .dot" svelte(css-unused-selector)
Unused CSS selector "button.purple.active" svelte(css-unused-selector)
Unused CSS selector "button.green .dot" svelte(css-unused-selector)
Unused CSS selector "button.green.active" svelte(css-unused-selector)

我尝试使用:global(button),但它给了我同样的错误,当在一个嵌套类(例如:global(&amp;.orange))或任何变体上使用它时,它给了我一个语法错误。

我会怎么做:

一个。使用:global()保证选择器不被移除?

b.找到其他方法来防止选择器被删除?

【问题讨论】:

【参考方案1】:

似乎我找到了一种不涉及使用:global() 的解决方法。由于我的主要目标是防止 CSS 选择器被标记为未使用,因此我在 svelte 中使用了“类指令”,并像这样修改了我的按钮:

<button
  class:orange=color === "orange"
  class:blue=color === "blue"
  class:purple=color === "purple"
  class:green=color === "green"
  class:active
>
  <span>text</span>

  #if showDot
    <span class="dot">•</span>
  /if
</button>

【讨论】:

【参考方案2】:

你可以这样使用

<style lang="scss">
  :global(button) 
    width: 80px;
    color: #00000099;
    opacity: 80%;

    & :global(.orange) 
      .dot 
        color: #ff9100;
      

      & :global(.active) 
        background-color: #ff9100;
        color: #fff;
      
    
</style>

【讨论】:

以上是关于如何将 svelte :global() 与 sass/scss 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ionic 设置 Svelte.js?

如何将 Routify 与 Snowpack 和 Svelte 一起使用

如何使用 Svelte 在 Storybook 中设置打字稿?

如何将 Svelte 应用程序用作另一个 Svelte 应用程序中的组件?

如何在运行时将编译的 svelte-components/-apps 导入 svelte-app

如何手动将 svelte 组件编译为 sapper/svelte 生成的最终 javascript 和 css?