请教一个 naiveUI 彩色 icon 问题

50 天前
 weixiaoD

naiveUI 里的图标可以通过给 icon 添加属性 color 来修改 svg 图标的颜色 像这样

<n-button>
  <template #icon>
    <n-icon color="red">
      <HourglassOutline />
    </n-icon>
  </template>
</n-button>

后来我想要把这个颜色换成彩色动画,然后我去搜索了相关信息, 找到了一个修改 background 属性的方法...但是这不是我要的效果,我就是希望里面的那个图标渐变就好,我试过加一个 background-clip,加完之后就没效果了,图标变成黑色了,请问有什么好的方法可以实现我要的效果吗?

<n-button>
  <template #icon>
    <n-icon class="Gradient">
      <HourglassOutline />
    </n-icon>
  </template>
</n-button>
@property --colorA {
  syntax: '<color>';
  inherits: false;
  initial-value: fuchsia;
}

@property --colorC {
  syntax: '<color>';
  inherits: false;
  initial-value: #f79188;
}

@property --colorF {
  syntax: '<color>';
  inherits: false;
  initial-value: red;
}

.Gradient {
  background: linear-gradient(45deg,
      var(--colorA),
      var(--colorC),
      var(--colorF));
  animation: change 5s infinite linear;
  /* background-clip: text; */
  
}

@keyframes change {
  20% {
    --colorA: red;
    --colorC: #a93ee0;
    --colorF: fuchsia;
  }

  40% {
    --colorA: #ff3c41;
    --colorC: #e228a0;
    --colorF: #2e4c96;
  }

  60% {
    --colorA: orange;
    --colorC: green;
    --colorF: teal;
  }

  80% {
    --colorA: #ae63e4;
    --colorC: #0ebeff;
    --colorF: #efc371;
  }
}
1169 次点击
所在节点    Vue.js
6 条回复
xuchunyang
50 天前
试试直接在 SVG 代码中调整
LavaC
50 天前
没用过 nativeUI ,如果这个 svg 是以 base64 形式存在于 background-image 上的话,可以将值赋予给 mask-image 做一个遮罩,再用背景覆盖。
不过总的来说这个方法实现的效果很糙,最好还是直接从 svg 本身入手。
ntedshen
50 天前
讲道理用 iconfont 多好。。。
试试看 css3 的 mix-blend-mode ?
wingzhingling
48 天前
给 color 绑定一个变量,写个 setInterval 循环变换 color 的值,css 设置一下 transition 时间
weixiaoD
39 天前
@wingzhingling 这种只能设置单一色彩吧,不能渐变那种效果,像我 gif 那样
weixiaoD
39 天前
@xuchunyang 没接触过 svg 动画,哈哈,有空再看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1037651

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX