SVG线性渐变objectBoundingBox vs userSpaceOnUse

时间:2018-05-31 05:33:17

标签: svg linear-gradients

我正在制作两个渐变:一个在objectBoundingBox单元中,另一个在userSpaceOnUse中。这个想法是让它们看起来一样。但不知何故,他们是不同的。这是svg文件。



<svg width="500" height="500" viewBox="0 0 500 500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
        <linearGradient id="user-grad" gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="200" y2="100">
          <stop stop-color="orange" offset="0"/>
          <stop stop-color="blue" offset="1"/>
        </linearGradient>
        <linearGradient id="box-grad" x1="0" y1="0" x2="1" y2="1">
          <stop stop-color="orange" offset="0"/>
          <stop stop-color="blue" offset="1"/>
        </linearGradient>
    </defs>
    <rect x="0" y="0" width="200" height="100" fill="url(#user-grad)"/>
    <rect x="250" y="0" width="200" height="100" fill="url(#box-grad)"/>    
</svg>
&#13;
&#13;
&#13;

这是它的样子

enter image description here

它们看起来不一样吗?

1 个答案:

答案 0 :(得分:4)

  

它们看起来不一样吗?

没有。使用对象边界框坐标时,基本上将1x1方形转换为矩形。因此,拉伸0到1坐标以适合矩形。从而导致梯度也拉伸。

如果您希望它们看起来相同,则需要对您的userSpaceOnUse应用渐变变换,它应用等效拉伸。

<svg width="500" height="500" viewBox="0 0 500 500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
        <linearGradient id="user-grad" gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="100" y2="100" gradientTransform="scale(2, 1)">
          <stop stop-color="orange" offset="0"/>
          <stop stop-color="blue" offset="1"/>
        </linearGradient>
        <linearGradient id="box-grad" x1="0" y1="0" x2="1" y2="1">
          <stop stop-color="orange" offset="0"/>
          <stop stop-color="blue" offset="1"/>
        </linearGradient>
    </defs>
    <rect x="0" y="0" width="200" height="100" fill="url(#user-grad)"/>
    <rect x="250" y="0" width="200" height="100" fill="url(#box-grad)"/>    
</svg>