我希望能够以与CSS线性渐变相同的方式指定SVG线性渐变。例如,在CSS渐变中,您可以指定渐变从一个框的左上角开始,到右下角结束。当框被调整大小时,背景渐变会自动适应新的大小。
在我的第一次尝试中,我通过指定角度并通过计算盒子大小来计算x1、y1、x2、y2坐标,从而使用SVG复制了CSS线性渐变。但是,如果调整框的大小,则渐变的角度不会改变,并且不再正确。(我必须重新计算所有坐标)。
我的下一次尝试是使用转换来旋转渐变。以下是一些代码:
现在,这适用于尺寸为(300,100)的框,但您会发现我必须指定旋转中心的绝对值(150,50)。
我可以使用百分比来指定中心吗?最终,我希望渐变角度能够适应框的尺寸。
在我的第一次尝试中,我通过指定角度并通过计算盒子大小来计算x1、y1、x2、y2坐标,从而使用SVG复制了CSS线性渐变。但是,如果调整框的大小,则渐变的角度不会改变,并且不再正确。(我必须重新计算所有坐标)。
我的下一次尝试是使用转换来旋转渐变。以下是一些代码:
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<linearGradient id="g1" gradientUnits="userSpaceOnUse"
gradientTransform="rotate(-45 150 50)">
<stop stop-color="#FF0000" offset="0"/>
<stop stop-color="#00FF00" offset="0.5"/>
<stop stop-color="#0000FF" offset="1"/>
</linearGradient>
<rect x="0" y="0" width="100%" height="100%" fill="url(#g1)" />
</svg>
现在,这适用于尺寸为(300,100)的框,但您会发现我必须指定旋转中心的绝对值(150,50)。
我可以使用百分比来指定中心吗?最终,我希望渐变角度能够适应框的尺寸。