SVG中的椭圆梯度

时间:2014-01-07 18:14:30

标签: web graphics svg gradient ellipse

有没有办法在SVG中制作椭圆渐变?

我尝试了下面建议的代码,但它只显示一个红色椭圆,而不是渐变:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN"
 "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd">

<svg width="100%" height="100%" 
    xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:ev="http://www.w3.org/2001/xml-events" >

  <defs>
    <radialGradient id="gradientDefinition"
      gradientUnits="userSpaceOnUse">
      <stop stop-color="yellow" offset="0%" />
      <stop stop-color="red" offset="100%" />
    </radialGradient>
  </defs>

  <ellipse cx="250" cy="150" rx="200" ry="100" stroke="white"
    stroke-width="1" stroke-dasharray="1 1 1 1"
    style="fill:url(#gradientDefinition)" />
</svg>

我想要一个椭圆渐变,而不是椭圆内的圆形渐变。

1 个答案:

答案 0 :(得分:1)

总结之前的调查结果,似乎从gradientUnits="userSpaceOnUse"标记中删除<radialGradient> 属性对允许径向渐变成为(或至少看起来变成)椭圆形。此外,为每个stop-opacity标记添加<stop>属性和值可以更容易地看到椭圆渐变效果(至少出于演示目的)。

以下是进行了上述更改的代码:

<defs>
    <radialGradient id="gradientDefinition" >
        <stop stop-color="yellow" offset="0%" stop-opacity="0" />
        <stop stop-color="red" offset="100%" stop-opacity="1" />
    </radialGradient>
</defs>

要显示此代码似乎有效:

请参阅: elliptical radialGradient vs circular radialGradient

还有一个tutorial online似乎为类似的椭圆渐变方法提供了类似的行为,该教程的结果可以在jsFiddle中找到。

注意:如果此方法不适用于您的目的,可能还有其他一些更好的方法(可能与gradient transformations或类似的东西有关...)