使用 CSS 类 设置 SVG 图像样式

Styling SVG images using CSS classes

我是 Svelte 的新手,想问一下是否有可能使用 CSS 类 对作为 Svelte 组件导入的 SVG 图像设置样式?我有这样的代码:

<script lang="ts">
  import Logo from './assets/logo.svg';
  import Content from './components/Content.svelte';
</script>

<div class="main">
  <div class="logo">
    <Logo class="icon" />
  </div>
  <Content />
</div>

<style lang="scss">
  .main {
    max-width: 920px;
    width: 100%;
    margin: 0 auto;
  }

  .logo {
    height: 144px;
  }

  .icon {
    margin: 50px auto 0;
  }
</style>

我收到警告:

Unused CSS selector ".icon"

是我做错了什么,还是它不能那样工作?

由于您的 svelte 组件中没有 .icon 元素,因此您需要使用 :global(...) modifier,例如 :global(.icon) { margin: 50px auto 0; }。但是,这会影响您应用的所有 .icon,因此将其范围限定为该组件的 .logo 元素中的所有 .icon

<style lang="scss">
  .logo :global(.icon) { 
    margin: 50px auto 0; 
  }
</style>

由于您无法从 svg 代码外部使用 css 设置 svg 样式,因此您必须将样式嵌入 svg 代码中。您必须使用 <![CDATA[ your styles here ]]> 来防止某些回退。所以您的徽标将如下所示:

    <svg width="100%" height="100%" viewBox="0 0 140 64" xmlns="http://www.w3.org/2000/svg">
    <style><![CDATA[.first{ stroke:none; fill:red; } .second{ stroke:none; fill:green; } .third{ stroke:none; fill:blue; }]]></style>
        <path class="first" d="M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.717-6.002 11.47-7.65 17.305-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z"/>
        <path class="second" d="M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.592-2.32 17.307 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z"/>
        <path class="third" d="M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z"/>
    </svg>