SVG筆記:重覆使用

當我開始做「帽子與烏龜」時,我需要計算每一個下落的拼板的端點坐標。後來我想,如果svg能重覆使用某個圖形就好了。

想不到svg真的有這個功能,它就是<use>,只需要href引用某個元素的id,就可以重覆使用該元素。

如果初始圖形不顯示,可以寫在defs中:

<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg">
  <!-- Some graphical objects to use -->
  <defs>
    <circle id="myCircle" cx="0" cy="0" r="5" />

    <linearGradient id="myGradient" gradientTransform="rotate(90)">
      <stop offset="20%" stop-color="gold" />
      <stop offset="90%" stop-color="red" />
    </linearGradient>
  </defs>

  <!-- using my graphical objects -->
  <use x="5" y="5" href="#myCircle" fill="url('#myGradient')" />
</svg>

xlink:href與href的區別是,xlink可以引用svg以外的元素,而一般我們會把它所要重覆使用的圖形寫在svg裏,所以僅使用href就足夠了。

另外有人會推薦將<use>與<symbol>配合使用,不過我認為symbol除了包含自己的viewbox之外沒啥特別的,因此一般用不到。

Leave a Comment