18910140161

JavaScript-在react中用多种颜色更改svg的颜色-Stack Overflow

顺晟科技

2022-10-19 15:00:00

293

我想做一个网站,我们有不同的svg,我们可以改变svg的颜色感谢chrome选择器。 我的svg都是一样的,您只需要用COULEUR ID更改路径的填充。 下面是我的svg文件:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 501 501" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
    <g transform="matrix(1,0,0,1,-8695,-3112)">
        <g id="Drapeau" transform="matrix(1,0,0,1,8695.6,3112.25)">
            <rect x="0" y="0" width="500" height="500" style="fill:none;"/>
            <g transform="matrix(2.96558,0,0,2.96558,395.922,266.199)">
                <g id="BLANC">
                    <path d="M0,-29.363L-50.317,-29.363L-50.317,-48.522L-98.411,-48.522L-98.411,-0.117L-50.317,-0.117L-50.317,0.003L-69.867,19.159L0,19.159L-21.936,-5.105L0,-29.363Z" style="fill:white;fill-rule:nonzero;"/>
                </g>
            </g>
            <g transform="matrix(2.96558,0,0,2.96558,188.727,171.993)">
                <g id="COULEUR">
                    <path d="M0,50.926L69.867,50.926L47.931,26.661L54.72,19.154L19.549,19.154L19.549,0L-7.811,0L-7.811,31.623L19.549,31.623L19.549,31.77L0,50.926Z" style="{color};fill-rule:nonzero;"/>
                </g>
            </g>
            <g transform="matrix(2.96558,0,0,2.96558,108.155,241.896)">
                <g id="TRAITS">
                    <path d="M0,6.743L0,-38.952L45.343,-38.952L45.343,6.703L0.316,6.703C0.207,6.703 0.102,6.719 .473,9.453L26.207,26.372C25.808,26.764 25.685,27.357 25.896,27.874C26.107,28.391 6 98.42,26.836 98.056,26.432L76.953,3.09Z" style="fill:rgb(0,64,59);fill-rule:nonzero;"/>
                </g>
            </g>
        </g>
    </g>
</svg>```

here is the code I made for the moment it doesn't look good to me

const ContainerSvg = styled.div`
  *[fill='${dynamicColor}'] {
    fill: ${p => p.color};
  }
  *[stroke='${dynamicColor}'] {
    fill: ${p => p.color};
  }
`;

class Magic2 extends React.PureComponent {
  state = {
    color: dynamicColor
  };
  
  onChangeColor = color => this.setState({ color: color.hex });
  render() {
    const { color } = this.state;
    return (
      <div>
        <ChromePicker
          color={color}
          onChangeComplete={this.onChangeColor}
        />
        <ContainerSvg color={color}>
          <Svg src={url}>Can't load image</Svg>
        </ContainerSvg>
      </div>
    );
  }
}
export default Magic2;```


顺晟科技:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 501 501" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
    <g transform="matrix(1,0,0,1,-8695,-3112)">
        <g id="Drapeau" transform="matrix(1,0,0,1,8695.6,3112.25)">
            <rect x="0" y="0" width="500" height="500" style="fill:none;"/>
            <g transform="matrix(2.96558,0,0,2.96558,395.922,266.199)">
                <g id="BLANC">
                    <path d="M0,-29.363L-50.317,-29.363L-50.317,-48.522L-98.411,-48.522L-98.411,-0.117L-50.317,-0.117L-50.317,0.003L-69.867,19.159L0,19.159L-21.936,-5.105L0,-29.363Z" style="fill:white;fill-rule:nonzero;"/>
                </g>
            </g>
            <g transform="matrix(2.96558,0,0,2.96558,188.727,171.993)">
                <g id="COULEUR">
                    <path d="M0,50.926L69.867,50.926L47.931,26.661L54.72,19.154L19.549,19.154L19.549,0L-7.811,0L-7.811,31.623L19.549,31.623L19.549,31.77L0,50.926Z" style="{color};fill-rule:nonzero;"/>
                </g>
            </g>
            <g transform="matrix(2.96558,0,0,2.96558,108.155,241.896)">
                <g id="TRAITS">
                    <path d="M0,6.743L0,-38.952L45.343,-38.952L45.343,6.703L0.316,6.703C0.207,6.703 0.102,6.719 .473,9.453L26.207,26.372C25.808,26.764 25.685,27.357 25.896,27.874C26.107,28.391 6 98.42,26.836 98.056,26.432L76.953,3.09Z" style="fill:rgb(0,64,59);fill-rule:nonzero;"/>
                </g>
            </g>
        </g>
    </g>
</svg>```

here is the code I made for the moment it doesn't look good to me

const ContainerSvg = styled.div`
  *[fill='${dynamicColor}'] {
    fill: ${p => p.color};
  }
  *[stroke='${dynamicColor}'] {
    fill: ${p => p.color};
  }
`;

class Magic2 extends React.PureComponent {
  state = {
    color: dynamicColor
  };
  
  onChangeColor = color => this.setState({ color: color.hex });
  render() {
    const { color } = this.state;
    return (
      <div>
        <ChromePicker
          color={color}
          onChangeComplete={this.onChangeColor}
        />
        <ContainerSvg color={color}>
          <Svg src={url}>Can't load image</Svg>
        </ContainerSvg>
      </div>
    );
  }
}
export default Magic2;```

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航