(Next.js) 如何更改 next/image 中 SVG 的颜色?

Dan*_*n1y 34 css reactjs styled-components next.js nextjs-image

import Image from 'next/image'

...

<Image src="/emotion.svg" alt="emtion" width={50} height={50} />
Run Code Online (Sandbox Code Playgroud)

我想更改 中的 SVG 颜色next/image

但在 CSS 中,

img {
  fill="#ffffff"
}
Run Code Online (Sandbox Code Playgroud)

不管用。

我该如何解决这个问题?

小智 24

我建议你不要直接使用 svg 文件,而是使用 Playground SVG ( https://react-svgr.com/playground/ ),将文件转换为 JS,然后你可以通过 props 改变颜色和其他东西。

  • 这对我来说是迄今为止最好的解决方案。不需要疯狂的配置,只需从 SVG 中制作一个优化的 React 组件即可。它甚至可以做 Typescript。 (2认同)

小智 14

我认为这里最好的解决方案是不使用Image. 默认情况下,该nextjs Image组件不会对svg's. 然后,您将有多种选择/解决方案来解决您的问题:

  1. next.config.js使用以下命令扩展文件上的 webpack 配置@svgr/webpack
// next.config.js

webpack(config) {
  config.module.rules.push({
    test: /\.svg$/,
    use: ["@svgr/webpack"]
  });

  return config;
}
Run Code Online (Sandbox Code Playgroud)
// The file where u want to import the svg
import YourSvg from './public/yourSvg.svg'

// I recommend using the `currentColor` property on your svg, but you can also pass the color as prop
<YourSvg color="red" />

Run Code Online (Sandbox Code Playgroud)
  1. 使用babel-plugin-inline-react-svghttps ://github.com/vercel/next.js/discussions/20993#discussioncomment-760119 在此输入图像描述

  • 我不明白为什么 Nextjs 在这方面这么糟糕。不过还是谢谢你的确认! (2认同)

And*_*sta 7

我正在使用 Next/Image 并动态插入 SVG url。对于这种情况,我需要使用css filter某种方式更改 SVG 颜色。

https://developer.mozilla.org/en-US/docs/Web/CSS/filter

  • 这个答案为我指明了正确的方向。谢谢!对于任何对此感兴趣的人,请关注此SO线程以获取更多详细信息:/sf/answers/3733572811/ (2认同)

kin*_*fly 7

<Link href={"/setting"} className="h-fit w-fit">
    <Image className="dark:invert"
        src={"/setting.svg"} alt={"setting.svg"} width={80} height={80} />
</Link>
Run Code Online (Sandbox Code Playgroud)

invert只需在 tailwind css 中使用即可。

编辑:这只是反转颜色,这对于我的情况下的暗模式很有用。