hod caspi
hod caspi

Reputation: 836

React.js - use svg linear gradient not working

I have a circle and a gradient to fill in it, I put in the gradient and call him in path by style fill.

import React,{PropTyoes} from 'react';
import {connect} from 'react-redux';  
import * as Actions from '../controllers/Actions';


export default class MyComp extends React.Component {
    constructor(props, context){
        super(props, context); 
    }
render(){ 
      return (
<svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" viewBox="0 0 983.4 983.4">
  <g>
   <linearGradient id="linear-gradient" gradientUnits="userSpaceOnUse" x1="1041.6901" y1="169.485" x2="1383.9301" y2="169.485" gradientTransform="matrix(1 0 0 -1 -761.14 398.97)">
          <stop offset="0.14" stop-color="#2f343b" stop-opacity="0"/>
          <stop offset="0.43" stop-color="#337082" stop-opacity="0.41"/>
          <stop offset="0.67" stop-color="#369fb9" stop-opacity="0.73"/>
          <stop offset="0.79" stop-color="#37b1cf" stop-opacity="0.85"/>
        </linearGradient>
        <path id="gradient" style={{fill:'url(#linear-gradient)'}} className="cls-200" d="M622.8,119.6C512.1,72,385.5,78.9,280.6,138.1l134.3,232.6c31.2-16.8,68.2-18.5,100.9-4.8    L622.8,119.6z">
</g>
</svg>

it's not working, any suggestions?

Upvotes: 21

Views: 25948

Answers (5)

subin Shrestha
subin Shrestha

Reputation: 1

please close the path tag then it will work.

Upvotes: -1

iceiceicy
iceiceicy

Reputation: 734

Might not be entirely useful but if you have load more than one SVG, ensure the linearGradient id is unique. In my case before, both linearGradient id is id="linear-gradient" , thus the 2nd SVG is actually following the 1st SVG gradient.

Upvotes: 5

chriskaya
chriskaya

Reputation: 71

For anyone passing by: another reason for a gradient not working is if its ID contains non-ASCII caracters (like "é"). Happened to me because Adobe Xd was exporting it with ID "Dégradé_par_defaut", which means default_gradient in french :)

Upvotes: 1

hod caspi
hod caspi

Reputation: 836

In react the attributes form of linear gradient are a bit different and supposed to be like this:

<linearGradient
    id="linear-gradient"
    gradientUnits="userSpaceOnUse"
    x1="1041.6901"
    y1="169.485"
    x2="1383.9301"
    y2="169.485"
    gradientTransform="matrix(1 0 0 -1 -761.14 398.97)"
>
    <stop offset="14%" stopColor="#2f343b" stopOpacity="0%" />
    <stop offset="43%" stopColor="#337082" stopOpacity="41%" />
    <stop offset="67%" stopColor="#369fb9" stopOpacity="73%" />
    <stop offset="79%" stopColor="#37b1cf" stopOpacity="85%" />
</linearGradient>

It mean that the syntax should be from stop-color => stopColor

offset should be in percentage

ReactJs + svg

Upvotes: 33

Alexander Apostolov
Alexander Apostolov

Reputation: 71

For others coming here later, style={{fill:'url(#linear-gradient)'}} is unnecessary for just one or a mere few styles. Instead, simplify to fill="url(#linear-gradient)". The same applies to other common SVG styling like stroke="url()".

Upvotes: 7

Related Questions