You can do as i described below to dynamically customize size, fill, stroke (and any svg attribute you want):
Put some svg file in your profect:
ic-some-svg-ic.svg file:
<!-- Delete width and height of <svg> tag, only viewBox is needed -->
<!-- If you specify there fill or stroke, they will be default -->
<svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 100 100"
fill="#C4C4C4">
<!--
Delete all fill and stroke in children
in order them to take fill and stroke from parent <svg> tag
-->
<rect x="16" y="57" width="68" height="16" stroke="none" />
<circle cx="25.5" cy="40.5" r="9.5" stroke="none" />
<circle cx="50.5" cy="40.5" r="9.5" stroke="none" />
<circle cx="74.5" cy="40.5" r="9.5" stroke="none" />
</svg>
Create SVG React Component from this file:
SomeSvgIc.tsx file:
import React from 'react'
import { ReactComponent as SomeSvgSvg } from '../../assets/icons/ic-some-svg-ic.svg'
const SomeSvgIc = ({color, size}: {color:string, size?:number}) => {
return <SomeSvgSvg
width={size??'100%'}
height={size??'100%'}
stroke={color}
fill={color}
/>
}
export default SomeSvgIc
Test it:
import SomeSvgIc from "../components/SvgIcons/SomeSvgIc";
const SvgTest = () => {
return <div>
<div style={{width:400, height:200, border: '1px solid red' }}>
<SomeSvgIc color={"blue"} size={50}/>
</div>
<div style={{width:200, height:400, border: '1px solid red' }}>
<SomeSvgIc color={"blue"}/>
</div>
<div style={{display: 'flex', flexFlow: 'row nowrap'}}>
<div style={{width:200, height:200, background: 'red'}} />
<div style={{height:200, background: 'yellow'}}>
<SomeSvgIc color={"blue"}/>
</div>
</div>
</div>
}
export default SvgTest
FULLY CUSTOMISE:
SomeSvgIc2.tsx file:
import React from 'react'
const SomeSvgIc2 = ({color1, color2, color3, color4, size}: {color1:string, color2:string, color3:string, color4:string, size?:number}) => {
return <svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 100 100"
width={size??'100%'} height={size??'100%'} >
<rect x="16" y="57" width="68" height="16" stroke="none" fill={color1} />
<circle cx="25.5" cy="40.5" r="9.5" stroke="none" fill={color2} />
<circle cx="50.5" cy="40.5" r="9.5" stroke="none" fill={color3} />
<circle cx="74.5" cy="40.5" r="9.5" stroke="none" fill={color4} />
</svg>
}
export default SomeSvgIc2
And use in component jsx/tsx markup:
<SomeSvgIc2 color1={"blue"} color2={"red"} color3={"black"} color4={"green"} size={50}/>
You can easy create your own SVG icons in Figma (it is free)