You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SVG直线上设置渐变偏移?解决渐变显示单一颜色问题

SVG直线线性渐变只显示单一颜色的解决方法

问题原因

你设置的线性渐变使用了gradientUnits="userSpaceOnUse",但渐变的坐标范围(x1="11.111" x2="33.111" y1="44.111" y2="77.111")和直线的实际位置(起点1518 1131、终点1681.63 1131)完全脱节。渐变仅在全局坐标系的小范围内生效,直线完全处于这个范围外,只能采样到渐变的单一收尾颜色(蓝色)。

解决方案

提供两种可行的修复方式:

方法一:对齐渐变与直线的全局坐标

直接将线性渐变的起点和终点设置为直线的起点和终点,让渐变范围完全覆盖直线,确保颜色沿着直线方向过渡:

<defs>
<linearGradient id="Gradientm5cf5" x1="1518" x2="1681.63" y1="1131" y2="1131" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="red"></stop>
<stop offset="50%" stop-color="blue"></stop>
</linearGradient>
</defs>

<path d="M 1518 1131 L 1681.63 1131" fill="none" stroke="url(#Gradientm5cf5)" stroke-miterlimit="10" pointer-events="stroke" stroke-width="6" style="--animation-time:1s;" class="flow">
</path>

方法二:使用对象边界框(灵活复用)

切换为gradientUnits="objectBoundingBox",基于直线自身的边界框定义渐变方向,无需关心直线的全局位置,适合需要复用渐变的场景:

<defs>
<linearGradient id="Gradientm5cf5" x1="0%" x2="100%" y1="0%" y2="0%" gradientUnits="objectBoundingBox">
<stop offset="0%" stop-color="red"></stop>
<stop offset="50%" stop-color="blue"></stop>
</linearGradient>
</defs>

<path d="M 1518 1131 L 1681.63 1131" fill="none" stroke="url(#Gradientm5cf5)" stroke-miterlimit="10" pointer-events="stroke" stroke-width="6" style="--animation-time:1s;" class="flow">
</path>

如果是斜线,只需调整渐变的x1/x2/y1/y2或添加gradientTransform旋转渐变方向即可。

内容的提问来源于stack exchange,提问作者Celal Poyraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:15:59