如何为SVG的单个path路径填充多种不同颜色?
解决方案
完全可以实现,你当前的svg_path是将外圆、直线箭头、曲线箭头三个独立图形合并为了单个路径,单个path只能配置一个填充色,所以拆分路径后分别设置填充色即可,操作步骤如下:
1. 拆分合并的路径
你的路径以Z作为闭合标识,三个Z刚好对应三个独立图形,拆分后路径如下:
// 外圆路径(对应白色填充) const circlePath = "M 249.00,4.80 C 290.13,4.93 329.59,13.62 366.00,33.31 392.61,47.70 415.78,66.26 435.71,89.00 513.68,177.94 515.13,312.55 440.74,404.00 420.15,429.31 394.70,450.17 366.00,465.69 333.17,483.45 295.30,493.58 258.00,494.00 258.00,494.00 234.00,494.00 234.00,494.00 213.63,493.76 183.16,486.19 164.00,479.05 131.25,466.84 100.84,447.67 76.09,422.91 4.06,350.88 -15.12,241.71 25.86,149.00 53.48,86.53 109.78,36.32 175.00,16.02 191.65,10.85 218.73,5.03 236.00,4.80 236.00,4.80 249.00,4.80 249.00,4.80 Z"; // 直线箭头路径(对应绿色填充) const straightArrowPath = "M 340.00,160.00 C 340.00,160.00 300.00,119.00 300.00,119.00 297.32,116.32 288.38,106.20 285.00,106.20 281.69,106.20 272.60,116.32 270.04,119.00 270.04,119.00 231.00,162.00 231.00,162.00 231.00,162.00 250.00,161.00 250.00,161.00 250.00,161.00 263.00,161.00 263.00,161.00 263.00,161.00 263.00,175.00 263.00,175.00 263.00,175.00 264.00,197.00 264.00,197.00 264.00,197.00 146.00,197.00 146.00,197.00 146.00,197.00 145.00,219.00 145.00,219.00 145.00,219.00 145.00,237.00 145.00,237.00 145.00,237.00 168.00,237.00 168.00,237.00 168.00,237.00 185.00,238.00 185.00,238.00 185.00,238.00 306.00,238.00 306.00,238.00 306.00,238.00 306.00,161.00 306.00,161.00 306.00,161.00 340.00,160.00 340.00,160.00 Z"; // 曲线箭头路径(对应橙色填充) const curveArrowPath = "M 307.00,387.00 C 307.00,387.00 361.00,345.58 361.00,345.58 364.52,342.69 377.49,333.73 375.83,329.00 374.51,325.21 362.60,315.49 359.00,312.42 359.00,312.42 328.00,287.00 328.00,287.00 321.92,282.23 313.29,275.30 306.00,273.00 306.00,273.00 306.00,309.00 306.00,309.00 306.00,309.00 145.00,309.00 145.00,309.00 145.00,309.00 145.00,350.00 145.00,350.00 145.00,350.00 214.00,350.00 214.00,350.00 214.00,350.00 231.00,349.00 231.00,349.00 231.00,349.00 268.00,349.00 268.00,349.00 268.00,349.00 296.00,349.00 296.00,349.00 298.60,349.01 302.42,348.67 304.42,350.60 307.07,353.15 306.99,360.49 307.00,364.00 307.00,364.00 307.00,387.00 307.00,387.00 Z";
2. 渲染SVG并设置对应填充色
按外圆在下、箭头在上的层级渲染三个路径,分别设置fill属性即可,拆分后路径坐标和原合并路径完全一致,不会出现位置偏移:
<svg width="500" height="500" viewBox="0 0 500 500"> <!-- 外圆 白色填充 --> <path d="M 249.00,4.80 C 290.13,4.93 329.59,13.62 366.00,33.31 392.61,47.70 415.78,66.26 435.71,89.00 513.68,177.94 515.13,312.55 440.74,404.00 420.15,429.31 394.70,450.17 366.00,465.69 333.17,483.45 295.30,493.58 258.00,494.00 258.00,494.00 234.00,494.00 234.00,494.00 213.63,493.76 183.16,486.19 164.00,479.05 131.25,466.84 100.84,447.67 76.09,422.91 4.06,350.88 -15.12,241.71 25.86,149.00 53.48,86.53 109.78,36.32 175.00,16.02 191.65,10.85 218.73,5.03 236.00,4.80 236.00,4.80 249.00,4.80 249.00,4.80 Z" fill="#ffffff" /> <!-- 直线箭头 绿色填充 --> <path d="M 340.00,160.00 C 340.00,160.00 300.00,119.00 300.00,119.00 297.32,116.32 288.38,106.20 285.00,106.20 281.69,106.20 272.60,116.32 270.04,119.00 270.04,119.00 231.00,162.00 231.00,162.00 231.00,162.00 250.00,161.00 250.00,161.00 250.00,161.00 263.00,161.00 263.00,161.00 263.00,161.00 263.00,175.00 263.00,175.00 263.00,175.00 264.00,197.00 264.00,197.00 264.00,197.00 146.00,197.00 146.00,197.00 146.00,197.00 145.00,219.00 145.00,219.00 145.00,219.00 145.00,237.00 145.00,237.00 145.00,237.00 168.00,237.00 168.00,237.00 168.00,237.00 185.00,238.00 185.00,238.00 185.00,238.00 306.00,238.00 306.00,238.00 306.00,238.00 306.00,161.00 306.00,161.00 306.00,161.00 340.00,160.00 340.00,160.00 Z" fill="#00ff00" /> <!-- 曲线箭头 橙色填充 --> <path d="M 307.00,387.00 C 307.00,387.00 361.00,345.58 361.00,345.58 364.52,342.69 377.49,333.73 375.83,329.00 374.51,325.21 362.60,315.49 359.00,312.42 359.00,312.42 328.00,287.00 328.00,287.00 321.92,282.23 313.29,275.30 306.00,273.00 306.00,273.00 306.00,309.00 306.00,309.00 306.00,309.00 145.00,309.00 145.00,309.00 145.00,309.00 145.00,350.00 145.00,350.00 145.00,350.00 214.00,350.00 214.00,350.00 214.00,350.00 231.00,349.00 231.00,349.00 231.00,349.00 268.00,349.00 268.00,349.00 268.00,349.00 296.00,349.00 296.00,349.00 298.60,349.01 302.42,348.67 304.42,350.60 307.07,353.15 306.99,360.49 307.00,364.00 307.00,364.00 307.00,387.00 307.00,387.00 Z" fill="#ffa500" /> </svg>
如果需要用JS动态渲染,直接把拆分后的三个路径变量赋值给对应path元素的d属性即可。
内容的提问来源于stack exchange,提问作者Gerard Mendiola
相关产品推荐
相关产品推荐

